こんにちは、あまのじゃくなHikaru Appです。
ちまたでは、IDFA実装する、実装しない論争になっていますが、自分のアプリに実装してリリースしてみました。
実際は、もっと短いコードにできますが沢山コードを書いてみました。
// IDFA iOS 14
private func requestIDFA( callbackIdfa: @escaping(Bool, String) -> ()) {
if #available(iOS 14, *) {
// IDFA iOS 14
let idfaStatus = ATTrackingManager.trackingAuthorizationStatus
switch ( idfaStatus ) {
case .notDetermined:
// 許諾のalert viewを表示
attrequestIDFA { (status, IDFAstring) in
callbackIdfa( status, IDFAstring)
}
case .restricted:
callbackIdfa( false, "00")
case .denied:
callbackIdfa( false, "00")
case .authorized:
callbackIdfa( true, "\(ASIdentifierManager.shared().advertisingIdentifier)")
@unknown default:
callbackIdfa( false, "00")
}
} else {
// IDFA iOS 13
switch ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
case true:
callbackIdfa( true, "\(ASIdentifierManager.shared().advertisingIdentifier)")
case false:
callbackIdfa( false, "00")
}
}
}
// alertview
private func attrequestIDFA( callbackAttrequest: @escaping (Bool, String) -> Void ) {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { (status) in
switch status {
case .notDetermined:
callbackAttrequest(false, "00")
case .restricted:
callbackAttrequest(false, "00")
case .denied:
callbackAttrequest(false, "00")
case .authorized:
callbackAttrequest(false, "\(ASIdentifierManager.shared().advertisingIdentifier)")
@unknown default:
callbackAttrequest(false, "00")
}
}
}
}
実装で気をつけるポイント
- info.plistのPrivacy – Tracking Usage Descriptionの記載がないとクラッシュする。
- requestTrackingAuthorizationを呼べるのは1度だけ。ATTのstatusがnotDetermined以外で呼んでも表示することはない。
- 許可しないのstatusでIDFAを取得すると、00000000-0000-0000-0000-000000000000が返ってくるがnilなどに変わることを想定すること。
Localizationではまった
ATTの文言をローカライズするときのkeyがわからなくてはまりました。
"NSUserTrackingUsageDescription" = "この識別子は、パーソナライズされた広告を配信するために使用されます。";
そのまま貼り付けておきますので参考にどうぞ
まとめ
swiftしっくりくるなぁ〜。
@escapingを使用しているコードは、めったにみないのは私だけだろうか・・・。
湿っぽい話は、終わり!
今日もswift楽しかった!
では、次回遊びに来てくださいね
日々修行。
コメント