メニュー
セール中のおすすめ商品

【SwiftUI】AdMob バナーを実装する

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

SwiftUI での AdMob 実装に少し手こずったので備忘録。

おぐけん

同じように手こずってる人は、ぜひ参考にしてみてください。

動作環境
  • Xcode 13.2
  • Swift 5.5
もくじ

CocoaPods で Mobile Ads SDK をインポート

SDK のインポートには CocoaPods を使用。プロジェクトの Podfile を開いてアプリのターゲットに以下を追加します。

pod 'Google-Mobile-Ads-SDK'

ターミナルで以下のコマンドを実行 。

pod install --repo-update

CocoaPods の使い方は検索すれば山ほど見つかると思うので省略します。

Info.plist を更新

Info.plist にキーを 2 つ追加します。

GADApplicationIdentifier キーの追加

ca-app-pub-xxxxxxxxxxxxxxxxx~xxxxxxxxxxxの部分には、あなたのアプリIDを入れます。(こちらから確認できます )

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxxx~xxxxxxxxxxx</string>

SKAdNetworkItems キーの追加

<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cstr6suwn9.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
     ………

上のものは情報が古い可能性があるので、最新の内容を以下のリンクからコピペしてください。

Xcode で Mobile Ads SDK を初期化

まずは GoogleMobileAds をインポートします。

import SwiftUI
import GoogleMobileAds

初期化するタイミングとしてはapplication(_:didFinishLaunchingWithOptions:)が解りやすいと思うので、UIApplicationDelegateに準拠したクラスを定義します。

import SwiftUI
import GoogleMobileAds

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions
                     launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    }
}

@main
struct DemoApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

application(_:didFinishLaunchingWithOptions:)内で Mobile Ads SDK を初期化します。

import SwiftUI
import GoogleMobileAds

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions
                     launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        GADMobileAds.sharedInstance().start(completionHandler: nil) //Mobile Ads SDK の初期化
        return true
    }
}

@main
struct DemoApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

SwiftUI でも AppDelegate クラスの作成と管理がおこなえるよう@UIApplicationDelegateAdaptorを使用します。

import SwiftUI
import GoogleMobileAds

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions
                     launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        GADMobileAds.sharedInstance().start(completionHandler: nil) //Mobile Ads SDK の初期化
        return true
    }
}

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

バナー広告の実装

バナー広告表示用のビューを作成します。(ここではAdMobBannerView

UIKit を SwiftUI アプリで取り扱うためUIViewRepresentableに準拠させています。

struct AdMobBannerView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let bannerView = GADBannerView(adSize: GADAdSizeBanner)
    }

    func updateUIView(_ uiView: GADBannerView, context: Context) {
    }
}

GADBannerView のプロパティ(adUnitIDrootViewController)を設定します。

struct AdMobBannerView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let bannerView = GADBannerView(adSize: GADAdSizeBanner)
        
        //adUnitID は広告を読み込む先の広告ユニットのID。です。(アプリ配信時には自分の広告ユニットIDに置き換える)
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" //バナー広告テスト用の広告ユニットID
        
        let windowScenes = UIApplication.shared.connectedScenes.first as? UIWindowScene
        bannerView.rootViewController = windowScenes?.keyWindow?.rootViewController
    }
    
    func updateUIView(_ uiView: GADBannerView, context: Context) {
    }
}

loadRequest: で広告をリクエストし、ビューを返します。

struct AdMobBannerView: UIViewRepresentable {
    func makeUIView(context: Context) -> GADBannerView {
        let bannerView = GADBannerView(adSize: GADAdSizeBanner)
        
        //バナー広告テスト用の広告ユニットIDです。配信時はご自身の広告ユニットIDに置き換えてください。
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
        
        let windowScenes = UIApplication.shared.connectedScenes.first as? UIWindowScene
        bannerView.rootViewController = windowScenes?.keyWindow?.rootViewController
        bannerView.load(GADRequest())
        return bannerView
    }
    
    func updateUIView(_ uiView: GADBannerView, context: Context) {
    }
}

バナー広告の呼び出し

以下のコードで好きな場所にバナー広告を配置できます。

AdMobBannerView()

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
もくじ