iOS用のアプリでIDFAを取得する場合、iOS14からApp Tracking Transparency permissionのダイアログを表示させてユーザーに許可を得なければならなくなりました。
いままでリリースしたアプリではこのようなコードで呼び出しを行なっていたのですが、確かに言われてみるとダイアログが表示される場合と表示されない場合があり、なんだか不安定でした。
DispatchQueue.main.async {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { [weak self] status in
switch status {
case .authorized:
print("🎉")
//IDFA取得
print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
break
case .denied:
print("denied 😭")
break
case .restricted:
print("restricted 😭")
break
case .notDetermined:
print("not determinded😭")
break
}
self?.adMobInitialize()
})
}
そこで、ATTrackingManager.requestTrackingAuthorizationの呼び出しを1秒程度遅らせてみることにしました。そうすると、ダイアログが安定的に表示されるようになりました。
// 1秒遅らせる
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { [weak self] status in
switch status {
case .authorized:
print("🎉")
//IDFA取得
print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
break
case .denied:
print("denied 😭")
break
case .restricted:
print("restricted 😭")
break
case .notDetermined:
print("not determinded😭")
break
}
})
}