設定

このページでは、アプリまたはゲームで Play Integrity API を使用するようにセットアップする方法について説明します。API からのレスポンスを有効にして、アプリとアプリのバックエンド サーバーに API を統合する必要があります。Google Play Console で、Play Integrity API に使用している Google Cloud プロジェクトをリンクすると、追加の構成オプション、テスト機能、レポートを利用できるようになります。

Play Integrity API レスポンスを有効にする

Play Integrity API を呼び出すすべてのアプリまたは SDK は、Google Cloud プロジェクトを使用して API の使用状況をモニタリングする必要があります。Google Play で配信するアプリの場合、Google Play Console で Cloud プロジェクトにリンクすると Play Integrity API からのレスポンスを有効にできます。新しい Cloud プロジェクトを作成する場合や、アプリが Google Play 以外でのみ配信されている場合は、Google Cloud コンソールから Play Integrity API レスポンスを有効にできます。

Google Play Console でセットアップする(推奨)

Google Play Console で Play Integrity API レスポンスを有効にすると、追加の構成オプション、テスト機能、API レポートを利用できるようになります。このオプションは、Google Play で配信されるアプリでのみ利用できます。[リリース] > [アプリの完全性] に移動します。[Play Integrity API] で [Cloud プロジェクトをリンクする] を選択します。アプリにリンクする Cloud プロジェクトを選択すると、Play Integrity API レスポンスが有効になります。これで、Play Integrity API をアプリに統合できます。

Google Cloud コンソールでセットアップする

Google Cloud コンソールで、新しい Cloud プロジェクトを作成するか、Play Integrity API で使用する既存の Cloud プロジェクトを選択します。[API とサービス] に移動します。[API とサービスの有効化] を選択します。Play Integrity API を検索し、有効化します。これで、Play Integrity API をアプリに統合できます。

SDK プロバイダの手順をセットアップする

SDK プロバイダは、固有の Google Cloud プロジェクトを使用して Play Integrity API を呼び出す必要があります。それにより、API の使用が、SDK を使用する個々のアプリではなく SDK に関連付けられます。つまり、SDK を使用するアプリは Play Integrity API を個別にセットアップする必要はありません。Play Integrity API へのリクエストは、アプリではなく、SDK の API 使用量に自動的にカウントされます。

SDK デベロッパーは、Google Play SDK Console または Google Cloud コンソールのどちらかを使用して Play Integrity API をセットアップできます

Google Play SDK Console で Play Integrity API レスポンスを有効にすると、追加の構成オプションを利用できるようになります。[SDK の整合性] に移動し、[設定] をクリックします。[プロジェクト構成] で [Cloud プロジェクトをリンクする] を選択します。SDK にリンクする Cloud プロジェクトを選択すると、Play Integrity API レスポンスが有効になります。これで、Play Integrity API を SDK に統合できます。Google Play SDK Console へのアクセスには、利用資格の条件が適用されます。

Google Cloud コンソールを使用する

Google Cloud コンソールから Play Integrity API レスポンスを有効にできます。Google Cloud コンソールで、新しい Cloud プロジェクトを作成するか、Play Integrity API で使用する既存の Cloud プロジェクトを選択します。[API とサービス] に移動します。[API とサービスの有効化] を選択します。Play Integrity API を検索し、有効化します。これで、Play Integrity API を SDK に統合できます。

SDK の 1 日あたりの Play Integrity API リクエスト数を引き上げる

1 日あたりのリクエスト数上限の引き上げを希望する SDK プロバイダは、割り当てリクエスト フォームをご提出ください。公開コメントのセクションで、SDK のリクエストである旨を記載し、Maven 座標(groupId:artifactId)または SDK への URL を含めてください。

1 日あたりの Play Integrity API リクエスト数を引き上げる

アプリごとに 1 日あたり最大 10,000 件のリクエスト上限が適用されます。アプリが増加するユーザー数に対応する必要がある場合は、以下の手順で 1 日あたりの上限の引き上げをリクエストできます。

リクエストの 1 日あたりの上限を引き上げる

リクエストの 1 日あたりの上限を引き上げるには、他の配信チャネルに加えて Google Play でもアプリが利用できる必要があります。1 日あたりの上限を引き上げた後も、ユーザーごとのクラシック リクエストは、リクエスト頻度が低く高価値を生むアクションに制限して、ユーザーデータの保持とバッテリーの節約に努めてください。

