このページでは、デバイスの呼び出しを使用して、特定のデバイスにカスタム データを保存して取得する方法について説明します。デバイスをリセットした後でも、アプリが同じデバイスにインストールされていれば、後でカスタム データを確実に呼び出すことができます。これにより、ユーザーのプライバシーを保護しながら、指定したアクションや動作に基づいてデバイスの再利用を検出して防止できます。
デバイスの呼び出しの仕組み
デバイスの呼び出しを使用すると、ユーザーのプライバシーを保護しながら、特定のデバイスに関連付けられているカスタム データをアプリで保存したり呼び出したりできます。このデータは Google のサーバーに保存されるため、アプリを再インストールしたりデバイスをリセットしたりした後でも、アプリでカスタム データを確実に呼び出すことができます。たとえば、この機能を使用して、重大な不正使用の証拠が見つかったデバイス、高額なアイテム(無料トライアルなど)をすでに利用したデバイス、不正使用を目的として新しいアカウントを繰り返し作成するために使用されているデバイスを呼び出すことができます。デバイスの呼び出しでは、リクエスト元のアプリはデバイスに関連付けられている限られたデータのみを呼び出し、デバイスやユーザーの識別子を使用しないため、ユーザーのプライバシーは保護されます。デバイスの呼び出しを有効にすると、以下のことが可能になります。
- 各デバイスのデータ読み取り: 完全性判定の結果を取得する際に、デバイスごとに 3 つのカスタム値またはビットを 読み取ることができます。これらの値には独自の意味を定義できます。たとえば、これらの値を 3 つの個別のフラグとして扱うことも、組み合わせて 8 つのカスタムラベルを表すこともできます。
- 各デバイスのデータ変更: 完全性トークンを取得した後に、 そのトークンを使用して Google Play のサーバーに対してサーバーサイド呼び出しを行い、1 つ または複数の値を変更できます。トークンの使用期限は 14 日間です。たとえば、最初に完全性の確認を実施してから 2 週間以内に不正使用が証明された場合にのみ値の変更が可能ということです。値を変更すると、変更を行った年月も保存されます。
デバイスの呼び出しの前提条件と考慮事項
デバイスの呼び出しは、アプリのセキュリティを保護し、不正使用、不正行為、不正アクセスのリスクを軽減する目的でのみ情報を保存、呼び出すために使用することもできます。デバイスの呼び出しを使用して、個々のユーザーやデバイスに対してフィンガープリントを適用したりトラッキングしたりすることはできません。また、性別、年齢、位置情報などのユーザーやデバイスの機密情報を追跡するためにデバイスの呼び出しを使用してはなりません。
デバイスの呼び出しには次の前提条件があります。
- デバイスの呼び出しは、スマートフォン、タブレット、折りたたみ式デバイス、TV、自動車、Wear OS で使用できます。Wear の場合、デバイスの呼び出しは Wear OS 5 以降を搭載したデバイスでのみ利用可能です。デバイスの呼び出しはエミュレータではサポートされていません。
- デバイスの呼び出しを使用するには、Google Play ストアと Google Play 開発者サービスの両方の最新バージョンをデバイスにインストールし、有効にする必要があります。
- デバイスの呼び出しでは、ユーザー アカウントに Play ライセンスが必要です。ライセンスを取得していない場合、判定は行われません。
デバイスの呼び出しには次のタイミングに関する考慮事項があります。
- 完全性トークンを確認した後、14 日以内にそのトークンを使用してカスタム デバイスの呼び出しデータを保存できます。
- デバイスの呼び出しにはタイムスタンプが含まれているため、かなり前に変更されたデータよりも最近変更を行ったデータを優先的に考慮できます。 デバイスの持ち主変更、再生品化、再販を考慮して、一定の期間が経過したデータは無視するかリセットすることを検討してください。
- デバイスの呼び出しビットは、最後の読み取りまたは書き込みアクセスから 3 年間保存されます。
- デバイスに関連付けられているすべてのデータを削除する必要がある場合は、アプリでそのデバイスの 3 つの値をすべて false にリセットできます。これにより、タイムスタンプが自動的にリセットされます。
複数のアプリを持つデベロッパーとアプリを転送するデベロッパーの場合、デバイスの呼び出しは次のように機能します。
- Google Play デベロッパー アカウントのすべてのアプリで、デバイスごとに同じ 3 つの値を利用できます。つまり、1 つのアプリで値を 1 つ変更すると、同じデバイス上にインストールされているすべてのアプリで変更した値が読み取られます。
- あるデベロッパー アカウントから別のアカウントにアプリが転送されると、デバイスの呼び出しによって、古いデベロッパー アカウントの各デバイスのデータではなく、新しいデベロッパー アカウントの各デバイスのデータが反映されます。
デバイスの呼び出しをオンにする
準備ができたら、Google Play Console でデバイスの呼び出しをオンにします。
- Google Play Console にログインします。
- デバイスの呼び出しを使用するアプリを選択します。
- 左側のメニューの [リリース] セクションで、[アプリの完全性] に移動します。
- [Play Integrity API] の横にある [設定] をクリックします。
- そのページの [レスポンス] セクションで [レスポンスを変更] をクリックします。
- [デバイスの呼び出し] をオンにします。
- [変更を保存] をクリックします。
デバイスの呼び出しのオン / オフを切り替えると、Google Play Console で設定した Play Integrity API テスト レスポンスがすべて削除されるため、再度作成する必要があります。
デバイスの呼び出しの値を読み取る
デバイスの呼び出しは、Play Integrity API のクラシック リクエストと標準リクエストの両方で機能します。標準リクエストでは、デバイスの呼び出しはウォームアップ呼び出しで更新されます。つまり、デバイスごとのデータを変更した後に、更新された値を確認するには、別のウォームアップを実行する必要があります。デバイスの呼び出しが有効になると、 完全性判定の結果でデバイスの呼び出しの値を読み取ることができます。
デバイスの呼び出しの値を変更する
サーバー間 API 呼び出しを完全性判定の結果のデコードと同様にすると、デバイスの呼び出しの値を変更できるようになります。ビットを true に設定すると、書き込み日も更新され(すでに true に設定されている場合でも)、false に設定すると、書き込み日はリセットされて空になります。リクエストで指定されていないビットはいずれも変更されません。ビットの書き込みと判定で読み戻しができるようになるまでの間に伝播にわずかな遅延が発生します。この遅延は最長で 30 秒になる可能性がありますが、通常ははるかに短くなります。デバイスの呼び出しの書き込みリクエストは、完全性トークン リクエストよりも頻度が低くする必要があります。完全性トークン リクエストの割り当てにはカウントされませんが、公開されていない防御的なレート上限が適用されます。
playintegrity.googleapis.com/v1/PACKAGE_NAME/deviceRecall:write -d \
'{
"integrityToken": "INTEGRITY_TOKEN",
"newValues": {
"bitFirst": true,
"bitThird": false
}
}'newValues.BitFirst = true // ForceSendFields optional for value true newValues.BitSecond = false // ForceSendFields required for value false newValues.BitThird = nil // do not set ForceSendFields for unspecified bits newValues.ForceSendFields = []string{"BitSecond"}