【AdMob】iPadでリワード広告が再生されない問題の解決方法!
この記事からわかること
- AdMobのリワード広告がiPadで再生できない場合の解決方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Swiftで作成したiOSアプリに導入しているAdMobのリワード広告がiPadではなぜか再生することができませんでした。今回はその解決方法をまとめていきます。
iPadでリワード広告が再生されない問題の解決方法
iOSアプリへのリワード広告の詳細な導入方法や必要なクラスやメソッドの意味については以下の記事を参考にしてください。
リワード広告が再生できなかったのは以下のコードでload
メソッドを定義していた場合です。iPhoneでは正常に動作しましたが、iPadでは再生することができませんでした。
// リワード広告の読み込み
func loadReward() {
GADRewardedAd.load(withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest(),completionHandler: { (ad, error) in
if let _ = error {
self.rewardLoaded = false
return
}
self.rewardLoaded = true
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
})
}
今回修正すべきポイントとなるのはload
メソッドの第二引数に渡す、広告リクエストを送るためのGADRequest
インスタンスです。
loadメソッドの定義
class func load(withAdUnitID adUnitID: String, request: GADRequest?) async throws -> GADRewardedAd
iPadでは明示的に表示するシーンの指定が必要
iPadはiPhoneの時とは少し異なった動作をすることが多いです。NavigationView
では明示的にstack
を指定しないと見た目が崩れてしまったり、シェアボタンを実装するためのUIActivityViewController
がクラッシュしてしまったりと何かと厄介な存在です。
今回の問題もシェアボタンの時の原因:「ポップオーバー画面を表示させる際はビューと表示位置を明示的に指定する必要がある」と近しいものかなと思います。
なのでUIApplication
クラスのconnectedScenes
プロパティからメモリ内でアクティブになっているシーンを取得し明示的にシーンを指定することで解決できました。
解決したコード
// リワード広告の読み込み
func loadReward() {
let request = GADRequest()
request.scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
GADRewardedAd.load(withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { (ad, error) in
if let _ = error {
self.rewardLoaded = false
return
}
self.rewardLoaded = true
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
})
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書