iOS AdMob广告未在非测试设备上显示

14
我按照谷歌提供的教程:https://developers.google.com/mobile-ads-sdk/docs/admob/ios/quick-start,设置了admob横幅广告。我的代码与上面链接中的指南完全相同,因此当我在测试设备或模拟器上运行应用程序时,会出现“智能横幅”、“测试广告”。但是一旦我删除下面的代码行,就不会显示任何横幅广告。
 request.testDevices = @[ @"70b9ee4e66c8e6fa26cb84def25706d9" ];

另外,我已经在另一个设备上加载了应用程序,但仍然没有广告横幅出现,这让我想知道当我将应用程序提交到App Store时,所有用户都不会在他们的设备上看到广告是很合理的。为什么会发生这种情况?我一直在琢磨这个问题!在我确定一切都正常工作并且我知道广告不仅会在测试设备上出现,而且在应用程序发布后也会出现之前,我不想将其提交进行审核。提前感谢! :)


你能分享一下你的代码吗?我刚刚在我的应用程序中添加了AdMob。你可以从AdMob网站创建ID,并检查你的bannerView是否显示真实广告。 - Yucel Bayram
10个回答

5
-(void)adViewDidReceiveAd:(GADBannerView *)bannerView;
-(void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error;

不显示实时广告可能有多种原因。

  1. 检查您的Google AdMob帐户付款信息是否已填写。如果未填写,请填写。
  2. 检查您的设备是否注册为测试设备,否则您可能会被Google暂停30天左右。
  3. 您可以检查委托方法并打印日志:

在我的情况下,我收到了错误消息:{ 'error': 'Request Error: No ad to show.', 'adType':'banner' }

但是,在我交付给客户后,它在客户端显示了。所以,我认为这个问题是由于Google在我的地区没有广告而引起的。


4
如果您正在使用iOS10,您应该将以下内容添加到您的.plist文件中:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsForMedia</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

否则将只会出现测试广告。您可以在 Firebase 的Admob文档中找到更多相关详细信息。


1
为什么我需要将这个放在我的plist文件中? - Pramod More
请参考文档中提到的链接。由于这个原因,广告可能无法显示。 - Dheeraj Gupta
NSAllowsArbitraryLoads异常是必需的,以确保您的广告不受 iOS 9 设备上的ATS影响,而NSAllowsArbitraryLoadsForMedia和NSAllowsArbitraryLoadsInWebContent则要求确保您的广告不受 iOS 10 及更高版本设备上的 ATS 影响。 - mvandillen
2
@mvandillen 这些设置在iOS 11或更高版本中是否仍然需要?AdMob的相关文档并没有明确说明。 - Bruno Bieri

3

解决方案很奇怪,但有效:

按照谷歌提供的iOS广告中介设置指南进行操作时,该指南告诉你使用Storyboard/nib实现。一旦我删除了这种方法,只是通过编程方式实现GADBannerView,一切都开始按预期工作了。相当令人不爽的问题,但幸运的是它已经解决了,我可以继续前进。


2

我曾经遇到过同样的问题。

我的错误在于我已经在AdMob中为我的Android应用程序创建了一个应用程序,这非常好用,但是当我在iOS中创建应用程序时,我所做的一切就是在同一应用程序下创建另一个广告单元。这样做给了我与你看到的相同的结果。

为了解决这个问题,我在AdMob中创建了一个新的面向iOS平台的应用程序,并在其中创建了一个广告单元,这解决了我的问题,现在我在我的应用程序中看到了真正的广告。


2

如果您的设置中启用了有限广告跟踪,则不会出现此内容。请在您的设备上检查是否未启用“限制广告跟踪”:

设置 -> 隐私 -> 广告


那么在实时版本中,如果您提到的设置被关闭,它会显示任何广告吗? - Rahul Naik

0

您是否已经在AdMob注册了帐户?如果是,您是否已经用自己的广告单元ID替换了快速入门中包含的测试广告单元ID?如果没有,那么这就可以解释您所看到的行为(示例中的ID仅用于测试广告,不会提供真实广告)。

广告单元ID标识应用程序中的广告位置,并且对您来说是唯一的。生成AdMob广告单元ID的说明在他们的帮助文档中。


0
在我的情况下,实际上是因为我没有使用正确的广告单元ID(斜杠后面的部分)。我能够找到它,因为我使用了谷歌提供的示例ID,然后我进入我的AdMob帐户,点击横幅广告,我意识到plist(或应用程序委托中的初始设置)和广告单元的两个数字是不同的。我可能花了几个小时 :-(

0
我收到了以下错误信息:“广告请求成功,但由于缺乏广告库存而未返回广告。” 这也可以解释为什么广告不会显示。

-2
你在 Google AdMob 账户中注册了帐户,我相信这一点。你已经获得了自己注册账户的测试ID。按照精确的步骤并检查你在代码中遵循的 Objectice-C 编程语言中的 "self.bannerView.adUnitID" 和 "self.bannerView.rootViewController = self;" 两个部分。最重要的是检查正确的横幅广告尺寸,这是默认尺寸。祝你成功。享受编程吧!

-3

如果还有人在寻找解决方案,这里提供一个。

bannerView = GADBannerView();

GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = 
["YOUR DEVICE ID" ]
        bannerView.adUnitID = "YOUR ADMOB ID"
        bannerView.frame = CGRect(x: 0, y: screenHeight * 0.25, width: screenWidth, height: screenWidth * 0.2) // you can customise this
        bannerView.rootViewController = self
        let request = GADRequest()
        bannerView.load(request)
        self.view.addSubview(bannerView);

4
如果您回答一个旧问题,加入一些背景信息以解释您的答案如何有助于其他StackOverflow用户会让您的答案更有用,特别是对于已经有被接受的答案的问题。请参考:如何撰写好的答案 - David Buck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接