設定

このページでは、アプリ、ゲーム、SDK で Play Integrity API を使用するようにセットアップする方法について説明します。API を統合するには、リクエストの作成を開始するために必要な Google Cloud プロジェクトが必要です。その後、Google Play Console(アプリの場合)または Google Play SDK Console(SDK の場合)で Google Cloud プロジェクトをリンクできます。追加の構成オプション、テスト機能、API レポートにアクセスし、1 日あたりのリクエスト割り当ての引き上げをリクエストするには、プロジェクトをリンクする必要があります。

Play Integrity API を有効にする

Play Integrity API を呼び出すアプリまたは SDK は、API を使用して使用状況をモニタリングするための Google Cloud プロジェクトが必要です。これは、すべての統合で必須の最初の手順です。Google Cloud コンソールで Play Integrity API を有効にするか、Cloud プロジェクトを Google Play にリンクして Play Integrity API を有効にすることができます。

Google Cloud コンソールで、新しい Cloud プロジェクトを作成するか、Play Integrity API で使用する既存の Cloud プロジェクトを選択します。

  1. [API とサービス] に移動します。
  2. [API とサービスを有効化] を選択します。
  3. Play Integrity API」を検索します。
  4. [有効にする] をクリックします。

これで、Play Integrity API をアプリに統合できます。高度な機能と割り当ての増加を利用するには、リンクの手順に進む必要があります。

Google Play にリンクする(推奨)

こちらの手順に沿って、アプリまたは SDK を Google Play にリンクします。

Google Play のアプリとゲームの場合

Google Play で配信するアプリの場合、Google Play Console で Google Cloud プロジェクトにリンクすると、追加機能を有効にしたり、1 日あたりの API 割り当ての増加をリクエストしたりできます。

  1. Google Play Console を開き、アプリを選択します。
  2. [テストとリリース] > [アプリの完全性] に移動します。
  3. [Play Integrity API] で [Cloud プロジェクトをリンクする] をクリックします。
  4. Play Integrity API で使用する Google Cloud プロジェクトを選択します。プロジェクトで Play Integrity API がまだ有効になっていない場合は、リンク時に自動的に有効になります。

Google Play SDK Console を利用している SDK プロバイダ向け

Google Play SDK Console を使用する SDK プロバイダは、Google Cloud プロジェクトをリンクして、API の使用を SDK に関連付け、追加機能を有効にし、API の 1 日あたりの割り当ての増加をリクエストできます。Google Play SDK Console へのアクセスには資格要件が適用されます。

  1. Google Play SDK Console を開き、SDK を選択します。
  2. [SDK の整合性] に移動します。
  3. [Play Integrity API] で [Cloud プロジェクトをリンクする] をクリックします。
  4. Play Integrity API で使用する予定の Google Cloud プロジェクトを選択します。プロジェクトで Play Integrity API がまだ有効になっていない場合は、リンク時に自動的に有効になります。

Play Integrity API の使用量上限を理解する

アプリまたは SDK には、関連付けられた Cloud プロジェクト番号に紐付けられた、1 日あたり 10,000 件のリクエスト上限がデフォルトで設定されています。ボリュームの増加が予想される場合は、割り当ての増加をリクエストできます。

アクション 1 日の割り当て 備考
トークン リクエスト 10,000 クラシック リクエストと標準トークン準備の間で共有
Google のサーバーでのトークンの復号 10,000 クラシック リクエストと標準リクエストで共有

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

割り当ての増加には利用条件が適用されます。割り当ての増加は、クライアントサイドのトークン生成とサーバーサイドの復号呼び出しの両方に適用されます。リクエストの処理には最長で 1 週間かかることがあります。Google Cloud コンソールで Play Integrity API の使用量をモニタリングし、サービスの中断を回避するために割り当てアラートを設定することをおすすめします。

割り当てが増加した場合でも、ユーザーのバッテリーとデータ使用量を節約するため、クラシック リクエストは引き続き頻度が少なく価値の高いアクションに限定してください。

Google Play のアプリとゲームの場合

割り当ての引き上げの対象となるには、他の配信チャネルに加えて Google Play でもアプリが利用できる必要があります。Google Play Console で、Google Cloud プロジェクトをアプリにリンクする必要があります。リンクされていないプロジェクトからの割り当てリクエストは拒否されます。

上限の引き上げをリクエストするには:

  1. Google Play Console で関連する Google Cloud プロジェクトをリンクします。
  2. 適切な再試行戦略などの API ロジックを正しく実装していることを確認します。
  3. 割り当てリクエスト フォームを送信します。

Google Play SDK Console を利用している SDK プロバイダの場合

割り当ての引き上げの対象となるには、Google Play SDK Console で SDK が申請され、Cloud プロジェクトが SDK にリンクされている必要があります。Google Play SDK Console へのアクセスには、資格要件が適用されます。

