Help us understand the problem. What is going on with this article?

iOS14 IDFA取得時の挙動を実機で検証してみる

2020/09/16:追記

iOS14 GMでも、同じ挙動となる事を確認しました。
日本時間 9月17日にリリースされる正式版でも恐らく同じ動きになる可能性が高いと思われます。

2020/09/17:追記

iOS14 正式版でも予想通り同じ挙動ですね。
Firebaseや広告SDKなどからも軒並みアップデートのお知らせが来ていますが、この仕様への対応と思われます。

概要

iOS14(ベータ版)では、常にisAdvertisingTrackingEnabledがfalseを返してくる様です。

AdSupport FrameworkのisAdvertisingTrackingEnabled

iOS13までの「追跡型広告を制限」をチェックする為のフラグでしたが

iOS14でDeprecatedとなりました。

先日リリースされたiOS14 beta8で、実際の挙動について検証してみました。

環境

  • xcode12.0 beta 6
  • iOS14 beta8
  • iPhoneX(トラッキング制限設定無し)

結果

結果は以下の通り

ビルド isAdvertisingTrackingEnabled IDFA
iOS13向け false 取得OK
iOS14向け(IDFA許諾は未決定。ダイアログ出していない) false 取得OK

やはり、ユーザのIDFA許諾状況に依らず、isAdvertisingTrackingEnabledは常にfalseが返ってくる結果でした。

つまり、現在リリースしているアプリをiOS14で実行した場合。

iOS13で追跡型広告を制限(LAT)していなかったユーザであっても、iOS14では「制限あり」と判断してしまいます。
(従来コードのままだと、IDFAを取得しないフローに流れてしまう)

懸念

多くのアプリが、isAdvertisingTrackingEnabledをチェックせずにIDFAを取得するフローは、審査上取っていないと思います。

このままの仕様でリリースされた場合、

せっかくIDFA許諾必須化が来年初旬まで延期されたにも関わらず

この挙動に対応していないアプリからは「IDFAが取得出来ない」状況になる可能性が高いです。

対策

この仕様への対策として

AppTrackingTransparencyの許諾ステータスをチェック

許諾済み以外の場合、まずIDFAを取りにいき

返値がゼロ以外であれば、そのままIDFA使用

と言ったパターンなどが考えられます。

例えば

func isAvailableIDFA() -> Bool {
        if #available(iOS 14.0, *) {
            if ATTrackingManager.trackingAuthorizationStatus == .authorized {
                return true
            }else{
                // .authorized以外
                // 有効なIDFAか?
                return !isZeroIDFA()
            }
        }else{
            // iOS13以下
            return ASIdentifierManager.shared().isAdvertisingTrackingEnabled
        }
}

func isZeroIDFA() -> Bool {
        return (ASIdentifierManager.shared().advertisingIdentifier.uuidString == UUID(uuid: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)).uuidString)
}

ただ、この辺りの最終的な挙動はもうすぐ出るであろうGM版で、どうなるかまだわかりません。

引き続き、チェックしていきたいと思います。


参考
https://developer.apple.com/documentation/adsupport/asidentifiermanager/1614148-isadvertisingtrackingenabled
https://developer.apple.com/documentation/apptrackingtransparency

bosteri_bon
広告会社でiOSエンジニアしています。
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。
https://community.camp-fire.jp/projects/view/280040
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした