【问题标题】:Admob interstitial doesn't workAdmob 插页式广告不起作用
【发布时间】:2017-06-01 10:28:57
【问题描述】:

我正在处理 Admob 插页式广告,特别是当我的应用程序的特定 ViewController 加载时,我试图显示一个插页式广告。我使用了官方 Admob 插页式指南提供的代码,但它不起作用:https://developers.google.com/admob/ios/interstitial?hl=it。我也在这里关注了这个视频:https://youtu.be/ahmQQ3OeY0Y?t=787(第 13.04 分钟停止视频)。如果您查看代码与指南中的相同。我的目标是在出现 RequestViewController 时显示广告,因此我尝试在 viewDidAppear 函数中显示广告。反正不管用,控制台显示这个错误:

要在此设备上获取测试广告,请调用:request.testDevices = @[kGADSimulatorID]

AppDelegate.swift

import UIKit
import UserNotifications
import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,GADInterstitialDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

        GADMobileAds.configure(withApplicationID: "ca-app-pub-*******")
    }
}

这是我展示广告的 ViewController:

RequestviewController.swift

class RequestViewController: UIViewController {

var myInterstitial : GADInterstitial?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool) {

    //display ad

    myInterstitial = createAndLoadInterstitial()

    if (myInterstitial?.isReady)!{
        print("\n\n\n\n\nReady")
        myInterstitial?.present(fromRootViewController: self)
    }else { print("\n\n\n\nAd wasn't ready") }
}

func createAndLoadInterstitial()->GADInterstitial {
    let interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")  //test Ad unit id
    interstitial.delegate = self
    interstitial.load(GADRequest())
    return interstitial
}
func interstitialDidReceiveAd(ad: GADInterstitial!) {
    print("interstitialDidReceiveAd")
}

func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) {
    print(error.localizedDescription)
}

func interstitialDidDismissScreen(ad: GADInterstitial!) {
    print("\n\n\n\n\n\ninterstitialDidDismissScreen")
    myInterstitial = createAndLoadInterstitial()
}

【问题讨论】:

  • 在应用启动时使用插播广告是不允许的做法,请避免 - support.google.com/admob/answer/6201362?hl=en
  • 如果 interstitial.isReady { } 之前添加一个检查点。我相信你的问题是它还没有准备好在 ViewDidAppear 上显示。而不是在这个视图控制器中实现这个。在另一个视图控制器的背面实现代码
  • @AmodGokhale 我在启动应用程序时不展示广告,广告应该稍后会出现
  • yes 检查您的代码是否使用 isReady 块执行。在 isReady 和其他代码中尝试记录器语句
  • 我使用这个解决方案解决了这个问题:github.com/DanielStormApps/Shared-AdMob-Interstitial

标签: swift admob gadinterstitial


【解决方案1】:

你需要这样写,

appDelegate.createAndLoadInterstitial()

代替,

appDelegate.myInterstitial?.present(fromRootViewController: self)

【讨论】:

  • 但如果这样做,广告将不会展示。
【解决方案2】:

看起来根本问题是RequestViewController的这一部分:

myInterstitial = createAndLoadInterstitial()

if (myInterstitial?.isReady)!{
    print("\n\n\n\n\nReady")
    myInterstitial?.present(fromRootViewController: self)
}else { print("\n\n\n\nAd wasn't ready") }

插页式广告是异步加载的,这意味着对 load() 的调用将在广告加载并准备好展示之前返回。如果您的应用在createAndLoadInterstitial 中调用load(),然后立即检查isReady,则广告没有时间实际加载,isReady 将始终为 false。

解决此问题的一个好方法是在您的 first 视图控制器中创建插页式广告,然后在过渡到 RequestViewController 之前显示它。这将使广告有时间加载,并且在同一过渡期间仍会显示它。

FWIW,ViewController 之间的过渡时间是您的应用流程中使用插页式广告的好地方,做得很好。

还有一行:

要在此设备上获取测试广告,请调用:request.testDevices = @[ kGADSimulatorID ]

不是错误。 Android 和 iOS SDK 始终将其打印到日志中,以便发布商知道如何为特定设备或模拟器获取测试广告。如果您在硬件设备而不是 iOS 模拟器上运行,您会在该行中看到设备的唯一标识符,然后您可以在代码中使用它来获取测试广告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2018-01-03
    相关资源
    最近更新 更多