リクエスト数の 1 日あたりの上限の引き上げをリクエストする手順は次のとおりです。

  1. Google Play Console で、Play Integrity API に使用している Google Cloud プロジェクトをリンクします。
  2. 推奨される再試行戦略などの API ロジックを正しく実装していることを確認します。
  3. こちらのフォームを使用して、割り当ての増加をリクエストします。

Play Integrity API の割り当ての引き上げには、最長で 1 週間かかることがあります。そのため、Google Play Console または Google Cloud コンソールで Play Integrity API の使用量をモニタリングすることを強くおすすめします。これらのコンソールでは、サービスが中断されることがないように、割り当てアラートをセットアップすることもできます。

クラシック リクエストの割り当てが増えると、完全性トークンを生成するクライアント呼び出しと、完全性トークンの復号と検証を行うサーバー呼び出しの両方に自動的に適用されます。標準リクエストの割り当てが増えると、完全性トークンの復号と検証を行うサーバー呼び出しに適用されます。

Play Integrity API をアプリに統合する

Play Integrity API をアプリまたは SDK に統合するには、開発環境に応じて次のいずれかを実行します。

Kotlin または Java

Play Integrity API 用の最新の Android ライブラリは、Google の Maven リポジトリから入手できます。アプリの build.gradle ファイルに次の依存関係を追加します。

implementation 'com.google.android.play:integrity:1.4.0'

Unity

以降のセクションでは、Unity プロジェクト用に Google Play Integrity API を統合して設定する方法について説明します。サポートされている Unity バージョン、インストール方法、環境の設定について説明します。

サポートされている Unity バージョン

  • 2019.x、2020.x 以降のすべてのバージョンがサポートされています。
  • Unity 2018.x を使用している場合は、バージョン 2018.4 以降がサポートされています。
  • Unity 2017.x 以前のバージョンはサポートされていません。

開発環境をセットアップする

OpenUPM-CLI

OpenUPM CLI がインストールされている場合は、次のコマンドを使用して OpenUPM レジストリをインストールできます。

openupm add com.google.play.integrity

OpenUPM

  1. Unity のメニュー オプション [Edit] > [Project Settings] > [Package Manager] を選択して、パッケージ マネージャーの設定を開きます。

  2. OpenUPM をスコープ付きレジストリとして Package Manager ウィンドウに追加します。

    Name: package.openupm.com
    URL: https://package.openupm.com
    Scopes: com.google.external-dependency-manager
      com.google.play.common
      com.google.play.core
      com.google.play.integrity
    
  3. Unity のメニュー オプション [Window] > [Package Manager] を選択して、Package Manager メニューを開きます。

  4. マネージャー スコープのプルダウンで [My Registries] を選択します。

  5. パッケージのリストから Google Play Integrity plugin for Unity パッケージを選択し、[Install] を押します。

GitHub からインポート

  1. GitHub から最新の .unitypackage リリースをダウンロードします。

  2. Unity メニュー オプションの [Assets] > [Import Package] > [Custom Package] を選択し、すべてのアイテムをインポートして、.unitypackage ファイルをインポートします。

ネイティブ

Play Core Native SDK 1.13.0 以降をインストールします。手順については、Play Core Native の開発環境セットアップ ガイドをご覧ください。

API レスポンスを設定する(省略可)

API レスポンスには、すべてのリクエストで返されるデフォルトの判定結果が含まれます。Google Play Console で Play Integrity API の統合を設定している場合は、API レスポンスをカスタマイズできます。

デフォルトのレスポンス

Play Integrity API レスポンスでは、デフォルトで以下の完全性判定の結果が返されます。

レスポンス フィールド 説明
デバイスの完全性 MEETS_DEVICE_INTEGRITY アプリは、Google Play 開発者サービスを搭載した Android デバイスで動作しています。このデバイスはシステム完全性チェックに合格し、Android の互換性要件を満たしています。
空(空の値) アプリは、API フックなどの攻撃や root 権限取得などのシステム侵害の兆候があるデバイス、または Google Play の完全性チェックに合格していない仮想デバイス(エミュレータなど)で動作しています。
Play アカウントの詳細 LICENSED ユーザーはアプリの利用資格を持っています。つまり、ユーザーはデバイスで Google Play からアプリをインストールまたは更新しました。
UNLICENSED ユーザーはアプリの利用資格を持っていません。ユーザーがアプリをサイドローディングした場合や、アプリを Google Play から取得したのではない場合などが該当します。
UNEVALUATED 要件が満たされていないため、ライセンスの詳細は評価されませんでした。次のような原因が考えられます。
  • デバイスの信頼性が十分でない。
  • ユーザーが Google Play にログインしていない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
