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