アプリが Play Integrity API を使用してリクエストを行い、呼び出しに失敗すると、エラーコードが返されます。返されるエラーコードの種類はリクエストのタイプによって異なります。
- 標準リクエスト: API から StandardIntegrityErrorCode が返されます。
- クラシック リクエスト: API から IntegrityErrorCode が返されます。
再試行手段
Play Integrity API の処理がバックグラウンドで発生し、ユーザー セッション中のユーザー エクスペリエンスに影響しない場合は、指数バックオフの使用をおすすめします。
たとえば、新規購入の確認時などがこれに該当します。この処理はバックグラウンドで発生し、エラーが発生してもリアルタイムで確認を行う必要はないためです。
最初に失敗した後、最初に 5 秒遅延してから再試行します。
試行のたびに指数関数的に増加する遅延(10 秒、20 秒)を使用して、終了条件として最大試行回数を設定した再試行手段をおすすめします。
再試行する際には、ネットワーク接続を確認し、デバイスが過負荷にならないようにしてください。
3 回試行した後でもエラーが表示される場合は、クライアントが一部の完全性チェックに失敗した場合と同様に処理します。エラーの理由としては、デバイスの過負荷、ネットワーク接続の問題、攻撃の試みなどが考えられますが、これらに限定されません。
Java ライブラリのエラーコード値
ネイティブ ライブラリのその他のエラーコード値
再試行可能なエラーコード
以下のエラーの原因は一時的な事象であることがあるため、呼び出しを再試行する必要があります。
NETWORK_ERROR
(エラーコード -3)
このエラーはデバイスと Play システムの間のネットワーク接続に問題が発生したことを示します。
考えられる解決策
復元するには、ネットワーク接続を確認するようユーザーに依頼し、エラーをトリガーしたアクションに応じて、シンプルな再試行または指数バックオフを使用します。
関連ドキュメント
NETWORK_ERROR
(クラシック リクエスト)
TOO_MANY_REQUESTS
(エラー コード -8)
呼び出し元アプリからこの API へのリクエスト数が多すぎるため、スロットリングが行われています。
考えられる解決策
- リクエストの 1 日あたりの上限の引き上げをリクエストする
- 指数バックオフで再試行する
関連ドキュメント
TOO_MANY_REQUESTS
(クラシック リクエスト)
GOOGLE_SERVER_UNAVAILABLE
(エラーコード -12)
Google サーバーの不明な内部エラーです。
考えられる解決策
指数バックオフで再試行します。それでも失敗する場合は、バグ報告を検討してください。
関連ドキュメント
GOOGLE_SERVER_UNAVAILABLE
(クラシック リクエスト)
CLIENT_TRANSIENT_ERROR
(エラーコード -18)
クライアント デバイスで一時的なエラーが発生しました。
標準 API リクエストの場合、Kotlin および Java 用 Play Integrity API ライブラリのバージョン 1.3.0、Unity 用 Google Play Integrity プラグイン 1.3.0 以降、Play Core Native SDK 1.13.0 以降でサポートされています。
考えられる解決策
指数バックオフで再試行します。
関連ドキュメント
CLIENT_TRANSIENT_ERROR
(クラシック リクエスト)
注: クラシック API リクエストの場合、返される値は -17 です。
INTERNAL_ERROR
(エラーコード -100)
不明な内部エラーです。
考えられる解決策
指数バックオフで再試行します。それでも失敗する場合は、バグ報告を検討してください。
関連ドキュメント
INTERNAL_ERROR
(クラシック リクエスト)
STANDARD_INTEGRITY_INTERNAL_ERROR
(エラーコード -100)
不明な内部エラーです。
考えられる解決策
指数バックオフで再試行します。それでも失敗する場合は、バグ報告を検討してください。
関連ドキュメント
INTEGRITY_INTERNAL_ERROR
(クラシック リクエスト)
STANDARD_INTEGRITY_INITIALIZATION_FAILED
(エラーコード -102)
標準 Plya Integrity API の初期化中にエラーが発生しました。
考えられる解決策
指数バックオフで再試行します。それでも失敗する場合は、バグ報告を検討してください。
関連ドキュメント
INTEGRITY_INITIALIZATION_FAILED
(クラシック リクエスト)
再試行できないエラーコード
以下のようなケースでは、自動再試行を使用できない場合があります。ただし、問題の原因となった事象に対処することで、手動での再試行は可能です。たとえば、ユーザーが Google Play ストアをサポートされているバージョンに更新すれば、最初の処理を手動で再試行できます。
API_NOT_AVAILABLE
(エラーコード -1)
デバイスにインストールされている Google Play ストアのバージョンが古く、Play Integrity API を使用できない可能性があります。また、Google Play Console で Play Integrity API が有効になっていない可能性もあります。
考えられる解決策
- Google Play Console で Play Integrity API が有効になっていることを確認します。
- Google Play ストアを更新するようにユーザーに依頼します。
関連ドキュメント
API_NOT_AVAILABLE
(クラシック リクエスト)
PLAY_STORE_NOT_FOUND
(エラーコード -2)
デバイス上に公式の Google Play ストア アプリが見つかりませんでした。
考えられる解決策
Google Play ストアをインストールまたは有効にするようにユーザーに依頼します。
関連ドキュメント
PLAY_STORE_NOT_FOUND
(クラシック リクエスト)
PLAY_STORE_ACCOUNT_NOT_FOUND
(エラーコード -4)
注: これは IntegrityErrorCode
でクラシック リクエストの場合のみ報告されます。
デバイス上に Google Play ストア アカウントが見つかりませんでした。Play Integrity API は未認証のリクエストをサポートするようになったことにご注意ください。このエラーコードは、サポート対象外の古いバージョンの Google Play ストアにのみ使用されます。
考えられる解決策
Google Play ストアを更新してログインするようにユーザーに依頼します。
APP_NOT_INSTALLED
(エラーコード -5)
呼び出し元アプリがインストールされていません。なんらかの問題が発生しています(攻撃を受けている可能性があります)。
考えられる解決策
対応手順はありません。クライアントがすべての完全性チェックに失敗した場合と同様に処理します。
関連ドキュメント
APP_NOT_INSTALLED
(クラシック リクエスト)
PLAY_SERVICES_NOT_FOUND
(エラーコード -6)
Play 開発者サービスを利用できないか、更新する必要があります。
考えられる解決策
Play 開発者サービスをインストール、更新、または有効にするようにユーザーに依頼します。
関連ドキュメント
APP_NOT_INSTALLED
(クラシック リクエスト)
APP_UID_MISMATCH
(エラーコード -7)
呼び出し元アプリの UID(ユーザー ID)がパッケージ管理システムの UID と一致しません。
考えられる解決策
対応手順はありません。クライアントがすべての完全性チェックに失敗した場合と同様に処理します。
関連ドキュメント
APP_UID_MISMATCH
(クラシック リクエスト)
CANNOT_BIND_TO_SERVICE
(エラーコード -9)
Google Play ストアでサービスにバインドできませんでした。デバイスに古いバージョンの Google Play ストアがインストールされている可能性があります。
考えられる解決策
Google Play ストアを更新するようにユーザーに依頼します。
関連ドキュメント
CANNOT_BIND_TO_SERVICE
(クラシック リクエスト)
NONCE_TOO_SHORT
(エラーコード -10)
注: これは IntegrityErrorCode
でクラシック リクエストの場合のみ報告されます。
ノンスが短すぎます。ノンスは、16 バイト以上(Base64 エンコード前)でなければなりません。
考えられる解決策
ノンスを長くして再試行します。
NONCE_TOO_LONG
(エラーコード -11)
注: これは IntegrityErrorCode
でクラシック リクエストの場合のみ報告されます。
ノンスが長すぎます。ノンスは、500 バイト未満(Base64 エンコード前)でなければなりません。
考えられる解決策
ノンスを短くして再試行します。
NONCE_IS_NOT_BASE64
(エラーコード -13)
注: これは IntegrityErrorCode
でクラシック リクエストの場合のみ報告されます。
ノンスが Base64 のウェブセーフなラップなし文字列としてエンコードされていません。
考えられる解決策
正しい形式のノンスで再試行します。
PLAY_STORE_VERSION_OUTDATED
(エラーコード -14)
Google Play ストア アプリを更新する必要があります。
考えられる解決策
Google Play ストアを更新するようにユーザーに依頼します。
関連ドキュメント
PLAY_STORE_VERSION_OUTDATED
(クラシック リクエスト)
PLAY_SERVICES_VERSION_OUTDATED
(エラーコード -15)
Google Play 開発者サービスを更新する必要があります。
考えられる解決策
Google Play 開発者サービスを更新するようにユーザーに依頼します。
関連ドキュメント
PLAY_SERVICES_VERSION_OUTDATED
(クラシック リクエスト)
CLOUD_PROJECT_NUMBER_IS_INVALID
(エラーコード -16)
指定された Cloud プロジェクト番号が無効です。
考えられる解決策
Play Integrity API を有効にした Cloud プロジェクトの Cloud プロジェクト番号を使用します。
関連ドキュメント
CLOUD_PROJECT_NUMBER_IS_INVALID
(クラシック リクエスト)
REQUEST_HASH_TOO_LONG
(エラーコード -17)
注: これは StandardIntegrityErrorCode
で標準リクエストの場合のみ報告されます。
指定された requestHash
が長すぎます。requestHash
の長さは 500 文字未満にする必要があります。
考えられる解決策
requestHash
を短くして再試行します。
INTEGRITY_TOKEN_PROVIDER_INVALID
(エラーコード -19)
注: これは StandardIntegrityErrorCode
で標準リクエストの場合のみ報告されます。
StandardIntegrityTokenProvider
が無効です。このエラーコードは、標準 API リクエストでのみ利用可能で、Kotlin および Java プログラミング言語のライブラリ バージョン 1.3.0、Google Play Integrity Plugin for Unity 1.3.0 以降、Play Core Native SDK 1.13.0 以降でサポートされています。
考えられる解決策
新しい完全性トークン プロバイダをリクエストします。
STANDARD_INTEGRITY_INITIALIZATION_NEEDED
(エラーコード -101)
StandardIntegrityManager
が初期化されていません。
考えられる解決策
最初に StandardIntegrityManager_init()
を呼び出します。
関連ドキュメント
INTEGRITY_INITIALIZATION_NEEDED
(クラシック リクエスト)
STANDARD_INTEGRITY_INVALID_ARGUMENT
(エラーコード -103)
標準 Play Integrity API に渡された引数が無効です。
考えられる解決策
正しい引数で再試行します。
関連ドキュメント
INTEGRITY_INVALID_ARGUMENT
(クラシック リクエスト)