【AdMob】iPadでバナー広告が表示されない問題の解決方法!

この記事からわかること

  • AdMobバナー広告iPad表示できない場合の解決方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swiftで作成したiOSアプリに導入しているAdMobのバナー広告がiPadではなぜか表示することができませんでした。今回はその解決方法をまとめていきます。

iPadでバナー広告が再生されない問題の解決方法

iOSアプリへのバナー広告の詳細な導入方法については以下の記事を参考にしてください。

私が実際にバナー広告が表示できなくなっていたのは以下のコードで実装していた場合です。iPhoneでは正常に動作しましたが、iPadでは表示されませんでした。

import SwiftUI
import UIKit // こちらも必要
import GoogleMobileAds // 忘れずに

struct AdMobBannerView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let banner = GADBannerView(adSize: GADAdSizeBanner) // インスタンスを生成
        // 諸々の設定をしていく
        banner.adUnitID = "ca-app-pub-xxxxxxxxxxxxxxxxx/xxxxxxxx" // 自身の広告IDに置き換える
        banner.rootViewController = UIApplication.shared.windows.first?.rootViewController
        banner.load(GADRequest())
        return banner // 最終的にインスタンスを返す
    }

    func updateUIView(_ uiView: GADBannerView, context: Context) {
      // 特にないのでメソッドだけ用意
    }
}

今回修正すべきポイントとなるのはloadメソッドの引数に渡す、広告リクエストを送るためGADRequestインスタンスです。

loadメソッドの定義

class func load(withAdUnitID adUnitID: String, request: GADRequest?) async throws -> GADRewardedAd

iPadでは明示的に表示するシーンの指定が必要

iPadはiPhoneの時とは少し異なった動作をすることが多いです。NavigationViewでは明示的にstackを指定しないと見た目が崩れてしまったり、シェアボタンを実装するためのUIActivityViewControllerがクラッシュしてしまったりと何かと厄介な存在です。

今回の問題もシェアボタンの時の原因:「ポップオーバー画面を表示させる際はビューと表示位置を明示的に指定する必要がある」と近しいものかなと思います。

なのでUIApplicationクラスのconnectedScenesプロパティからメモリ内でアクティブになっているシーンを取得し明示的にシーンを指定することで解決できました。

解決したコード

struct AdMobBannerView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let banner = GADBannerView(adSize: GADAdSizeBanner) // インスタンスを生成
        // 諸々の設定をしていく
        banner.adUnitID = "ca-app-pub-3940256099942544/2934735716" // 自身の広告IDに置き換える
        let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
        banner.rootViewController = windowScene?.windows.first!.rootViewController
        // 追加
        let request = GADRequest()
        request.scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
        // 追加
        banner.load(request) // 変更
        return banner // 最終的にインスタンスを返す
    }

    func updateUIView(_ uiView: GADBannerView, context: Context) {
      // 特にないのでメソッドだけ用意
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index