アプリの完全性 PLAY_RECOGNIZED アプリと証明書が、Google Play で配信されているバージョンと一致します。
UNRECOGNIZED_VERSION 証明書またはパッケージ名が Google Play の記録と一致しません。
UNEVALUATED アプリの完全性は評価されませんでした。デバイスの信頼性が十分でないなど、要件が満たされていませんでした。

条件付きレスポンス

PC 版 Google Play Games に配信する場合は、デバイスの完全性判定の結果において次の追加ラベルの受け取りが自動的にオプトインされます。

レスポンス フィールド ラベル 説明
デバイスの完全性 MEETS_VIRTUAL_INTEGRITY アプリは、Google Play 開発者サービスを搭載した Android Emulator で動作しています。このエミュレータはシステム完全性チェックに合格し、Android の互換性に関する主要な要件を満たしています。

オプトイン可能なレスポンス

Google Play Console または Google Play SDK Console で Play Integrity API の統合を設定している場合は、API レスポンスでの情報の受け取りをオプトインできます。

API レスポンスを変更するには、Google Play Console にアクセスし、[リリース] > [アプリの完全性] に移動します。[レスポンス] で編集を行い、変更を保存します。

オプションのデバイス情報

アプリと SDK では、デバイスの完全性判定の結果において追加のデバイスラベルの受け取りをオプトインできます。追加のラベルを受け取るように設定すると、それぞれのラベル基準が満たされた場合、同じデバイスに対する複数のラベルが完全性レスポンスに含まれるようになります。返される可能性のあるレスポンスの範囲に応じて異なる動作をするバックエンド サーバーを準備できます。たとえば、3 つのラベル(MEETS_STRONG_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITY)を返すデバイスは、1 つのラベル(MEETS_BASIC_INTEGRITY)のみを返すデバイスよりも信頼性が高くなります。

最近のデバイスのアクティビティを有効にすることもできます。最近のデバイスのアクティビティは、LEVEL_1(リクエスト数が少ない)から LEVEL_4(リクエスト数が多い)のレベルを返します。たとえば、アプリの通常のアクティビティ レベルよりも大幅に高いアクティビティ レベルを返すデバイスは、信頼できないデバイスに配布するために完全性トークンを大量に生成しようとしている可能性があります。

デバイス属性を有効にすることもできます。これにより、デバイスで実行されている Android OS の Android SDK バージョンを確認できます。今後、他のデバイス属性が追加される可能性があります。

レスポンス フィールド ラベル 説明
デバイスの完全性 MEETS_BASIC_INTEGRITY アプリは、基本的なシステム完全性チェックに合格したデバイスで動作しています。Android 13 以降のデバイスでは、Android プラットフォーム キー構成証明が必要です。このデバイスは Android の互換性要件を満たしておらず、Google Play 開発者サービスの実行を承認されていない可能性があります。たとえば、認識されていないバージョンの Android を搭載している、ブートローダーがロック解除されている、確認付きブートを実行していない、メーカーによる認定を受けていない、などの場合があります。
MEETS_STRONG_INTEGRITY アプリは、Google Play 開発者サービスを搭載した Android デバイスで動作しており、システム完全性の強力な保証(ハードウェア格納型のブート完全性保証など)が存在します。また、Android 13 以降のデバイスでは、過去 1 年間にセキュリティ アップデートが適用されている必要があります。このデバイスはシステム完全性チェックに合格し、Android の互換性要件を満たしています。
過去 1 時間にこのデバイスでアプリごとに行われた Standard API 完全性トークン リクエスト 過去 1 時間にこのデバイスでアプリごとに実行されたクラシック API 完全性トークン リクエスト
最近のデバイスのアクティビティ LEVEL_1(最小) 10 本以下 5 以下
LEVEL_2 11 ~ 25 6 ~ 10 人
LEVEL_3 26 ~ 50 11 ~ 15
LEVEL_4 (最高) 50 件以上 16 以上
UNEVALUATED 最近のデバイスのアクティビティは評価されませんでした。原因として考えられるのは次のとおりです。
  • デバイスの信頼性が十分でない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
  • デバイスで技術的な問題が発生した。