上限の引き上げをリクエストするには:

  1. Google Play SDK Console で Google Cloud プロジェクトをリンクします。
  2. Google Play SDK Console サポート フォームに記入します。

自由記述のコメント セクションで、ユースケース、実行する API リクエストのタイプ(標準、クラシック、または両方)、リクエストの頻度、1 日あたりのリクエスト数の上限について説明します。

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

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

Kotlin または Java

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

implementation 'com.google.android.play:integrity:1.6.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] を選択して、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. .unitypackage ファイルをインポートするには、Unity のメニュー オプションで [Assets] > [Import Package] > [Custom Package] を選択して、すべてのアイテムをインポートします。

Unreal Engine

以降のセクションでは、Unreal Engine プロジェクトで Google Play Integrity API を統合して設定する方法について説明します。

サポートされている Unreal Engine のバージョン

このプラグインは、Unreal Engine 5.0 以降のすべてのバージョンをサポートしています。

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

  1. GitHub リポジトリから Play Unreal Engine Plugin をダウンロードします。

  2. Unreal Engine プロジェクトの Plugins フォルダ内にある GooglePlay フォルダをコピーします。

  3. Unreal Engine プロジェクトを開き、[編集 → プラグイン] をクリックします。

  4. [Google Play] を検索し、[有効] チェックボックスをオンにします。

  5. ゲーム プロジェクトを再起動してビルドをトリガーします。

  6. プロジェクトの Build.cs ファイルを開き、PublicDependencyModuleNamesPlayIntegrity モジュールを追加します。

    using UnrealBuildTool;
    
    public class MyGame : ModuleRules
    {
      public MyGame(ReadOnlyTargetRules Target) : base(Target)
      {
        // ...
    
        PublicDependencyModuleNames.Add("PlayIntegrity");
    
        // ...
      }
    }
    

ネイティブ

ネイティブ セットアップ ガイドに沿って操作します。詳しくは、Play Integrity の ネイティブ API リファレンス ドキュメントをご覧ください。

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

API レスポンスには、すべてのリクエストで返されるデフォルトの判定結果が含まれます。Google Play Console または Google Play SDK Console で Cloud プロジェクトをリンクしている場合は、API レスポンスをカスタマイズして追加情報を含めることができます。

デフォルトの完全性判定の結果

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

レスポンス フィールド 説明
デバイスの完全性 MEETS_DEVICE_INTEGRITY アプリは、正規の認定済み Android デバイスで実行されています。Android 13 以降では、デバイスのブートローダーがロックされ、読み込まれた Android OS が認定デバイス メーカーのイメージであることをハードウェアで証明できます。
空(空の値) アプリは、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

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

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

オプションの完全性判定の結果

Google Play Console または Google Play SDK Console で Cloud プロジェクトをリンクしている場合は、追加情報の受け取りをオプトインできます。

変更を加えるには、Google Play Console にアクセスし、[テストとリリース] > [アプリの完全性] に移動します。[Play Integrity API] の横にある [設定] をクリックします。[レスポンスを変更] をクリックし、編集を行って変更を保存します。

デバイス情報

deviceIntegrity 判定の追加のデバイスラベルは、アプリが実行されているデバイス環境に関する詳細情報を提供します。1 つのデバイスがそれぞれの条件を満たしている場合、複数のラベルを返します。これらのラベルを使用して、段階的な適用戦略を作成できます。たとえば、3 つのラベル(MEETS_STRONG_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITY)を返すデバイスは、1 つのラベル(MEETS_BASIC_INTEGRITY)のみを返すデバイスよりも信頼性が高くなります。

デバイス属性には、デバイスの Android OS の Android SDK バージョンが表示されます。今後、他のデバイス属性で拡張される可能性があります。

最近のデバイスのアクティビティは、LEVEL_1(リクエスト数が少ない)から LEVEL_4(リクエスト数が多い)までの範囲のレベルを返します。アクティビティ レベルが高い場合は、信頼できないデバイスに不正に配布するために過剰なトークンを生成する目的でデバイスが使用されている可能性があります。

デバイスの呼び出しを使用すると、特定のデバイスに関連付けられたカスタムのデバイス単位のデータを保存し、後で同じデバイスにアプリを再インストールしたときに確実に取得できます。

オプション情報をオプトインすると、API レスポンスの判定結果に新しいフィールドとレスポンスが追加されます。

