iOS9、Swift、SpriteKit 游戏中的 Admob 插页式广告致命错误
Admob interstitial ad fatal error in iOS9, Swift, SpriteKit game
当我尝试在我的 Swift、SpriteKit、iOS9 游戏中放置 admob 插页式广告时,我遇到了致命的崩溃。
我相信我已经按照此处的简化说明通过 CocoaPods 正确设置了 Admob SDK 和依赖项:
https://developers.google.com/admob/ios/quick-start
我的播客文件:
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
行。
我确实在此处详细说明了应用程序传输安全 (ATS) 津贴:
https://developers.google.com/admob/ios/ios9
XML 看起来像:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我也尝试用我的实际广告 ID 更改上面的广告单元 ID(测试代码 Google 在说明中),但没有骰子 - 同样的错误。
如有任何建议,我们将不胜感激。
干杯,
凯文
您是否正在检查广告是否已正确预加载,因此不是零?
您还可以在 ...isReady 行之前添加一个检查
guard self.interstitial != nil else { return }
确保它不为零。
如果您仍然卡住了,我有一个广告助手可以让您gitHub结帐,它也包括 adMob
https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper
当我尝试在我的 Swift、SpriteKit、iOS9 游戏中放置 admob 插页式广告时,我遇到了致命的崩溃。
我相信我已经按照此处的简化说明通过 CocoaPods 正确设置了 Admob SDK 和依赖项: https://developers.google.com/admob/ios/quick-start
我的播客文件:
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
行。
我确实在此处详细说明了应用程序传输安全 (ATS) 津贴: https://developers.google.com/admob/ios/ios9
XML 看起来像:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我也尝试用我的实际广告 ID 更改上面的广告单元 ID(测试代码 Google 在说明中),但没有骰子 - 同样的错误。
如有任何建议,我们将不胜感激。
干杯, 凯文
您是否正在检查广告是否已正确预加载,因此不是零?
您还可以在 ...isReady 行之前添加一个检查
guard self.interstitial != nil else { return }
确保它不为零。
如果您仍然卡住了,我有一个广告助手可以让您gitHub结帐,它也包括 adMob
https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper