【问题标题】:Admob interstitial ad fatal error in iOS9, Swift, SpriteKit gameiOS9、Swift、SpriteKit 游戏中的 Admob 插页式广告致命错误
【发布时间】:2016-03-10 07:44:34
【问题描述】:

尝试在我的 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 说明中的测试代码),但没有骰子 - 同样的错误。

任何建议将不胜感激。

干杯, 凯文

【问题讨论】:

    标签: swift sprite-kit admob ios9


    【解决方案1】:

    您是否检查广告已正确预加载,因此不为零?

    您还可以在 ...isReady 行之前添加检查

     guard self.interstitial != nil else { return }
    

    确保它不为零。

    如果您仍然卡住,我在 gitHub 上有一个广告助手,您可以查看一下,它也包括 adMob

    https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper

    【讨论】:

    • 谢谢,该保护声明确实阻止了崩溃,但我的插页式广告仍然为零,因此没有广告加载。我正在查看您的帮助代码。我使用 CocoaPods 来引入 SDK 和依赖项,并且我不使用 iAd,所以不确定这是否合适,但会试一试。感谢帮助。干杯。
    • 哦,另外,鉴于这是一个没有 ViewController.swift 文件的游戏,假设 ViewController.swift 的指令可以应用于 GameViewController.swift 是否安全?
    • 是的,应该适用于任何视图控制器。一旦我完全了解 iAd 发生了什么,我将更新此帮助程序。仍然不确定为什么您的广告为零,您是否使用正确的 adMob ID 进行测试?
    • 您在 github 上的广告助手运行良好,crashoveride777。非常感谢!我不完全清楚如何从调试模式切换到实时模式——如果通过 TestFlight 或 App Store 下载应用程序,这是否会自动发生?还是我需要手动进行更改?
    • 嘿,如果您在项目中设置了 DEBUG 标志,它将自动更改。只需按照 gitHub 上的说明进行操作即可。当您将其发送到 appStore 时,它​​将自动进入发布模式。因为我还没有做过,所以不能 100% 确定试飞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多