是的,它與SpriteKit不同,因爲您試圖從SKScene而不是UIViewController呈現。
試試這個,看看它是否
if (self.interstitial.isReady) {
self.interstitial.presentFromRootViewController(self.view?.window?.rootViewController)
}
如果你得到一個零崩潰,現在比你沒有正確初始化的廣告屬性。您還應該進行一些檢查以確保不會發生。
這就是我gitHub助手的adMob代碼的外觀。
你應該有一個屬性,像這樣
var interstitial: GADInterstitial?
比視圖didLoad你應該預裝廣告
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()
}
的可能的複製[斯威夫特:無法類型的值「GameScene」轉換爲預期的參數類型「!UIViewController中」(http://stackoverflow.com/questions/34692755/swift-cannot-convert-value- of-type-gamescene-to-expected-argument-type-uivie) –
@SashaKozachuk相同的答案沒有解決我的問題 –