SpriteKit和GoogleAdMobs插页式广告

时间:2016-03-11 23:00:20

标签: ios swift admob

我正试图在游戏结束时加载此谷歌插页式广告。

 if (self.interstitial.isReady)
        {
            self.interstitial.presentFromRootViewController(self)
        }

但是我收到的错误是“#34;无法转换类型' GameScene'预期参数类型' UIViewController!"。 我在其他不使用sprite kit的应用程序中使用了相同的代码行,是否与sprite kit不同?

1 个答案:

答案 0 :(得分:0)

是的,它在SpriteKit中有所不同,因为你试图从SKScene而不是UIViewController呈现。

试试这个,看它是否有效

if (self.interstitial.isReady) {
     self.interstitial.presentFromRootViewController(self.view?.window?.rootViewController)
}

如果您现在获得的是nil崩溃,而不是正确初始化广告属性。您还应该进行一些检查以确保不会发生这种情况。

这就是我的gitHub帮助器中的adMob代码的外观。

你应该拥有这样的财产

 var interstitial: GADInterstitial?

在视图中,你应该预加载广告

  interstitial = adMobLoadInterAd()

这是预加载代码。

  func adMobLoadInterAd() -> GADInterstitial {
    Debug.print("AdMob inter loading...")

    let googleInterAd = GADInterstitial(adUnitID: "Your adMob ID")
    googleInterAd.delegate = self

    let request = GADRequest()

    request.testDevices = [kGADSimulatorID] // DEBUG only

    googleInterAd.loadRequest(request)

    return googleInterAd
}

与您想要展示广告时相比,您可以称之为

func adMobShowInterAd() {
    guard interstitial != nil && interstitial!.isReady else { // calls interDidReceiveAd
        Debug.print("AdMob inter is not ready, reloading")
        interstitial = adMobLoadInterAd()
        return
    }

    Debug.print("AdMob inter showing...")
    interstitial?.presentFromRootViewController(self.view?.window?.rootViewController)
}

最后,在代理方法中,您应该在当前广告被取消时预先加载新广告。

 func interstitialDidDismissScreen(ad: GADInterstitial!) {
    Debug.print("AdMob inter closed")
    interstitial  = adMobLoadInterAd()
}