レスポンス フィールド ラベル 説明
デバイスの完全性 MEETS_BASIC_INTEGRITY アプリは、基本的なシステム完全性チェックに合格したデバイスで動作しています。デバイスのブートローダーはロックまたはロック解除が可能で、起動状態は確認済みまたは未確認にできます。デバイスが認定されていない場合、Google はセキュリティ、プライバシー、アプリの互換性について保証することはできません。Android 13 以降では、MEETS_BASIC_INTEGRITY 判定では、構成証明の 信頼のルートが Google によって提供される必要があります。
MEETS_STRONG_INTEGRITY アプリは、最新のセキュリティ アップデートが適用された正規の認証済み Android デバイスで動作しています。
  • Android 13 以降では、MEETS_STRONG_INTEGRITY 判定には、Android OS パーティション パッチやベンダー パーティション パッチなど、デバイスのすべてのパーティションに対する MEETS_DEVICE_INTEGRITY と過去 1 年間のセキュリティ アップデートが必要です。
  • Android 12 以前では、MEETS_STRONG_INTEGRITY 判定にはブートの完全性のハードウェア バックアップ証明のみが必要で、デバイスに最新のセキュリティ アップデートが適用されている必要はありません。そのため、MEETS_STRONG_INTEGRITY を使用する場合は、deviceAttributes フィールドの Android SDK バージョンも考慮することをおすすめします。
デバイスの属性 sdkVersion: 19, 20, ..., 36 デバイスで実行されている Android OS の SDK バージョン。返される数値は Build.VERSION_CODES にマッピングされます。
空(空の値) 必要な要件が満たされていないため、SDK バージョンは評価されませんでした。この場合、sdkVersion フィールドは設定されていないため、deviceAttributes フィールドは空です。この現象は次のことが原因で発生する場合があります。
  • デバイスの信頼性が十分でない。
  • デバイスで技術的な問題が発生した。
過去 1 時間にこのデバイスでアプリごとに実行された標準 API 完全性トークン リクエスト数 過去 1 時間にこのデバイスでアプリごとに実行されたクラシック API 完全性トークン リクエスト数
最近のデバイスのアクティビティ LEVEL_1(最低) 10 本以下 5 以下
LEVEL_2 11 ~ 25 6 ~ 10
LEVEL_3 26 ~ 50 11 ~ 15
LEVEL_4 (最高) 51 件以上 16 以上
UNEVALUATED 最近のデバイスのアクティビティは評価されませんでした。この問題は、次の原因で発生する可能性があります。
  • デバイスの信頼性が十分でない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
  • デバイスで技術的な問題が発生した。
デバイスのリコール values: bitFirst, bitSecond, bitThird これらは、特定のデバイスに対して過去に設定したビット値です。各ビットの意味は自分で決めます。3 つのビット値はデフォルトで false です。
writeDates: yyyymmFirst, yyyymmSecond, yyyymmThird これは、ビット値の書き込み日(UTC)の正確な年月です。呼び出すビットの書き込み日は、ビットが true に設定されるたびに更新され、ビットが false に設定されると削除されます。

環境の詳細

アプリアクセス リスクでは、画面のキャプチャ、オーバーレイの表示、デバイスの制御に使用される可能性のある他のアプリが実行されているかどうかを確認できます。Google Play で認識されている検証済みのユーザー補助サービスは、この判定結果から自動的に除外されます。

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 リクエスト元アプリの入出力の読み取りまたはキャプチャに使用できる他のアプリが実行されています(スクリーン レコーダー アプリなど)。このアプリは Play によってインストールされたものではなく、デバイスにプリロードされたものでもありません。
UNKNOWN_CONTROLLING デバイスやリクエスト元アプリの入出力の制御に使用できる他のアプリ(Google 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 リクエストのみを行う予定の場合は、このセクションをスキップしてください。

デフォルトでは、Google Play がレスポンスの暗号化を管理します。つまり、バックエンドが Google のサーバーを呼び出して判定を復号します。または、鍵を自分で管理して、安全なサーバー環境内でローカルで復号することもできます。

レスポンスの暗号化の管理を Google に任せる(推奨)

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

独自の暗号鍵を管理する

独自の安全なサーバー環境内でローカルに復号するには、Google Play Console または Google Play SDK Console から暗号鍵をダウンロードできます。この機能を使用するには、アプリが Google Play で提供されている必要があります。

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

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

  1. Google Play Console を開き、アプリを選択します。
  2. [テストとリリース] > [アプリの完全性] に移動します。
  3. [Play Integrity API] の横にある [設定] をクリックします。
  4. [クラシック リクエスト] で、[レスポンスの暗号化] の横にある [編集] をクリックします。

セルフマネージド キーに切り替えるには:

  1. [レスポンスの暗号鍵を自分で管理、ダウンロードする] を選択し、公開鍵をアップロードします。
  2. [保存] をクリックすると、暗号化された鍵が自動的にダウンロードされます。
  3. これらの鍵を使用してローカルで復号するよう、安全なバックエンド サーバーを更新します。

Google 管理の鍵に切り替えるには:

  1. [レスポンスの暗号化の管理を Google に任せる(推奨)] を選択します。
  2. [変更を保存] をクリックします。