我尝试在我的Swift,SpriteKit,iOS9游戏中放置一个admob插页式广告时,发生了致命的崩溃。
我相信我已经通过CocoaPods正确设置了Admob SDK和依赖项,遵循此处的简化说明: https://developers.google.com/admob/ios/quick-start
我的Podfile:
platform :ios, '7.0'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
pod 'Google-Mobile-Ads-SDK', '~> 7.0'
target 'My Project's Name' do
end
然后我按照本指南操作: https://developers.google.com/admob/ios/interstitial
这是一款游戏,所以我把代码放在GameViewController.swift(而不是ViewController.swift。)相关位:
import GoogleMobileAds
class GameViewController: UIViewController, GADInterstitialDelegate {
var interstitial: GADInterstitial!
override func viewDidLoad() {
super.viewDidLoad()
print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion())
self.interstitial = createAndLoadInterstitial()
// unrelated code
}
}
func createAndLoadInterstitial() -> GADInterstitial {
var interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
interstitial.delegate = self
interstitial.loadRequest(GADRequest())
return interstitial
}
func interstitialDidDismissScreen(ad: GADInterstitial!) {
self.interstitial = createAndLoadInterstitial()
}
func gameOver() {
if self.interstitial.isReady {
self.interstitial.presentFromRootViewController(self)
}
}
我在控制台中获得了正确的输出:Google Mobile Ads SDK version: afma-sdk-i-v7.7.0
但是我在gameOver()函数中遇到了这个错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
它似乎位于if self.interstitial.isReady
行。
我确实在这里详细说明了App Transport Security(ATS)津贴: https://developers.google.com/admob/ios/ios9
XML看起来像:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我还尝试使用我的实际广告ID更改上面的广告单元ID(Google的说明中的测试代码),但没有骰子 - 同样的错误。
任何建议都将不胜感激。
干杯, 凯文
答案 0 :(得分:2)
您是否检查广告是否已正确预加载,因此不是零?
您还可以在...... isReady行
之前添加一项检查 guard self.interstitial != nil else { return }
确保它不是零。
如果你仍然卡住我在gitHub上有一个广告帮助你退房,它还包括adMob
https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper