はじめに
IDFAの許可リクエストの表示タイミング・内容の具体例についてはこちらの記事を参考にしてください🙋♂️
2020年9月にリリースされたiOS14から、
iOS13まで端末単位で設定していたIDFAの取得許可(追跡型広告制限)が
端末兼アプリ単位の取得許可に変更され、
各アプリにて、通知や位置情報許可のように、ユーザに許可を取る必要がでてきます。
IDFAとは?iOS13と比較した詳しい挙動の違いは?は
こちらの素晴らしい記事にまとまっていたので割愛させていただきます。
https://qiita.com/yofuru/items/213b88b85553631204e4
重要なのはiOS14ではIDFAをデフォルトで取得できなくなることです。
本記事ではエンジニアがiOS14でIDFAを取得するために対応する必要がある実作業をまとめます。
1.frameworkの追加
IDFAの使用用途は、主に広告やトラッキングのためと考えられるため既に導入済みであることが多いかと思いますが、
AdSupport.framework
を追加します。
そしてiOS14から追加された、
AppTrackingTransparency.framework
を追加します。
公式リファレンス: https://developer.apple.com/documentation/apptrackingtransparency
2.info.plistへ説明の追加
Privacy - Tracking Usage Description
をKeyとしてValueにユーザにAlertを出した時に表示される文言を追加します。
ここでの文言は非常に重要になってくると考えられます。
ATTrackingManager.requestTrackingAuthorizationを利用してAlertを表示できるのは1度きりです
通知や位置や写真の時と一緒ですね。
AlertのタイトルはApple側が表示するもので、日本語だとこう表示されました。
(アプリ名マンガボックス)
🤔🤔🤔
一般ユーザはなんぞや🤔🤔🤔
って感じだと思う。
誰も許可したくならない…
info.plistの記述はAlertのメッセージ部分に表示されます。
メッセージに表示されている'表示する広告を適切に選択するために使用します'はじんむが仮で考えた文章
こちらを許可していただければ、関連性の高い広告を配信することができるなど
許可するメリットを伝えることが重要かと思います。
また、info.plistの文言はAppleの審査の目が厳しい箇所でもあり、
Appleレビューガイドラインにも下記が追加されました
3.2.2 許容されない行為(vi)
Appの機能やコンテンツへのアクセス、金銭その他の報酬を受け取るために行ってはいけないことに
「追跡の有効化(enable tracking)」が追加
そのため、オンにしたら報酬あげるよ!という文言はリジェクトされるので注意してください。
強制させるような文言や、用途が何も伝わらない文言はやめましょう。
#3.Alertを表示するコードの追加
必要なタイミングで許可情報を取得し、Alertを表示するコードを追加しましょう。
import UIKit
import AdSupport
import AppTrackingTransparency
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 14, *) {
switch ATTrackingManager.trackingAuthorizationStatus {
case .authorized:
print("Allow Tracking")
print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
case .denied:
print("😭拒否")
case .restricted:
print("🥺制限")
case .notDetermined:
showRequestTrackingAuthorizationAlert()
@unknown default:
fatalError()
}
} else {// iOS14未満
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
print("Allow Tracking")
print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
} else {
print("🥺制限")
}
}
}
///Alert表示
private func showRequestTrackingAuthorizationAlert() {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
switch status {
case .authorized:
print("🎉")
//IDFA取得
print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
case .denied, .restricted, .notDetermined:
print("😭")
@unknown default:
fatalError()
}
})
}
}
}
先述のように、requestTrackingAuthorizationを利用してAlertを表示できるのは1度きりです。そのため、表示するタイミングが非常に重要になってきます。
なお、iOS13までIDFAを取得できるか利用していた
ASIdentifierManager の isAdvertisingTrackingEnabled
はiOS14からDeprecatedになります。
https://developer.apple.com/documentation/adsupport/asidentifiermanager
iOS14からこちらの値が常にfalseになるため、既存の実装には注意が必要です。
注意点
冒頭で説明した通り、iOS14からは、端末兼アプリ単位の追跡許可設定になります。
端末単位で拒否されていると、requestTrackingAuthorizationしていなくても、trackingAuthorizationStatusがdeniedで返ってきます、Alertを表示することさえ許されません、無慈悲😇
端末の設定は
設定 > プライバシー > トラッキング > Appからのトラッキングを許可(ON/OFF)
から設定できます。
各アプリの設定もここからできます。
また、もう一つ似た設定に
設定 > プライバシー > Appleの広告 > パーソナライズされた広告(ON/OFF)
があります。
こちらは試したところ、パーソナライズされた広告がOFFの時でもtrackingAuthorizationStatusが.authorizedで返ってきてIDFAが取れていました
説明を読むとこちらは、App StoreやApple News、株価のターゲティングが無効になるそうです。
おわりに
この他に開発者が意識するべきことは、利用しているSDKがIDFAを利用しているかを把握し
各社に対応を伺うことです。
参考にAdjust様がものすごく丁重に対応すべき項目をまとめてくださっていたので共有します。
Adjust: iOS14の変更に向けての準備と対策
また、いくつかの広告会社さんからSDKのアップデート予定を告知していただきました🙇♂️
ユーザさんにメリットを伝えつつセキュリティを担保しつつ
サービスの目的も達成しうる対応をしていきましょう💪