##はじめに
iOS 14.5以降では、これまでの方法ではIDFA(広告ID)を取得できなくなります。
IDFAを取得できないと、AdMobなどで下記のようなことが起こります。
他社アプリと共通で参照できる端末固有のIDを使用できなくなる
↓
端末内の他社アプリの広告閲覧・クリック状況との紐付けができない
↓
表示する広告をユーザの興味に合わせてカスタマイズすることの精度が下がる
↓
ユーザの広告クリック率が下がって、アプリ提供者の収益が下がる
簡単に言うと
「IDFA取得できないと、AdMob広告とかのeCPMが下がって収益が下がるよ(たぶん)」
ということです。
iOS 14.5以降では、個別のアプリごとにIDFA許可を求めるダイアログを表示する必要があります。
このページではその方法を説明します。
##動作確認環境
Xcode: 12.4
iOS: 14.4
##準備
Info.plistに NSUserTrackingUsageDescription キーを追加します。
これをしておかないと、後述のダイアログ表示の時にアプリがクラッシュします。
<key>NSUserTrackingUsageDescription</key>
<string>「許可」を押すと、よりお客様に適した広告が表示されます。</string>
##トラッキング要求ダイアログ表示
IDFA取得許可を得るダイアログを表示したいタイミングで下記を実行すれば良いです。
ただし、許可要求できるのは基本的に1回だけなので、タイミングはよく考えた方が良いです。
import AppTrackingTransparency
(中略)
ATTrackingManager.requestTrackingAuthorization { (status) in
switch status {
case .authorized:
print("許可いただきありがとうございます!")
case .denied:
print("許可してもらえなかった。残念!")
case .restricted:
print("他の理由で制限されてるっぽい。18歳以下かな?")
default:
print("その他のステータス")
}
}
##要求時以外に現在の許可状況を確認することも可能
ATTrackingManager.trackingAuthorizationStatus で現在のIDFA取得許可状況を確認することができるます。
下記は、許可状況がdeniedだったら、設定画面でIDFA取得許可設定を変更をお願いするサンプルです。
(たぶんユーザに嫌がられるので実際にやるのはオススメはしませんが。)
if ATTrackingManager.trackingAuthorizationStatus == .denied {
let alertController = UIAlertController(title: "考え直して欲しいなぁ", message: "IDFA取得を設定画面から許可してくれませんか?", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "いいよ", style: .default, handler: { (action) in
let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}))
alertController.addAction(UIAlertAction(title: "やだ", style: .cancel, handler: nil))
present(alertController, animated: true, completion: nil)
}
##その他、所感
「自社アプリでIDFA取得できるようになったら、これまで通りの広告カスタマイズがされる」というわけではないと思っています。
これまでは端末内の全アプリ横断で広告クリック状況をもとに最適化できていたのに、
今後は他社アプリの多くでの広告クリック状況を最適化に使えなくなります。
そのため、自社アプリがIDFA取得できるか否かに関わらず、広告の最適化効果は下がると思っています。
IDFA取得できたとしても、その効果は実はそれほどないかもしれません。
私はアドテクの専門家でもなんでもない趣味プログラマーですので、
この考えについては間違ったことを言ってるかもしれません。
間違ってたらご指摘いただけると嬉しいです。