iOSアプリ開発者のための「iOS14 IDFAオプトイン問題 」


### 2020/09/04：追記更新

「IDFA許諾必須化」が、**2021年初旬まで延期**されることが発表されました。

[Details for app privacy questions now available - News - Apple Developer](https://developer.apple.com/news/?id=hx9s63c5)

IDFAについては、**許諾ダイアログを出さずに今まで通り取得可能**となる様です。

さっそくiOS14 Beta7で検証したところ、

```swift
ASIdentifierManager.shared().advertisingIdentifier.uuidString
```

をいきなり呼んでも取得可能でした。

なお、AppTrackingTransparencyを使って許諾を得ることももちろん可能です。

## 概要
iOS14ではIDFAを取得する場合は、ユーザから「明示的な同意」を得ることが必須となりました。
WWDC2020でこの件が発表された当時、広告界隈では「IDFAの死か！？」などと言われたりして大きな話題となっていました。

あれから１ヶ月以上が経過し、現在の主な計測プロバイダー（MMP）の動向について整理したいと思います。

まずはこの問題の主要キーワード

 - IDFA
 - SKAdNetwork
 - AppTrackingTransparency

を簡単に見ていきます。

## IDFA

> IDFA (Identifier for Advertisers) は、Appleがユーザーの端末にランダムに割り当てるデバイスIDです。
> [Adjustより](https://www.adjust.com/ja/glossary/idfa/)

各広告プラットフォーマー(Google広告やYahoo広告など)やモバイル計測プロバイダー（AdjustやAppsFlyerなど）は、基本的にこのIDFAを使ってアプリユーザーを追跡しています。

このIDは、大抵は広告SDKや計測系SDK側で取得されていたりするので、あまり自分で実装して取得するケースは少ないかも知れません。

ちなみにAndroidの場合はGPS ADID（Google Play Services ID for Android）があります。

## SKAdNetwork
[SKAdNetwork](https://developer.apple.com/documentation/storekit/skadnetwork)

StoreKit Frameworkのクラス。
このクラス自体はiOS11.3から存在していて「どの広告からのインストールか？」などを判断するために使用したりします。
（主にアフィリエイト用途）

これが今回のiOS14で**「どのアプリの広告から来たか？」**等のより細かい粒度の情報が追える様に更新されました。
（それでも計測プロバイダーからは実用的な効果測定のためには役不足と言われている）

Appleとしては、今後の広告効果計測にはこのクラスを使った方法を推していくのだと思いますが、
これに従うかどうかでは、各社計測プロバイダーでも方向性が分かれているようです。

## AppTrackingTransparency
[AppTrackingTransparency](https://developer.apple.com/documentation/apptrackingtransparency)

今回新しく追加されたフレームワーク。
これまでは「AdSupport framework」のASIdentifierManagerからIDFAを直接取得していました。

**対応が2021年まで延期されたので、その間は許諾ダイアログ出さずとも今まで通りIDFAの取得が可能です。**
~~iOS14ではこのフレームワークを使いユーザから許諾を得てから、IDFAを取得する必要があります。~~
（ASIdentifierManagerからIDFAを取ってくることは変わりない）

> iOS 14、iPadOS 14、tvOS 14では、AppTrackingTransparencyフレームワークを通じてユーザーの許可を得ない限り、デベロッパがユーザーを追跡したり、ユーザーのデバイスの広告識別子にアクセスしたりすることはできません。
> [ユーザーのプライバシーとデータの使用より | Apple Developer](https://developer.apple.com/jp/app-store/user-privacy-and-data-use/)

### iOS14でのIDFA取得の流れ

#### 1. 許諾メッセージを作成
Info.plistに「Privacy-Tracking Usage Description」（NSUserTrackingUsageDescription）を追加。
値にIDFAのオプトインを求めるアラート用のメッセージを指定します。

#### 2. ユーザーへのオプトイン提示 
AppTrackingTransparency frameworkの

```swift
ATTrackingManager.requestTrackingAuthorization(completionHandler:)
```
を実行すると、初回のみ許諾を求めるアラートがユーザに提示され、
そのコールバックで以下のお馴染みの結果ステータスが返ってきます。

```swift
authorized
denied
notDetermined
restricted
```
ちなみに設定アプリ上でiOS13までの「追跡型広告を制限」をONにしているユーザー（いわゆるLATオンのユーザ）にはアラートは表示されません。
また、iOS14ではオプトイン許諾を求める事に自体の可否を設定する事も可能になり、当然これが拒否されている場合でもアラートは出ません。

#### 3. IDFAの取得
許諾を得た後は、従来通りASIdentifierManagerからIDFAを取得するという流れになると思います。

```swift
guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {
    return
}
let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
```

## 今のアプリをアップデートしないで放っておくとどうなる？

**2021年初頭まで対応が延期されたので、それまではIDFAの取得が可能です。
ただし、AppTrackingTransparencyでの許諾フローは有効なので
ダイアログを提示し「拒否」したユーザーからは当然取得出来ません。（値はゼロ）**
~~iOS14では、ATTrackingManagerを使って許諾を得ていないユーザから、直接IDFAを取得してもその値はゼロとなってしまいます。~~

```swift
// IDFAの値
00000000-0000-0000-0000-000000000000
```
つまり、現在使用しているアドネットワークの広告SDK(imobileやnendなど)も影響を受けます。
(SDK側で取得済みIDFAをキャッシュしていれば暫くは使用できるかも？）

また、今言われている可能性として

### 「広告プロモーションを実施する側のアプリ」
**→ プロモーションを実施した際に正しい効果測定、分析が出来なくなる可能性**

すでにプロモーションを実施中の場合は今までのデータとの解離がおこる可能性があります。
また広告屋さんからは「広告配信の選択肢が減った」という話も出てくるかも知れません。
(特定のユーザを狙ったリターゲティング広告配信などが今後出来なくなったりする)

### 「広告を掲載する側のアプリ」

**→ 収益が減る**

カジュアルゲーム系やメディア系などの広告収益モデルのアプリでは、アプリ内で配信している広告の効果が追えない事で、価値が下がり、CPM(１０００回表示して稼げる金額)が低下・・・という現象が起こり、その結果収益が減る可能性があります。

これらの点については、モバイル計測プロバイダー各社がどの技術を採用するか、または別のソリューションをリリースしてくるか？によって大きく左右される事になると思います。

どちらにしてもアプリの**アップデートは必須**となってきそうです。

## 主な各計測プロバイダー（MMP）動向について

### Adjust
ブログで対応方針などの情報を発信しています。

- [Appleのユーザープライバシーにおける変更点について](https://www.adjust.com/ja/blog/apple-user-privacy-changes/)
- [Mobile measurement in iOS 14: 4 possible scenarios](https://www.adjust.com/blog/mobile-measurement-in-ios-14-four-possible-scenarios/)
- [iOS14の広告エコシステムの将来像](https://www.adjust.com/ja/blog/the-future-of-the-ad-ecosystem-on-ios-14/?utm_source=email&utm_channel=0&utm_campaign=ja-occasional-ios14-q32020)
- [iOS14と互換性がある粒度の細かいアトリビューション：アトリビューションハッシュ](https://www.adjust.com/ja/blog/the-attribution-hash/)
- [iOS14の変更に向けての準備と対策 \| Adjust](https://www.adjust.com/ja/blog/getting-your-company-ready-for-ios-14/)

Adjustの考えとしては
- 現時点のSKAdNetworkの仕様では役不足
- 取り急ぎフィンガープリント技術で対応
- アトリビューションハッシュを使った新たな仕組みを導入してく

最後の「アトリビューションハッシュを使った仕組み」とは

デバイス上でIDFAとIDFA(一意のベンダーID)を使用してハッシュ値を生成。
このハッシュ値をサーバ側で許諾を得て取得しているIDFAと照合すると言うもの。

ポイントとしては、前提として広告掲載側アプリでのIDFAは取得が必要な点と
ローカルでのみのIDFA使用(オプトインなし)がAppleから承認されるか？がキモとなる。

オプトインなしで追跡可能な方法として、こちらで触れられているが。。。
> You may track users without obtaining user permission through the AppTrackingTransparency framework if it is for one of the following purposes:
[User Privacy and Data Use - App Store - Apple Developer](https://developer.apple.com/app-store/user-privacy-and-data-use/)

Adjustでは、現在Apple側と協議中とのことです。


### AppsFlyer

- [The App Store Economy in a Privacy-Centric World \| AppsFlyer](https://www.appsflyer.com/blog/wwdc-update-user-privacy-changes/?fbclid=IwAR0_ttQ0Plg27Cj2Lj7VVeUrBQSKSqJKURUn-DSDXHZSbkRT435k0D_eqPk)
- [AppsFlyer's Aggregated Attribution Solution - iOS14 \| AppsFlyer](https://www.appsflyer.com/blog/aggregated-attribution-solution-ios14/)

こちらの考えとしては
- より具体的な内容はiOS14のベータ版の過程で進化していくのでは？
- とにかくアトリビューション(どの広告効果なのか)は大事
- IDFAが取れない場合でも計測出来るソリューションを準備中

このソリューションと言うのはIDFA、SKAdnetwork、フィンガープリント技術の組み合わせで対応していく様です。
(ここで出てくる「Aggregated Attribution」と言うのは具体的にはよく分かりませんでした。ざっくりとした大まかな測定の意味？)

### Singular
[IDFA Alternative: SKAdNetwork launch by Singular](https://www.singular.net/blog/skadnetwork-support/)

こちらは上記とは対照的に
- Apple公式のSKAdNetworkを使った仕組み

で行く様です。（フィンガープリントなど他の技術も併用しつつ）

こちらはN3TWORKへのインタビュー。今後の展望について。
[Prepare for iOS 14: Insights from N3TWORK](https://www.singular.net/blog/n3twork-prepare-ios-14/)

ここでは今後の展望について、フォローチャート形式で解説しています。
[iOS attribution: visualizing the crossroads for mobile measurement](https://www.singular.net/blog/attribution-in-ios-14/)

## まとめ
### 「IDFAオプトイン問題」は開発者には関係ある話なのか？
一見、この「IDFAオプトイン問題」は、そこまでアプリ開発者やエンジニアにとっては関係の無い話、それ程大きな問題では無い様に思えます。

ただし、広告プロモーションを行っていたり、アプリ内広告を行っている場合は、IDFAを取るにしても止めるにしても何かしらの**対応が必須**となり、今後も**関係がある話**となりそうです。

またIDFAを今後も積極的に取得する選択をとった場合、
**「どの様にしてオプトイン率をあげていくか？」**や**「どの様にユーザーへ説明するのか？」**などを
継続的にテストする為、アップデートしていくことになりそうです。

----