このドキュメントでは、ユースケースに基づいて、アプリに適切な識別子を選択するためのガイダンスを提供します。 Android の権限を使用するための特定のベスト プラクティスについては、アプリの権限のベスト プラクティスを参照してください。
- Best practices for working with Android identifiers
- FID と GUID の使用
- Kotlin
- Java
- MAC アドレスで動作しない
- MAC address availability changes in Android 11
- Identifier characteristics
- Scope
- リセット可能性および永続性
- Integrity protection and non-repudability
- Common use cases and the appropriate identifier to use
- Track signed-out user preferences
- サインアウトしたユーザーの行動を追跡する
- Generate signed-out or anonymous user analytics
- Kotlin
- Java
- Track signed-out user conversions
- Associate functionality with mobile service subscriptions
- Anti-fraud: 無料コンテンツ制限の実施とシビル攻撃の検出
- Carrier functionality
- Abuse detection: Abuse detection: Identifying bots and DDoS attacks
- 不正使用検出: 高価な盗難クレデンシャルの検出
Best practices for working with Android identifiers
Androidの識別子を使用する場合、以下のベスト プラクティスに従います。
Android 10 (API level 29) では、IMEI とシリアル番号の両方を含む、リセット不可能な ID に対する制限が追加されました。
広告IDは、ユーザーのプロファイリングまたは広告のユースケースにのみ使用します。 Advertising IDを使用する場合は、広告の追跡に関するユーザーの選択を常に尊重してください。 また、識別子が個人を特定できる情報(PII)に接続できないようにし、Advertising IDのリセットをブリッジしないようにします。
支払詐欺防止と電話以外のその他の使用例では、可能な限りFirebaseインストールID(FID)または個人で保存したGUIDを使用します。 広告以外の大半の使用例では、FID または GUID で十分です。
プライバシー リスクを最小限に抑えるために、使用例に適した API を使用します。 高価値のコンテンツ保護にはDRM APIを使用し、不正使用防止にはSafetyNet APIを使用します。 このガイドの残りのセクションでは、Android アプリの開発という観点から、これらのルールについて詳しく説明します。 ユーザーの同意なしに、別の識別子または指紋を使用して後続の広告 ID を一緒にリンクすることで、ユーザー リセットを橋渡ししないでください。 Google Play Developer ContentPolicy には、次のように記載されています。「…リセットした場合、新しい広告 ID を、ユーザーの明示的な同意なしに以前の広告 ID または以前の広告 ID から派生したデータに接続してはならない。 広告IDは、ユーザーがそのIDに関連するトラッキングの量を制限できるように設定可能です。 常にAdvertisingIdClient.Info.isLimitAdTrackingEnabled()
メソッドを使用して、ユーザーの希望を回避していないことを確認してください。 GooglePlay Developer ContentPolicy には、次のように記載されています:
“…you must be obey by a user’s ‘Opt out of interest-based advertising’ or ‘Opt out of Ads Personalization’ setting. ユーザーがこの設定を有効にしている場合、広告 ID を使用して、広告目的のユーザー プロファイルを作成したり、パーソナライズ広告でユーザーをターゲットにしたりすることはできません。許可される活動には、コンテキスト広告、頻度制限、コンバージョン トラッキング、レポート、セキュリティおよび不正検出があります」
広告 ID 使用に関する使用 SDK と関連するプライバシーまたはセキュリティ ポリシーに注意してください。たとえば、Google Analytics SDK から enableAdvertisingIdCollection()
メソッドに true
を渡す場合は、該当するすべての Analytics SDK のポリシーを確認し、遵守してください。
また、Google Play Developer ContentPolicy では、「個人を特定できる情報に接続してはならない、またはいかなる持続デバイス識別子(たとえば、SSAID、MAC アドレス、IMEI、など)と関連付けてもならない」と Advertising ID を規定していますので注意してください。).”
例として、以下の列を持つデータテーブルを作成するために情報を収集したいとします。
table-01 | |||||||||||||||||||||||||||||||||||
timestamp |
ad_id |
account_id |
clickid |
||||||||||||||||||||||||||||||||
table->
この例では、このようになります。 これは、ユーザーから明確な許可を得ていない場合、Google Play DeveloperContent Policy に違反することになります。 Advertiser ID と PII の間のリンクは、必ずしも明示的でないことに留意してください。 PII および Ad ID キー付きテーブルの両方に表示される「準識別子」を持つことが可能で、これも問題を引き起こします。 例えば、TABLE-01とTABLE-02を以下のように変更するとする。
この場合、どうすればいいのでしょうか。 十分に稀なクリックイベントで、イベントのタイムスタンプとデバイスモデルを使用して、広告主ID TABLE-01とTABLE-02に含まれるPIIを結合することは可能である。 データセットにそのような準識別子が存在しないことを保証するのは難しい場合が多いですが、可能であれば固有のデータを一般化することで、最も明白な結合リスクを防ぐことができます。 その他の解決策としては、以下のものがあります。
Advertising ID を責任を持って使用するための詳細については、 FID と GUID の使用デバイスで実行中のアプリ インスタンスを識別する最も簡単なソリューションは、Firebase インストール ID (FID) の使用で、これは広告以外のほとんどの使用例で推奨されているソリューションです。 プロビジョニングされたアプリ インスタンスのみがこの識別子にアクセスでき、アプリがインストールされている間のみ持続するため、(比較的)簡単にリセットできます。 結果として、FID は、リセットできないデバイス スコープのハードウェア ID と比較してより優れたプライバシー プロパティを提供します。 FID が実用的でない場合、カスタムグローバル一意 ID (GUID) を使用してアプリ インスタンスを一意に識別することもできます。 これを行う最も簡単な方法は、次のコードを使用して独自の GUID を生成することです。 Kotlinvar uniqueID = UUID.randomUUID().toString() JavaString uniqueID = UUID.randomUUID().toString(); この識別子はグローバルにユニークなので、特定のアプリ インスタンスを識別するために使用することができます。 アプリ間の識別子のリンクに関する懸念を回避するために、GUIDは外部(共有)ストレージではなく、内部ストレージに格納します。 詳細については、「データとファイルの保存」のページを参照してください。 MAC アドレスで動作しないMAC アドレスはグローバルに一意で、ユーザーがリセットできず、工場でリセットされても存続します。 これらの理由から、ユーザーのプライバシーを保護するために、Androidバージョン6以降では、MACアドレスへのアクセスはシステムアプリに制限されています。 サードパーティアプリは、MACアドレスにアクセスすることができません。 MAC address availability changes in Android 11On app targeting Android 11 and higher, Passpointnetworks for MAC randomization is per Passpoint profile, generated a unique MAC address based on the following fields.Android11以降のアプリでは、MACアドレスのランダム化はPasspointプロファイルごとに行われ、以下のフィールドに基づき、一意のMACアドレスを生成します。
Cert, type SIM: Cert and certificate type User credential, type さらに、非特権アプリはデバイスの MAC アドレスにアクセスできず、IP アドレスのネットワーク インターフェースのみが表示されます。 これは、
ほとんどの開発者は Identifier characteristicsThe Android OS offers a number of ID with different behavior characteristics.Which ID should use depends on how the following characteristics work with your use case.IDは、さまざまな動作特性を持つIDを提供します。 しかし、これらの特性にはプライバシーに関する影響もあるため、これらの特性が互いにどのように作用するかを理解することが重要です。 ScopeIdentifier scope は、どのシステムが識別子にアクセスできるかを説明します。 Androidの識別子スコープには、一般的に次の3つの種類があります:
識別子に付与される範囲が広ければ広いほど、トラッキング目的で使用されるリスクが高くなります。 リセット可能性および永続性リセット可能性および永続性は、識別子の寿命を定義し、どのようにリセットできるかを説明します。 一般的なリセット トリガーには、アプリ内リセット、システム設定によるリセット、起動時のリセット、インストール時のリセットがあります。 Androidの識別子の寿命はさまざまですが、通常はIDのリセット方法によって寿命が異なります。 リセット機能により、ユーザーは既存のプロファイル情報から切り離された新しいIDを作成することができます。 工場出荷時のリセットを超えてIDが持続するような、より長く、より信頼性の高いIDが持続すればするほど、ユーザーが長期間の追跡を受ける可能性があるというリスクが高くなります。 アプリの再インストール時に ID がリセットされる場合、アプリまたはシステム設定内から ID をリセットする明示的なユーザー制御がない場合でも、ID の持続性が減少し、リセットされる手段が提供されます。 それ以外の場合、一意性のレベルは、識別子のエントロピーと、識別子を作成するために使用されるランダム性のソースに依存します。 たとえば、インストールした日付( Integrity protection and non-repudabilityなりすましや再生が困難な識別子を使用して、関連するデバイスまたはアカウントが特定の特性を有することを証明することができます。 例えば、そのデバイスがスパマーによって使用される仮想デバイスではないことを証明できます。スプーフィングが困難な識別子は、否認不可能性も提供します。 デバイスが秘密鍵でメッセージに署名すれば、他人のデバイスがメッセージを送ったと主張することは困難です。 5534> Common use cases and the appropriate identifier to useThe section provides alternatives to use hardware IDs such as IMEI.このセクションでは、IMEI などのハードウェア ID の使用に対する代替案を提供します。 ハードウェア ID の使用は、ユーザーがリセットできず、デバイスに再スコープされるため、推奨されません。 多くの場合、アプリにスコープされた識別子で十分です。 Track signed-out user preferencesこの場合、ユーザー アカウントなしでサーバー側でデバイスごとの状態を保存していることになります。 FID または GUID なぜこの推奨事項なのでしょうか。 ユーザーがアプリを再インストールして設定をリセットしたい場合があるため、再インストールによる情報の持続は推奨できません。 Use: SSAID なぜこの推奨があるのか Android 8.0 (API レベル 26) 以上では、SSAID は同じ開発者の署名キーで署名されたアプリ間で共通の識別子を提供します。 これにより、ユーザーがアカウントにサインインすることなく、これらのアプリ間で状態を共有することができます。 サインアウトしたユーザーの行動を追跡するこの場合、同じデバイス上のさまざまなアプリ/セッションでのユーザーの行動に基づいて、ユーザーのプロファイルを作成しました。 Advertising ID Why this recommendation? Use of the Advertising ID is mandatory for advertising use cases per the GooglePlay Developer ContentPolicy because the user can reset it. Generate signed-out or anonymous user analyticsIn this case, you’re measuring usage statistics and analytics for signed out or anonymous users. Use: Advertising ID Use for Advertising ID We’s a user for advertising use cases for GooglePlay Developer ContentPolicy: FID、または FID が不十分な場合は GUID なぜこの推奨なのか FID または GUID は、それを作成するアプリにスコープされ、アプリ間でユーザーの追跡に使用されるのを防ぎます。 また、ユーザーがアプリのデータを消去したり、アプリを再インストールしたりできるため、簡単に再設定可能です。 FID と GUID の作成プロセスは簡単です。
ユーザーに収集しているデータが匿名であると伝えた場合、識別子をPIIや他のPIIとリンクする可能性がある識別子に接続していないことを確認する必要がありますので、注意してください。 Google Analytics for MobileApps を使用して、アプリごとの分析を行うこともできます。 Track signed-out user conversionsこの場合、マーケティング戦略が成功したかどうかを検出するために、コンバージョン数を追跡しています。 Advertising ID Why this recommendation? これは広告関連のユースケースで、異なるアプリ間で利用可能な ID が必要となる場合があります。 FID または GUID なぜこの推奨なのか FID はこの目的のために明示的に設計されています。その範囲はアプリに限定されているので、異なるアプリ間でユーザーの追跡に使用できず、アプリの再インストール時に再設定されます。 Associate functionality with mobile service subscriptionsこの場合、デバイス上の特定のモバイル サービス サブスクリプションにアプリの機能を関連付ける必要があります。 5534> Use: Subscription IDAPI toidentify SIMs that are used on the device. The Subscription ID provides an index value (starting at 1) for uniquelyidentifying installed SIMs (including physical and electronic) used on thedevice. Use: Subscription IDAPI to activate SIMs on the device. [使用方法: デバイスで使用しているSIMを特定します。 このIDにより、アプリはその機能を、指定されたSIMの様々なサブスクリプション情報と関連付けることができます。 この値は、デバイスが工場出荷時にリセットされない限り、特定のSIMに対して安定した値です。 しかし、同じ SIM が異なるデバイスで異なる Subscription ID を持つ場合や、異なる SIM が異なるデバイスで同じ ID を持つ場合があります。Subscription ID が十分にユニークでない場合、Subscription ID を SSAID に連結することが推奨されます。 ICC ID はグローバルに一意であり、リセットできないため、Android 10 以降、アクセスは Anti-fraud: 無料コンテンツ制限の実施とシビル攻撃の検出この場合、ユーザーがデバイス上で見ることができる記事などの無料コンテンツの数を制限したい場合に使用します。 FIDまたはGUIDを使用します。 Android 8.0 (API レベル 26) 以降では、アプリ署名キーにスコープされているため、SSAID もオプションとして使用できます。 これが十分な保護でない場合、Android はコンテンツへのアクセスを制限するために使用できる DRMAPI を提供し、これには APK ごとの ID、Widevine ID が含まれます。 Carrier functionalityこの場合、アプリはキャリア アカウントを使ってデバイスの電話およびテキスト機能を操作しています。 Use: IMEI, IMSI, and Line1 なぜこの推奨なのか キャリア関連の機能に必要であれば、ハードウェア識別子を使用することは容認されます。 たとえば、携帯電話キャリアまたは SIM スロットの切り替えや、SMS メッセージの overIP (Line1 用) – SIM ベースのユーザー アカウントの配信に、これらの識別子を使用することができます。 しかし、非特権アプリの場合は、アカウントサインインを使用して、ユーザーデバイス情報をサーバーサイドで取得することをお勧めします。 その理由の一つは、Android 6.0 (API level 23) 以降では、これらの識別子はランタイムパーミッションを介してのみ使用できるためです。 ユーザーはこの権限をオフにする可能性があるため、アプリはこれらの例外を優雅に処理する必要があります。 Abuse detection:
|