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日本語対応と同じようにInfoPlist.stringsに以下を追加します。
(この文言がAppleの審査基準を満たしているかは保証できませんのであしからず。)

NSUserTrackingUsageDescription = "お客様の興味関心に合わせた広告を表示するために利用します";

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
    })
})

AppTrackingTransparencyダイアログの出し方を工夫する

ユーザにとってはこのダイアログを見ただけで不信感を抱き許可されないケースが考えられます。結果としてユーザと全く関連のない広告が表示されることによりアプリの収益が下がる恐れがあります。
そこで、企業やアプリ開発者によってはATTダイアログを表示する直前に、独自の補足説明ダイアログを表示しています。
Yahoo!リアルタイム検索やTwitterで「IDFA」や「ATT」と検索するとその例が見れるので参考にしましょう。
「IDFA」のTwitter検索結果 - Yahoo!リアルタイム検索

ただし、「許可」することを強要したり誘導するような独自ダイアログはAppleの審査ではじかれる恐れがあるので注意して実装しましょう。

Per the App Store Review Guidelines: 5.1.1 (iv), apps must respect the user’s permission settings and not attempt to manipulate, trick, or force people to consent to unnecessary data access.

参考

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