0

偶然見つけた問題について非常に混乱しています。主にSpriteKitを使用して、迅速なゲームをしています。ゲームの最後に広告が読み込まれます。または、ユーザーがゲームを終了することを決定すると、広告も読み込まれます。

ゲームが正常にプレイされている場合。流れは以下の通り…

MenuScene -> GameScene -> [広告読み込み] -> GameOverScene

ユーザーがゲームを終了した場合...

MenuScene -> GameScene -> ユーザーが一時停止を選択 -> ユーザーが終了をクリック -> [広告読み込み] -> メニュー シーン

どちらのシナリオも iOS 13 で完全に機能します

ただし、iOS 12 では、ゲームの途中で終了したユーザーのみが機能し、他のシナリオではアプリがフリーズします (ログに明らかなエラーはありません)。

いずれかの方法でゲームを終了すると、まったく同じ関数が呼び出されます。通知を使用して広告を読み込みます。

次のコードはすべて GameViewController にあります。そして、通知は GameScene に投稿されます。

NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.showAd), name: NSNotification.Name(rawValue: "loadAndShow"), object: nil)

ViewDidLoad()で広告を用意

myAd = createAd()

そして、関数は通知によって呼び出されます

@objc func showAd() {
    if (myAd.isReady) {
        myAd.present(fromRootViewController: self)
        myAd = createAd()
    }
}

func createAd() -> GADInterstitial {

    myAd = GADInterstitial(adUnitID: "MY ADMOB ID")
    let request = GADRequest()
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = ["MY DEVICE ID"]
    myAd.delegate = self
    myAd.load(request)
    return myAd

}

どんな助けでも素晴らしいでしょう

アップデート

潜在的な回避策を見つけました。現在、別のスレッドで広告を表示していますが、フリーズは発生していません。

        DispatchQueue.main.async {
            self.myAd.present(fromRootViewController: self)
        }

iOS13の方がこれに対する処理が優れているとしか思えません。そして、「ゲーム終了」シナリオが機能した理由は、GameViewController でもあるメニュー シーンに遷移していたためです。このアプリは、GameViewController から広告を表示しながら新しいシーンに移行することを好みませんでした。

4

0 に答える 0