[SwiftUI] GoogleAdMob でテスト用の広告を表示させる方法

  • 2022年12月25日
  • 2023年11月9日
  • Swift
  • 512View
  • 0件
・広告を実際に表示して画面レイアウトを考えたい!
・リリースに必要なことは後にしてテストに必要な実装方法が知りたい!
・とりあえず広告を表示したい!

iOSアプリの開発をしているとこのようなことがあるのではないでしょうか。

Googleが提供しているSDKを使用すれば広告を実装することができるのですが、

今回はテスト用に必要な情報に絞った内容をご紹介します。

CocoapodsでGoogle-Mobile-Ads-SDKをインストール

まずは、Google-Mobile-Ads-SDKをインストールします。

ここでは、Cocoapodsを使った方法をご紹介します。

やり方は簡単!

Podfileに pod ‘Google-Mobile-Ads-SDK’ を追加して、 pod update を実行すればOKです。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Sample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Sample
  pod 'Google-Mobile-Ads-SDK'

end

Google Ad Mob でアプリを登録

テスト用の広告には不要です。

リリース時に登録してください。

Google Ad Mob で広告を登録

テスト用の広告には不要です。

リリース時に登録してください。

User-Defined を設定

プロジェクトを選択し、 TARGETS Build Settings タブ の中の User-Defined に次の内容を設定します。

ここにIDを設定することでデバッグとリリースでIDを自動で切り替えることができます。

BANNER_ID

Debugca-app-pub-3940256099942544/2934735716
Releaseリリース時に設定してください。
※Google Ad Mob で広告を登録したときに取得する広告ユニット IDを設定

GADApplicationIdentifier

Debugca-app-pub-3940256099942544~1458002511
Releaseリリース時に設定してください。
※Google Ad Mob でアプリを登録したときに取得するアプリIDを設定  

「+」をクリックすることでUser-Definedの追加をすることができます。

Info.plist を設定

許諾ダイアログメッセージ

Apple Developer

App Storeは、世界中の才能あふれるデベロッパが開発したアプリをユーザーが安心して見つけられる、安全かつ信頼できる…

iOS 14.5、iPadOS 14.5、tvOS 14.5以降では、他社が所有するAppやWebサイトでの行動をトラッキングする場合、ユーザーに許可を求めることが必要になります。

上記より、ユーザにトラッキングの許可を求めるダイアログを表示する必要があります。

そのダイアログのメッセージを NSUserTrackingUsageDescription で設定します。

<key>NSUserTrackingUsageDescription</key>
<string>「許可」するとお客様に最適化された広告が表示されます</string>

広告ユニット ID

User-Defined の BANNER_ID の値をプログラムから使用できるように設定します。

広告を複数対応できるように配列型にしておきます。

<key>AdUnitIDs</key>
<dict>
    <key>banner</key>
    <string>$(BANNER_ID)</string>
</dict>

アプリID

User-Defined の GADApplicationIdentifier の値をプログラムから使用できるように設定します。

<key>GADApplicationIdentifier</key>
<string>$(GADApplicationIdentifier)</string>

アドネットワークID

<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cstr6suwn9.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4fzdc2evr5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4pfyvq9l8r.skadnetwork </string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>2fnua5tdw4.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ydx93a7ass.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>5a6flpkh64.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>p78axxw29g.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>v72qych5uu.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ludvb6z3bs.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cp8zw746q7.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>c6k4g5qg8m.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>s39g8k73mm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3qy4746246.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3sh42y64q3.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>f38h382jlk.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>hs6bdukanm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>prcb7njmu6.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>v4nxqhlyqp.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>wzmmz9fp6w.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>yclnxrl5pm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>t38b2kh725.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>7ug5zh24hu.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>9rd848q2bz.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>y5ghdn5j9k.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>n6fk4nfna4.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>v9wttpbfk9.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>n38lu8286q.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>47vhws6wlr.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>kbd757ywx3.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>9t245vhmpl.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>a2p9lx4jpn.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4468km3ulz.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>2u9pt9hc89.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>8s468mfl3y.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>av6w8kgt66.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>klf5c3l5u5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ppxm28t8ap.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>424m5254lk.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ecpz2srf59.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>uw77j35x4d.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>mlmmfzh3r3.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>578prtvx9j.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4dzt52r2t5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>gta9lk7p23.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>e5fvkxwrpn.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>8c4e2ghe7u.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>zq492l623r.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3rd42ekr43.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3qcr597p9d.skadnetwork</string>
    </dict>
  </array>

アドネットワークIDの設定する内容は変わる可能性があるので、次のサイトを確認してください。

広告を表示するプログラムを実装

あとはプログラムを実装するだけです。

サンプルを載せておくので参考にしてください。

import SwiftUI
import GoogleMobileAds

@main
struct Sample2App: App {
    
    @UIApplicationDelegateAdaptor (AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // GoogleMobileAdsのインスタンスを生成
        GADMobileAds.sharedInstance().start(completionHandler: nil)
        return true
    }
}
import SwiftUI
import GoogleMobileAds
import AppTrackingTransparency


struct ContentView: View {
    var body: some View {
        VStack {
            // 広告を表示
            BannerAdView().frame(width: 320, height: 50)
        }
        .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in
            // トラッキングの許諾ダイアログメッセージを表示
            Task {
                let result = await ATTrackingManager.requestTrackingAuthorization()
                if result == .authorized {
                    GADMobileAds.sharedInstance().start(completionHandler: nil)
                }
            }
        }
    }
}
import SwiftUI
import GoogleMobileAds

// バナー表示用のクラス
struct BannerAdView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let banner = GADBannerView(adSize: GADAdSizeBanner)
        if let id = adUnitID(key: "banner") {
            banner.adUnitID = id
            let scenes = UIApplication.shared.connectedScenes
            let windowScene = scenes.first as? UIWindowScene
            banner.rootViewController = windowScene?.keyWindow?.rootViewController
            let request = GADRequest()
            request.scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
            banner.load(request)
        }
        return banner
    }
    
    func adUnitID(key: String) -> String? {
        guard let adUnitIDs = Bundle.main.object(forInfoDictionaryKey: "AdUnitIDs") as? [String: String] else {
            return nil
        }
        return adUnitIDs[key]
    }
 
    func updateUIView(_ uiView: GADBannerView, context: Context) {
    }
}

お疲れ様でした。