デバイスの属性 sdkVersion: 19, 20, ..., 35 デバイスで実行されている Android OS の SDK バージョン。返された数値は Build.VERSION_CODES にマッピングされます。
空(空の値) 必要な要件が満たされていないため、SDK バージョンは評価されませんでした。この場合、sdkVersion フィールドは設定されていないため、deviceAttributes フィールドは空になります。次のような理由が考えられます。
  • デバイスの信頼性が十分でない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
  • デバイスで技術的な問題が発生した。

オプトイン可能な環境の詳細

アプリでは、環境に関する追加の判定結果の受け取りをオプトインできます。アプリアクセス リスクを使用すると、画面をキャプチャしたり、オーバーレイを表示したり、デバイスを操作したりする可能性のある他のアプリが実行されているかどうかを確認できます。Google Play プロテクトの判定結果は、デバイスで Google Play プロテクトが有効になっているかどうか、既知のマルウェアが検出されたかどうかを示します。

これらの判定結果の受け取りをオプトインすると、API レスポンスの判定結果に環境の詳細フィールドが追加されます。

レスポンス フィールド 説明
アプリアクセス リスクの判定結果 KNOWN_INSTALLED Google Play によってインストールされたか、デバイスのメーカーによってシステム パーティションにプリロードされたアプリです。
KNOWN_CAPTURING リクエスト元アプリの入出力の読み取りまたはキャプチャに使用できる Google Play によってインストールされたアプリまたはデバイスにプリロードされたアプリが実行されています(スクリーン レコーダー アプリなど)。
KNOWN_CONTROLLING デバイスやリクエスト元アプリの入出力の制御に使用できる、Google Play によってインストールされたアプリまたはデバイスにプリロードされたアプリが実行されています(リモコンアプリなど)。
KNOWN_OVERLAYS Google Play によってインストールされたアプリ、またはデバイスにプリロードされているアプリが実行されており、リクエスト元のアプリにオーバーレイが表示されている可能性があります。
UNKNOWN_INSTALLED Google Play によってインストールされた、またはデバイスのメーカーによってシステム パーティションにプリロードされたアプリではない、他のアプリがインストールされています。
UNKNOWN_CAPTURING リクエスト元アプリの入出力の読み取りまたはキャプチャに使用できる他のアプリ(Google Play によってインストールされたアプリでも、デバイスにプリロードされたアプリでもない)が実行されています(スクリーン レコーダー アプリなど)。
UNKNOWN_CONTROLLING デバイスやリクエスト元アプリの入出力の制御に使用できる他のアプリが実行されています(Play によってインストールされたアプリでも、デバイスにプリロードされたアプリでもありません)。リモコンアプリなど。
UNKNOWN_OVERLAYS リクエスト元のアプリにオーバーレイを表示している可能性がある、他のアプリ(Google Play によってインストールされたアプリやデバイスにプリロードされたアプリではない)が実行されています。
空(空の値) 必要な要件が満たされていない場合、アプリアクセス リスクは評価されません。この場合、appAccessRiskVerdict フィールドは空です。次のような原因が考えられます。
  • デバイスの信頼性が十分でない。
  • デバイスのフォーム ファクタがスマートフォン、タブレット、折りたたみ式ではない。
  • デバイスで Android 6(API レベル 23)以降を実行していない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
  • デバイス上の Google Play ストアのバージョンが古い。
  • ゲームのみ: ユーザー アカウントにゲームの Play ライセンスがない。
  • verdictOptOut パラメータを使用して標準リクエストが使用されました。
  • 標準リクエストのアプリアクセス リスクをまだサポートしていないバージョンの Play Integrity API ライブラリで標準リクエストが使用されています。
