iOS 14で追加されたIDFA取得とAdMobの対応方法

Published by @SoNiceInfo at 8/19/2020


iOSアプリをiOS14のIDFA取得に対応してAdMobで広告を配信する画像

この記事の背景

とりあえず実装したい人はiOS 14対応の進め方まで読み飛ばしてください

iOS 14でIDFAを利用するにはユーザ許可が必要になった

AdMobに代表される広告配信業者はIDFAという端末を一意に特定するための識別子を使っています。
ユーザに興味のある広告を配信するための仕組みです。しかし、iOS 14からIDFAを利用するためにはアプリ内でユーザにその許可を貰う必要があります。

iOS 14に対応したGoogle Mobile Ads SDKにアップデート

Googleは8/11にiOS 14に対応したGoogle Mobile Ads SDKを配信しました。
また、このアップデートではIDFAの代わりにAppleが要する広告ネットワークのSKAdNetworkにも対応しています。
今回はiOS 13以前で作成したアプリをiOS 14でも引き続き広告配信できるようにアップデートする方法を紹介します。

iOS 14対応の進め方

  1. Google Mobile Ads SDKを7.64.0以上にアップデート
  2. AppTrackingTransparencyダイアログ(IDFAを利用する許可をもらうダイアログ)を表示させる

Google Mobile Ads SDKをアップデートする

iOS 14で広告を配信できるようにするためにGoogle Mobile Ads SDKを7.64.0以上にアップデートします。
Terminalを開いてアプリのディレクトリでPodをアップデートします。

$ cd YOUR_APP_PROJECT
$ pod update Google-Mobile-Ads-SDK

Info.plistにNSUserTrackingUsageDescriptionを追加する

Info.plistにNSUserTrackingUsageDescriptionを追加する画面

ここではユーザにアプリ内の広告にIDFAを利用する許可をもらうダイアログを表示します。
Xcodeでinfo.plistを開いてKeyに「Privacy - Tracking Usage Description」を入力します。
Valueにはユーザに伝えたい文言を入力します。

該当の部分はテキストアプリで開くとこのようになっています。

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

Info.plistにSKAdNetworkItemsを追加する

Info.plistにSKAdNetworkItemsを追加する画面

ここではGoogleがSKAdNetworkを利用できるようにします。
ユーザにIDFAの取得を拒否された場合でもAppleが提供するSKAdNetworkを利用して広告を配信するために利用するものです。
ここで設定する値は今後変更される可能性があるのでGoogleの公式サイトをチェックしましょう。

該当の部分はテキストアプリで開くとこのようになっています。

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

AppTrackingTransparencyダイアログを表示させてGoogle Mobile Ads SDK を初期化する

AppTrackingTransparencyダイアログ画面

ここから実際にユーザにIDFAを利用する許可をもらうダイアログを表示させます。
ダイアログを表示させるにはATTrackingManager.requestTrackingAuthorizationを利用します。
statusには.authorized, denied等が入ってきますがATTrackingManager.AuthorizationStatusで詳細を確認してください。
ユーザによりIDFA利用許可されればIDFAを利用した広告が、拒否されるとSKAdNetworkを利用した広告が配信されます。

import AppTrackingTransparency
import AdSupport
import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                GADMobileAds.sharedInstance().start(completionHandler: nil)
            })
        } else {
            // Fallback on earlier versions
            GADMobileAds.sharedInstance().start(completionHandler: nil)
        }
        return true
    })
})

参考

Preparing your app for iOS 14+ - Google AdMob ヘルプ
Prepare for iOS 14+  |  Google Developers