Play Integrity API を使用してアプリやゲームを危険な操作から保護することができます。こうした操作を特定することで、アプリは適切な措置を取り、攻撃や不正使用のリスクを軽減できます。
仕組み
Integrity API は、Android アプリとゲームのデベロッパーが危険で不正なトラフィックを未然に検出できるよう、Google Play の不正使用対策機能と一連の完全性シグナルを統合したものです。たとえば、改変されたバージョンのアプリやゲーム、信頼できないデバイス、信頼できない環境などからトラフィックを対象とします。このトラフィックを検出することで、攻撃や、不正行為、不正アクセスなどの不正使用を防止するための適切な措置を取ることができます。
アプリやゲームで定義された操作をユーザーが実行すると、サーバーは Integrity API を呼び出すようクライアント サイドのコードに指示します。Google Play サーバーは、このデバイスとそのバイナリを信頼できるかどうかについての完全性判定の結果とともに、暗号化されたレスポンスを返します。アプリは、確認のため、そのレスポンスをサーバーに転送します。サーバーは、アプリやゲームが次に行う動作を判断できます。
この API は、次の情報を含むレスポンスの形で、完全性判定の結果を提供します。
- アプリの完全性: Google Play で認識済みの、改変されていないバイナリとやり取りしているかどうかを示します。
- アカウントの詳細: 現在のユーザー アカウントがライセンスを付与されているかどうか、つまり、そのアプリやゲームを Google Play からインストールまたは購入したかどうかを示します。
- デバイスの完全性: Google Play 開発者サービスを搭載した正規の Android デバイスでアプリが動作しているかどうかを示します。
ヒント:
- Play Integrity API やその他の Play 開発者サービスのステータスは、Google Play ステータス ダッシュボードを使用してモニタリングできます。
- Integrity API をアプリで最大限有効に活用するには、デベロッパー向け Android サイトのドキュメントに記載されているおすすめの方法を行ってください。
Play Integrity API を設定、管理する
アプリで Integrity API を利用できるようにする
アプリで Integrity API のレスポンスを利用できるようにするには、Google Play Console で Google Cloud プロジェクトをリンクする必要があります。プロジェクトをリンクする方法は次のとおりです。
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [既存のプロジェクトをリンクする] を選択してリンク対象のプロジェクトを指定するか、[新しいプロジェクトを作成] を選択します。
- [プロジェクトをリンク] をクリックします。
Integrity API とアプリとの統合を開始するための条件は次のとおりです。
- Java / Kotlin アプリの場合は、Google の Maven リポジトリから Play Integrity API 向けの最新バージョンの Android ライブラリをインストールします。
- Unity ゲームの場合は、Google Play の Unity 向けプラグインの最新リリースをインストールします。2019.x、2020.x 以降のすべてのバージョンがサポートされています。Unity 2018.x を使用している場合は、2018.4 以降をインストールします。Unity 2017.x を使用している場合は、2017.4.40 以降をインストールします。Unity 5.x 以前はサポートされていません。
- ネイティブのアプリとゲーム場合は、最新の Play Core Native SDK をインストールします。
これで、Android デベロッパー サイトに記載されている手順に沿ってアプリやゲームで Play Integrity API を使い始めることができます。
(省略可)レスポンスの暗号化を管理する方法を選択する
デフォルトでは、Google がレスポンスの暗号化を管理します。ただし、必要に応じてレスポンスの暗号化をご自身で管理することもできます。
重要: Google 管理のレスポンスの暗号化とセルフマネージドのレスポンスの暗号化を切り替えるには、バックエンド サーバーでのコード変更が必要になります。
レスポンスの暗号化をセルフマネージドに切り替えるには:
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [設定] までスクロールします。
- [レスポンスの暗号化] の横のステータスは、デフォルトで [Google で管理] になっています。[変更] をクリックします。
- [レスポンスの暗号鍵を自分で管理、ダウンロードする] を選択し、[変更を保存] をクリックします。Google がレスポンスの暗号鍵を生成し、自分でダウンロードと管理を行うようになります。その鍵を使ってレスポンスを復号できるようバックエンド サーバーのロジックを更新する必要があります。
- 画面上の手順に沿って .pem ファイルを生成し、その .pem ファイルをアップロードしてレスポンスの暗号鍵をダウンロードします。
- レスポンスの暗号化の管理が更新されたことを示すメッセージが画面に表示されます。
- 新しいレスポンス暗号鍵をダウンロードし、製品版でその鍵を使ってレスポンスを復号するようバックエンド サーバーを更新します。[アプリの完全性] ページの [Integrity API] タブに戻り、Google Play で以前のレスポンスの暗号鍵ではなく、新しい鍵を使い始めることができるようにします。この変更はすぐに反映されます。
セルフマネージドから Google 管理に戻すには:
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [設定] までスクロールします。
- すでに設定を変更しているため、[レスポンスの暗号化] の横のステータスは [セルフマネージド] になっています。[変更] をクリックします。
- [レスポンスの暗号化の管理を Google に任せる(推奨)] を選択して [変更を保存] をクリックします。Google がレスポンスの暗号鍵の生成、管理を行います。バックエンド サーバーが Google Play のサーバーを呼び出してレスポンスを復号します。
(省略可)Integrity API のレスポンスを設定する
デフォルトでは、次の API レスポンスが設定されています。
API レスポンス | ラベル | 説明 |
デバイスの完全性 | MEETS_DEVICE_INTEGRITY |
アプリは Google Play 開発者サービスを搭載した Android デバイスで動作しています。このデバイスはシステム完全性チェックに合格し、Android の互換性要件を遵守しています。 |
ラベルなし(空の値) |
アプリは、API フックなどの攻撃や root 権限取得などのシステム侵害の兆候があるデバイス、または Google Play の完全性チェックに合格していない仮想デバイス(エミュレータなど)で動作しています。 |
|
アカウントの詳細 | LICENSED |
ユーザーはアプリの利用資格を持っています。つまり、ユーザーは Google Play でアプリをインストールまたは購入しました。 |
UNLICENSED |
ユーザーはアプリの利用資格を持っていません。ユーザーがアプリをサイドローディングした場合や、アプリを Google Play から取得したのではない場合などが該当します。 |
|
UNEVALUATED |
要件を遵守していないため、ライセンスの詳細は評価されませんでした。次のような原因が考えられます。
|
|
アプリの完全性 | PLAY_RECOGNIZED |
アプリと証明書が、Google Play で配信されているバージョンと一致します。 |
UNRECOGNIZED_VERSION |
証明書またはパッケージ名が Google Play の記録と一致しません。 |
|
UNEVALUATED |
アプリの完全性は評価されませんでした。デバイスの信頼性が十分でないなど、要件を遵守していません。 |
次の API レスポンスを受け取るように設定することもできます。
API レスポンス | ラベル | 説明 |
デバイスの完全性 | MEETS_BASIC_INTEGRITY |
アプリは基本的なシステム完全性チェックに合格したデバイスで動作しています。このデバイスは Android の互換性要件を遵守しておらず、Google Play 開発者サービスの実行を承認されていない可能性があります。たとえば、認識されていないバージョンの Android を実行している、ロック解除されたブートローダーを搭載している、メーカーによる認証を受けていない、などの可能性がある場合が該当します。 |
MEETS_STRONG_INTEGRITY |
アプリは、Google Play 開発者サービスを搭載した Android デバイスで動作しており、ハードウェア格納型キーストアのような高いレベルのシステム完全性を確保しています。このデバイスはシステム完全性チェックに合格し、Android の互換性要件を遵守しています。 |
追加のラベルを受け取るように設定すると、それぞれのラベル基準が満たされた場合、同じデバイスに対する複数のラベルが完全性レスポンスに含まれるようになります。可能性のあるレスポンスの範囲に応じて異なる動作をするようにバックエンド サーバーを準備できます。たとえば、MEETS_BASIC_INTEGRITY
、MEETS_DEVICE_INTEGRITY
、MEETS_STRONG_INTEGRITY
を返すデバイスは、MEETS_BASIC_INTEGRITY
のみを返すデバイスよりも信頼性が高く、それに応じてサーバーの応答方法を調整できます。
API レスポンスを編集するには:
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [レスポンス] までスクロールします。
- [編集] をクリックします。
- 変更対象の API レスポンスの横にあるチェックボックスをオンまたはオフにします。
- [変更を保存] をクリックします。
重要: API レスポンスの変更は、アプリが製品版の場合も含め、保存後すぐに反映されます。Google Play Console で API レスポンスのセットを変更する前に、アプリのサーバーでそうしたレスポンスを受け入れる準備ができていることをご確認ください。
Play Integrity API の使用状況を管理してティアを変更する
アプリには、アプリの使用量ティアに基づいて API への 1 日あたりのリクエスト数の上限が割り当てられます。標準ティアのアプリは、Integrity API に 1 日あたり最大 10,000 件のリクエストを行えます。
アプリの使用量ティアを確認するには:
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [設定] までスクロールします。
- 使用量ティアを確認します。
1 日あたりにアプリが行うリクエスト数を確認するには、Google Cloud Console で、リンクした Google Cloud プロジェクトを表示します。
1 日あたりのリクエスト数が 10,000 件を上回るようにするには、アプリの使用量ティアを [高] に変更することをリクエストできます。高ティアの対象となるには、次のことを行う必要があります。
- 再試行を含む API ロジックの実装が正しいことを確認する。
- 他の配信チャネルに加えて Google Play でアプリを公開する。
アプリの使用量ティアを変更するには、こちらのフォームをご利用ください。
Play Integrity API の統合をテストする
Integrity API の統合をテストする Gmail アカウントのリストを設定できます。最初に、テスターにリリースへのアクセス権が付与されていることをご確認ください。
- 内部テストトラックまたはテスト対象のトラックにアプリを公開します。次に、メールアドレスでテスターを管理する手順、または Google グループを使用する手順に沿って、テスターがリリースにアクセスできるようにします。
テストを設定するには:
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [テスト] までスクロールします。
- [新しいテストを作成] をクリックします。
- メーリング リストを選択するか、新しいリストを作成します。
- [テストを作成] をクリックします。
Google Play でデバイスの除外を設定する
Play ストアへの Integrity API のレスポンスに基づいて Google Play でのアプリの配信からデバイスを除外できます。除外されたデバイスを使用しているユーザーは、Google Play で公開されているお客様のアプリを表示したりインストールしたりすることはできません。なお、デバイスを除外しても、ユーザーが別の配信チャネルやサイドローディングなどの別の手段でアプリを取得するのを防ぐことはできません。
重要: デバイスの除外で使用されるのは、Play ストア アプリで受信した Integrity API のレスポンスです。API の統合後にアプリで受信するレスポンスとは関係ありません。
Integrity API のデバイスの除外のオプションは 3 つあります。
- 除外しない: Integrity API に基づいてデバイスを除外しません。
- 基本的な整合性を満たしていないデバイスのみを除外する: 基本的な完全性を満たしていない信頼できないデバイスを除外します。
- 整合性を満たしていないデバイスをすべて除外する: デバイスの完全性を満たしていない信頼できないデバイスを除外します。
ヒント: 基本的な完全性とデバイスの完全性の定義については、Android デベロッパー サイトの Play Integrity API のドキュメントをご覧ください。
Google Play Console でデバイスの除外の設定を変更する方法は次のとおりです。
- Google Play Console を開き、[アプリの完全性] ページ([リリース] > [設定] > [アプリの完全性])に移動します。
- [Integrity API] タブをクリックします。
- [デバイスの除外] の横で、Integrity API のレスポンスに基づいてアプリの配信からデバイスを除外するかどうかを選択します。除外されたデバイスを使用しているユーザーは、Google Play で公開されているアプリを表示したりインストールしたりすることはできません。
- 変更内容を保存します。
重要: この設定により、デバイス カタログの除外ルールが自動的に更新されます。