Play プロテクトの判定結果 NO_ISSUES Play プロテクトはオンになっていますが、デバイスにおいてアプリの問題は検知されませんでした。
NO_DATA Play プロテクトはオンになっていますが、まだスキャンが実行されていません。デバイスまたは Play ストア アプリが最近リセットされた可能性があります。
POSSIBLE_RISK Play プロテクトがオフになっています。
MEDIUM_RISK Play プロテクトがオンになっており、有害な可能性があるアプリがデバイスにインストールされていることが検知されました。
HIGH_RISK Play プロテクトがオンになっており、危険なアプリがデバイスにインストールされていることが検知されました。
UNEVALUATED Play プロテクトの判定結果は評価されませんでした。デバイスの信頼性が十分でないなど、要件が満たされていませんでした。

クラシック リクエストの設定を構成する(省略可)

標準 API リクエストのみを行う予定の場合は、このセクションをスキップしてください。

クラシック リクエストを実行する場合、Play Integrity API とのやり取りでアプリが使用するレスポンスの暗号化は、デフォルトでは Google Play のサーバーが管理します。このデフォルトの方法を使用することをおすすめしますが、以下の手順でレスポンスの暗号鍵を管理およびダウンロードすることもできます。

レスポンスの暗号化を Google に任せる(デフォルト / 推奨)

アプリのセキュリティを保護するため、レスポンスの暗号鍵の生成と管理を Google で行えるようにすることをおすすめします。バックエンド サーバーが Google Play のサーバーを呼び出してレスポンスを復号します。

レスポンスの暗号鍵を自分で管理、ダウンロードする

独自の安全なサーバー環境内で、完全性判定の結果をローカルで復号する場合は、ご自身でレスポンスの暗号鍵を管理、ダウンロードできます。レスポンスの暗号鍵の管理とダウンロードを行うには、Google Play Console を使用していることと、他の配信チャネルに加えて Google Play でもアプリが公開されている必要があります。レスポンスの暗号鍵の管理方法を Google 管理から自己管理に切り替える手順は次のとおりです。

受け取ったトークンをクライアント アプリ内で復号または検証しないでください。復号鍵は決してクライアント アプリに公開しないでください。

Google Play Console でレスポンスの暗号化の管理方法を変更する前に、サービスの停止を回避するため、完全性トークンの復号と検証が Google Play のサーバーで行われるようにサーバーが正しく構成されていることを確認してください。

レスポンスの暗号鍵の Google 管理とセルフマネージドを切り替える

現在、Google がレスポンスの暗号化を管理している場合に、レスポンスの暗号鍵をご自身で管理、ダウンロードする方法に切り替えるには、次の手順を行います。

  1. Google Play Console にログインします。
  2. Play Integrity API を使用しているアプリを選択します。
  3. 左側のメニューの [リリース] セクションで、[アプリの完全性] に移動します。
  4. [Play Integrity API] の横にある [設定] をクリックします。
  5. そのページの [クラシック リクエスト] セクションで、[レスポンスの暗号化] の横にある [編集] をクリックします。
  6. 表示されたウィンドウで、[レスポンスの暗号鍵を自分で管理、ダウンロードする] をクリックします。
  7. 手順に沿って公開鍵をアップロードします。
  8. アップロードが正常に完了したことがウィンドウに表示されたら、[保存] をクリックします。これにより、暗号化された鍵が自動的にダウンロードされます。
  9. 独自の安全なサーバー環境で、レスポンスの暗号鍵を使用してローカルで完全性トークンの復号と検証を行うように、サーバーのロジックを変更します。
  10. (省略可)レスポンスの暗号鍵をご自身で管理する場合も、アプリは Google Play のサーバーにフォールバックしてレスポンスの復号と検証を行えます。

レスポンスの暗号鍵をご自身で管理している場合に、Google にレスポンスの暗号化の管理を任せる方法に切り替えるには、次の手順を行います。

  1. Google のサーバーのみで復号と検証を行うように、サーバーのロジックを変更します。
  2. Google Play Console にログインします。
  3. Play Integrity API を使用しているアプリを選択します。
  4. 左側のメニューの [リリース] セクションで、[アプリの完全性] に移動します。
  5. [Play Integrity API] の横にある [設定] をクリックします。
  6. そのページの [クラシック リクエスト] セクションで、[レスポンスの暗号化] の横にある [編集] をクリックします。
  7. 表示されたウィンドウで、[レスポンスの暗号化の管理を Google に任せる(推奨)] をクリックします。
  8. [変更を保存] をクリックします。