iOSアプリ開発とプライバシーについて
ATTに関する各社の見解
AppsFlyer
ATTのオプトイン率を上げる5つの方法
AdmobのSDKでは、AppleのATTダイアログ表示前に、許可率を上げるための独自ダイアログを表示できる機能が提供されている。
Adjust
各社ごとのダイアログ表示
pixivでのATTダイアログ対応
- 他社のデータと組み合わせたりしていないので、自社広告はトラッキングに当たらず、Appプライバシーでトラッキングを選択する必要や、ATTダイアログを表示させる必要はない
Singular
KARTE
Criteo広告
ウォール・ストリートジャーナルによる、プライバシーの変更に関する、Craig氏へのインタビュー
ビジネス面中心の見方
- ATTのオプトアウトによって、ある程度のトラッキングを防ぐことはできる
- ATTをアウトしても、ファーストパーティトラッキング(自社広告など)はATTを表示する必要がある"トラッキング"とは見做されないため、ATTが表示されないからといってトラッキングされていないわけではない
- Appleを含むファーストパーティトラッキング(例えばGoogleやAmazon)は依然として可能なため、その重要性は増し、このように独占が生まれていく恐れがある
WWDCセッション動画
Apple 公式
「あなたのデータの一日」
Build trust through better privacy セッション内容
4つの柱
柱 | 概要 | メリット | 備考 |
---|---|---|---|
On-device processing | データをサーバーに送信せず、ローカルで処理する | デバイス上で完結しないと、データにアクセスするユーザ、データを共有するユーザ、データの使用目的を管理する能力が失われてしまうが、オンデバイスにすることでそれを保持できる | CoreMLやPrivate federated learning、ディクテーションは、オンデバイス |
Data minimization | 必要なデータだけを要求して使う | ユーザーのデータに敬意をはらい、必要最低限のデータを使用することがユーザーとの信頼関係の構築につながる | Photos(限定した写真のみのアクセス)、Location(デフォルトはおおよその場所、より正確な場所をアプリ側で取得したい場合はそう実装する)、Contacts(オンデバイスに連絡先のデータが存在するので、パーミッションを要求されずに連絡先を入力できる) |
Security Protections | プライバシー保護を実施する | DNSを暗号化する | |
Transparency and control | ユーザーがデータを理解し、管理できるように |
App Store transparency
- 収集するデータ
- 使用目的
- データは特定の個人やデバイスと紐づくか?
- このデータはユーザーをトラッキングするか?
Web上の transparency
ITP(Intelligent Tracking Prevention)
- ブロック対象となる既知のトラッカーをSafariのツールバーから確認できる
- 過去30日のトラッキングの詳細レポートを確認できる
アプリ上の transparency
- コピーアンドペースト
- ペースト時にトーストが出るようになる
- レコーディングやカメラの時
- インジケータにマークが出る
Tracking transparency and control
App Storeポリシーは、アプリやwebサイトを通じしてトラッキングのためのユーザー許可を求める。
- ターゲット広告
- 広告効果測定
- データブローカーとの共有
対応方法
- AppTrackingTrasparencyフレームワークを呼び出す
- Info.plistに
NSUserTrackingUsageDescription
キーを定義する
-
ユーザ許可のプロンプトに表示される
-
IDFAにアクセスするためには、このフレームワークを呼び出す
- ユーザーが許可しない場合、IDFAはゼロを返す
- iOS14から利用可能
-
アプリがトラッキング許可を求めないようにすることもできる
- Limit Ad Tracking(設定アプリで設定できる)
注意点
- ATTフレームワークは、IDFAを使いたい時、アプリを起動する前に毎回呼ばれる
- IDFAをキャッシュしたり、保存したりしないこと
- ユーザがトラッキングをオフにした場合、ユーザのトラッキングを停止するためにどのような変更を行ううべきか考えておくこと
SKAdNetwork
SKAdNetwork とは
「アップルが提供するプライバシーに配慮したトラッキングツール」です。IDFA(広告識別ID)を使わず、どの媒体(アプリ)からどれだけインストールが発生したのかを計測可能にしたツール
ATTの登場により、IDFAを使わない計測ツールとして注目されたが、計測できる範囲が限定的で、実践のマーケティングで使用できるものではない。(ので多分多くの現場ではATTが使用されている)
ユーザのトラッキングをしないので、ユーザに許可を求める必要はない。
仕組み
広告SDKはキャンペーンIDとIDFAのようなユーザに関連づけられたIDとともに、広告ネットワークにメッセージを送信する
広告ネットワークが学習すること
- 宣伝したいアプリケーションと宣伝元のアプリがインストールされたこと
- 広告をクリックしたこと
- コンバージョンに成功したこと
Apple’s privacy pillars in focus セッション内容
Transparency and control
- メール機能
- Hide my email
- Mail Privacy Protection
- 録音のインジケータ表示
- 設定アプリのPrivacyセクションに、「App Privacy Report」のセクションができた
- デフォルトはオフなので、使用するにはオンにする
- エクスポートもできて、json形式(実際のファイル拡張子は、
ndjson
) - Appleの動画では、このレポートの確認をアプリのQAに含めて、想定したものだけが記録されていることを確認すると良いと言っていた。
{
"timeStamp": "2023-07-23T14:06:41.142+09:00",
"initiatedType": "AppInitiated",
"context": "",
"domain": "xxx.xx.xx.100",
"contextVerificationType": 0,
"type": "networkActivity",
"domainType": 2,
"firstTimeStamp": "2023-07-23T14:04:24.366+09:00",
"bundleID": "com.nordvpn.NordVPN",
"domainOwner": "",
"hits": 3,
"domainClassification": 2
}
- Webサイト接続であることをラベリングできる
- 詳しくは、Explore WKWebView addtion を見るといい
Data Nutrition Label
SDKの振る舞い
- アプリがSDKを含んでいるのであれば、その振る舞いの責任はアプリにある
- SDKの振る舞いがData Nutrition Labelに反映されているか、確認すること
プライバシーに配慮した広告表示についてのアップデートもした
Security
- CloudKitの暗号化
- macでiCoud Private Relayが登場
- Ingressプロキシにしか自分の正確なIPアドレスは伝わらない
Explore App Tracking Transparencyのセッション内容
トラッキングとは
トラッキングとは、ターゲティング広告や広告測定を目的として、自社のアプリから収集したユーザーやデバイスのデータを、他社のアプリ、ウェブサイト、またはオフラインのプロパティから収集したユーザーやデバイスのデータとリンクさせることを指します。
また、トラッキングとは、ユーザーまたはデバイスのデータをデータブローカーと共有することを指します。
以下はトラッキングに当たらない
- 特定のアプリ内で私が「わっふる」を検索し、履歴検索データに残った。朝食のお店の広告を朝食付きなユーザーに配信する。検索履歴を元に私に配信する
- そのアプリの検索履歴が他社のアプリやWebサイトの広告の検索履歴データと紐づいていないから、トラッキングは使用していない
以下はトラッキングに当たる
私が使っているフードデリバリーアプリがパルアバウトとは別の会社に所有されているとしよう。
そして、私はフードデリバリーアプリを使って深夜に注文をしたことがある。
フードデリバリーアプリにサインアップしたとき、私はアプリに私のメールアドレスを教えた--パルアバウトにサインアップしたときに使ったのと同じメールアドレスで、パルアバウトが私のアカウント用に保存しているものだ。
食材宅配アプリには、私のメールアドレスと、私がパル・アバウトで夜間に注文することが多いという事実を共有するコードが含まれている。
パルアバウトのサーバーは、パルアバウトのアプリで収集された私のワッフルへの興味と、フードデリバリーアプリで収集された私が夜に注文するという事実を結びつけるために、私の電子メールアドレスを使用する。
最後に、パルアバウトは私の注文習慣とワッフルへの興味の組み合わせを使って、一日中朝食を提供するレストランの広告を私に見せる。
→ユーザのメールアドレスが他社のアプリと紐づいている
-
広告SDKがトラッキングをしているかどうかにも注意を払う必要がある
- ATTのパーミッションを出す必要があるが、SDK側にその実装が含まれているか不明な場合は、SDK側に問い合わせること
-
ユーザーまたはデバイスのデータをデータブローカーと共有することも、トラッキング
- この場合は他社のデータと紐づいていなくても、トラッキングに当たる
-
データブローカーとは
- 収集された特定の個人情報を主にマーケティングの商材として販売している企業や事業者のこと
ATTの実装方法
- AppTrackingTransparencyフレームワークの
requestTrackingAuthorization(completionHandler:)
を呼ぶ - アラートが表示される
- 1度だけ表示される(アプリをアンインストールまたは再インストールしない限り)
- Info.plistに
NSUserTrackingUsageDescription
キーを定義する -
trackingAuthorizationStatus
を呼び出して、許可状況を確認する
トラッキングが許可されなかった場合に、アプリが留意すべきこと
- トラッキングが許可されなくても、アプリが使えるようにすること
- IDFA APIは0を返す
トラッキングをしない選択肢としては以下
- ファーストパーティ広告かコンテンツ連動広告にすること
- SKAdNetworkのような、プライバシーに配慮した広告アトリビューションを使用すること
フィンガープリンティング
トラッキングは許可を貰えばOKだが、データのフィンガープリンティングは禁止されている。
Appleのディベロッパー規約に違反する。
Create your Privacy Nutrition Labelのセッション内容
- Privacy Nutrition Labelはユーザにアプリのプライバシーについて伝える、手段の一つ
- 集めたデータの使用方法を説明する
- アプリのプロダクトページに表示される
ラベルの作成プロセス
以下の情報をApp Store Connectで入力する
- 集めるデータのカテゴリ
- ユースケース
- 個人に紐づくか
- トラッキングに使用されるか
アプリに備わっている機能を洗い出し、その機能ごとにどんなデータを使用するか考えてみよう!
以下のような感じで、データのカテゴリや目的などApp Store Connectで埋めるべきことを明らかにしていくといい。
加えて、パートナーやSDKについても確認しよう。
いくつかの例
- IPアドレス
- カテゴリ:使用方法に基づいて定義する(ロケーション分析に使用するなら、ロケーションと定義する)
- プロダクトインタラクション(どの画面を開いたかなど、アプリのインタラクション)
公開が任意のデータ
- アプリの主な機能から独立しており、トラッキングや広告につかわれず、利用が限られているもの
- e.g. フィードバックフォーム、問題報告フォームなど
Meet privacy-preserving ad attributionのセッション内容
広告アトリビューションの例
Cookieは、ユーザーが以前にサイトを訪問した時のデータを記憶できるようにする文字列(e.g. カートに入れた商品などの情報)
実際に購入を行ったら、最初にタップした広告とこの購入を紐付けする
→コンバージョン 🎉
実際に購入まで至らなくても、以下を記録し、広告に使用している
- どんなクリックを行ったか
- 訪問したサイト
- ページの滞留時間
- その他の閲覧履歴や行動履歴
こういったデータを広告のために使用し、他の会社に提供している。
→クロスサイトトラッキング
ユーザーによっては、コンテンツブロッカーを使用しているが、デメリットもある
- 広告アトリビューションが一切使用不可能になる(→Webの利用体験が損なわれる)
ITP
ITPは広告アトリビューションを使用可能なまま、ユーザーのデータの送信を防いでいる
Private Click Measurement(PCM)
- PCMはW3CのPrivacy Community Groupで標準化が提唱されている
- オンデバイスで処理される、広告アトリビューションのレポートの仕組み
- ユーザーの特定を防げる
- サイトを跨ぐユーザーのトラッキングが行われない(クロスサイトトラッキングの防止)
- レポートは、24~48時間後に不規則に設定されている
- このレポートには、IPアドレス保護がついている
送信元ではリンク属性を使用して、PCMデータを指定できる
送信されるデータは以下の通りのJSON
PCMのApp to Webアトリビューション
対応方法
- レポートの送信先は、Info.plistで定義する
- 広告の上に、
UIEventAttributionView
を定義してのせる
- 広告タップ時には
UIEventAttribution
の生成が必要
- 広告リンクを開く場合、以下の実装が必要
UISceneベースの場合
UIApplicationベースの場合
テストやデバッグ
Safariの開発モードで設定できる
アプリでは設定アプリから設定できる
設定すると、10秒ごとにレポートが送信される(本来であれば24~48時間の不規則に送られる)
SKAdNetwork
- StoreKitの一部
- 大事な3つの要素
- 広告ネットワーク
- Publisherアプリ(広告を載せているアプリ)
- Advertisedアプリ(広告を提供しているアプリ)
以下が、デバイス上でApp Storeに保存される
-
publisher id
-
campaign id
-
ad network id
-
timesmtap
-
Advertisedアプリがインストールされ、起動すると、アプリはStoreKitが提供するAPIを呼び出す
-
registerAppForAdNetworkAttribution
またはupdateConversionValue
- どちらもSKAdNetworkをトリガーする
-
改善したこと
What's new with SKAdNetworkのセッション内容
単語
- impression:SKAdNetworkへのインプット
- engagement:Advertiserアプリと関わった時
- conversion:ポストパックとも言われる。広告ネットワークに送られる属性データを含むもの。
変遷
- SKAdNetwork2.0:プライバシー保護を重視した広告属性の導入
- SKAdNetwork2.2:Publisherアプリのカスタム広告の表示
- SKAdNetwork3.0:成功に至らないインプレッションのポストバックを追加
- iOS15:SKAdNetworkの全てのバージョンに対して開発者へのポストバックのコピーを導入
SKAdNetwork 4.0
階層型IDとコンバージョン値
クラウドの匿名性(Crowd Anonymity):SKAdNetworkが属性データを送るときのプライバシー保護方法
- キャンペーンIDを変更
- 2桁から4桁に変更
- それぞれの桁ごとに意味を持たせる
- キャンペーンIDから、source identifierという名前に変える
- コンバージョン値を変更
- 6 bitから2種類の値に変更
- coarse grained value(粗い値)
- fine grained value(細かい値)
- 6 bitで今までと同じ
- 2種類あるが、広告主が受け取るのはどちらか一つ
- 6 bitから2種類の値に変更
APIの変更
- 新しいsource identifierを
SKAdImpression
のインスタンスに設定できる
プライバシーを保護しながら、送るデータ量を増やすことができる
コンバージョン
- SKAdNetwork3.0までは、Re-engagementを計測できなかった
- 対応策:ポストバックの数を1から3回に増やした
- 1回目:0-2days(→細かいコンバージョン値は最初のここのみ!)
- 2回目:3-7days(→粗い値)
- 3回目:8-35days(→粗い値)
- 対応策:ポストバックの数を1から3回に増やした
Web to SKAdNework
省略
SKAdNetworkのテスト
省略
Device Identifiers and Fingerprinting on iOS の記事(2019年)について
広告主がトラッキングを行う理由
マーケティング担当者の使命:できるだけ多くの潜在顧客を特定し、その顧客とコミュニケーションをとることで市場シェアを拡大すること
- あなたが誰なのかを知らなければ、マーケティング担当者はあなたが見込み客なのか、あるいは潜在顧客なのかを見分ける術がない。
- あなたがどこにいるのかを知らなければ、マーケティング担当者は、あなたが目にしそうな場所に広告を掲載する以外に、あなたにリーチする方法がない。
- あなたが何をしているのかを知らなければ、マーケティング担当者は広告がうまくいったかどうか、あるいは見られたかどうかを知るすべがまったくない。
Appleが提供するユーザー特定のためのAPI
- UDID
- iOS6で非推奨となり、IDFVにとって代わられた
- UUIDとは違うので注意
- IDFV(Vendor Indetifiers)
- 同じベンダーによって作成されたアプリや拡張機能間で共有される一意の識別子
- IDFA(Advertising Identifier)
- AdSupportフレームワークの導入
- アプリの機能に必要な識別情報と広告のための識別情報を区別するためにAppleが作成したもの
- IDFVと異なり、誰に対しても同じ値を返す
- AdSupportフレームワークの導入
- DeviceCheck
- iOS11から導入されたDeviceCheckフレームワーク
- Appleのサーバに、デバイスごとの値をいくつか保存しておくことができる
- プロモーションコードの悪用を制限するというUberのニーズに応えたものと思われる
今日のフィンガープリンティング
Appleはさまざまな方法でフィンガープリンティングができないよう対策してきたが、それでもごくわずかな情報で一意に識別されてしまう。
ロケール情報(36ビット以下)
以下の情報がわかることで、個人の特定が可能になりうる
- 好みの言語
- 地域
- カレンダー
- タイムゾーン
- インストールされているキーボードの組み合わせ
UserDefaults.standard.object(forKey: "AppleKeyboards")
アクセシビリティ
アクセシビリティの設定も、個人を特定する方法になりうる
例えば、Dynamic Typeを使用しているユーザーの約25%が、フィンガープリンティングに使用される可能性がある
ハードウェアの情報
例えば、ユーザーのデバイスの現在のモデルとストレージ量を取得することにより、フィンガープリンティングに使用できる
携帯のネットワーク
CoreTelephonyフレームワークを使って、デバイスのプロバイダを調べることができる
コミュニケーションの好み
- テキストやメールを送ることができるかどうか
- MessageUIフレームワークを使用して、許可なしで組み込める
そのほかのフィンガープリンティングに使用できる情報源
- GeoIPと相対ネットワーク速度
- この情報を既知の場所のホストへのping時間測定と組み合わせることで、より正確な位置を特定することができる
- バッテリーのhealth
- バッテリーAPIの結果の正確さによって、バッテリーの健全性でデバイスを特定できるかもしれない
- Firefoxでは、バッテリーレベルのAPIは55で削除されている