swift営業中|iOS14.5から本格対応のIDFA実装してみた

スポンサーリンク
swift

こんにちは、あまのじゃくな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楽しかった!

では、次回遊びに来てくださいね

日々修行。

コメント

タイトルとURLをコピーしました