[iOS] IDFA 絡みのあれこれ

iOS 14 での IDFA 取得絡みでいろいろあって大変なところは大変だとか。どんな不条理があろうとも林檎様は神。いいね?
iOS 14 での IDFA 取得についてインターネッツを検索すると Qiita の以下の記事が引っかかります。

Qiita の神記事

iOS14でのIDFA取得 - Qiita
https://qiita.com/yofuru/items/213b88b85553631204e4

よくまとまっていてわかりやすい記事で、サンプルコードまで記載してあります。ほぼほぼこの記事で事足りてしまうので、「もう全部あいつ一人でいいんじゃないかな」という感じですね。

ただ、上記の記事のうち、「iOS Deployment Target = 14.0の場合」のところに「iOS 13.4.1」端末での動作が記載してあるところだけがよくわかりませんでした。Deployment Target より小さい端末で動作させることってできるんでしたっけ?とりあえず質問をコメントしてみました。返事が返ってくるのかはわかりませんが。。回答がありました。勘違いだったようで、訂正いただきました。

サンプルコードを試す

どうせならサンプルコードを手元で試してみようということで、Xcode 12 Beta 3 をダウンロードし、使い古しの iPhone 7 に iOS 14 Beta 3 を叩き込んでみました。追実験は基本(なんの?)。

Xcode 12 Beta 3 で新規プロジェクトを作成して、ViewController.m にサンプルコードを記載するだけで基本的には動かせるのですが、今回は iOS 13 端末でも動かしたかったので、以下の修正を加えてみました。

プロジェクト設定
  • Deployment Target は 9.0(Xcode 12 Beta 3 で設定可能な一番古いバージョン)に設定。
サンプルコード
  • @available を指定すれば iOS 13 端末で実行しても死なないはず。
    if (@available(iOS 14.0, *)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
            ...
        }];
    }

確認結果

iPhone 7 / iOS 14 Beta 3

ユーザ許諾 isAdvertisingEnabled advertisingIdentifier.UUIDString
OK NO 実際の IDFA 文字列
許可しない NO 00000000-0000-0000-0000-000000000000

iPhone 11 Pro / iOS 13.5.1

ユーザ許諾 isAdvertisingEnabled advertisingIdentifier.UUIDString
N/A YES 実際の IDFA 文字列

ユーザ許諾選択後、設定から許諾状態を変更した時の確認結果

ユーザ許諾: OK 選択後、設定から許諾状態を OFF に変更

1. アプリ上のユーザ許諾で「OK」を選択する
2. 設定 / プライバシー / トラッキングから「Appからのトラッキング要求を許可」を OFF にする。
3. 「以前にトラッキングを許可していたAppに、トラッキングを停止するように依頼しますか?」
(Appがトラッキングを続けることを許可する / Appにトラッキングの停止を求める)から
「Appにトラッキングの停止を求める」を選択する。
4. IDFA を取得する。
isAdvertisingEnabled advertisingIdentifier.UUIDString
NO 00000000-0000-0000-0000-000000000000

ユーザ許諾: OFF 選択後、設定から許諾状態を ON に変更

1. アプリ上のユーザ許諾で「許可しない」を選択する。
2. 設定 / プライバシー / トラッキング からアプリの許諾状態を ON に変更する。
3. IDFA を取得する。
isAdvertisingEnabled advertisingIdentifier.UUIDString
NO 実際の IDFA 文字列

確認できたこと

iOS 14 端末

  • ユーザ許諾を ON にすると、実際の IDFA 文字列を取得できる。
  • その場合でも、isAdvertisingEnabled は NO になる。
  • 設定からユーザ許諾状態を変更すると、次の IDFA 取得時に許諾状態が反映される。

iOS 13 端末

  • Xcode 12 Beta 3 ビルドであっても、従来通り、isAdvertisingEnabled は YES になり、実際の IDFA 文字列を取得できる。

確認できていないこと

  • Xcode 11 ビルドのアプリを iOS 14 端末で動かしたとき、isAdvertisingEnabled と advertisingIdentifier.UUIDString はどうなる?

なるほどです。
表の文字がすべてキャピタライズされとるやんけ。。オワオワリです。