我正试图在游戏结束时加载此谷歌插页式广告。
if (self.interstitial.isReady)
{
self.interstitial.presentFromRootViewController(self)
}
但是我收到的错误是“#34;无法转换类型' GameScene'预期参数类型' UIViewController!"。 我在其他不使用sprite kit的应用程序中使用了相同的代码行,是否与sprite kit不同?
答案 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()
}