2016-03-11 76 views
-2

我試圖在遊戲結束時加載此谷歌插頁式廣告。SpriteKit和GoogleAdMobs插頁式廣告

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

但我得到一個錯誤,說:「不能將類型'GameScene'的值轉換爲預期參數類型'UIViewController!」。 我使用了與其他不使用sprite套件的應用程序相同的代碼行,是否與sprite套件有所不同?

+2

的可能的複製[斯威夫特:無法類型的值「GameScene」轉換爲預期的參數類型「!UIViewController中」(http://stackoverflow.com/questions/34692755/swift-cannot-convert-value- of-type-gamescene-to-expected-argument-type-uivie) –

+0

@SashaKozachuk相同的答案沒有解決我的問題 –

回答

0

是的,它與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() 
} 
+0

試試這個在哪裏? –

+0

就在你的代碼點。用這個替換第二行。查看更新的答案。 – crashoverride777

+0

如果你正在尋找一個漂亮而乾淨的解決方案,我還得到了gitHib的幫手。 https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper – crashoverride777