Play Integrity API のエラーコードを処理する

アプリが Play Integrity API リクエストを行い、呼び出しに失敗すると、アプリはエラーコードを受け取ります。このようなエラーは、ネットワーク接続の不安定さなどの環境上の問題、API 統合の問題、悪意のあるアクティビティやアクティブな攻撃など、さまざまな理由で発生する可能性があります。返されるエラーコードの種類はリクエストのタイプによって異なります。

再試行手段

Play Integrity API の処理がバックグラウンドで発生し、ユーザー セッション中のユーザー エクスペリエンスに影響しない場合は、指数バックオフの使用をおすすめします。

たとえば、新規購入の確認時などがこれに該当します。この処理はバックグラウンドで発生し、エラーが発生してもリアルタイムで確認を行う必要はないためです。

最初に失敗した後、最初に 5 秒遅延してから再試行します。

試行のたびに指数関数的に増加する遅延(10 秒、20 秒)を使用して、終了条件として最大試行回数を設定した再試行手段をおすすめします。

再試行する際には、ネットワーク接続を確認し、デバイスが過負荷にならないようにしてください。

3 回試行した後でもエラーが表示される場合は、クライアントが一部の完全性チェックに失敗した場合と同様に処理します。エラーの理由としては、デバイスの過負荷、ネットワーク接続の問題、攻撃の試みなどが考えられますが、これらに限定されません。

Java ライブラリのエラーコード値

IntegrityErrorCode StandardIntegrityErrorCode
-1 API_NOT_AVAILABLE API_NOT_AVAILABLE
-2 PLAY_STORE_NOT_FOUND PLAY_STORE_NOT_FOUND
-3 NETWORK_ERROR NETWORK_ERROR
-4 PLAY_STORE_ACCOUNT_NOT_FOUND
-5 APP_NOT_INSTALLED APP_NOT_INSTALLED
-6 PLAY_SERVICES_NOT_FOUND PLAY_SERVICES_NOT_FOUND
-7 APP_UID_MISMATCH APP_UID_MISMATCH
-8 TOO_MANY_REQUESTS TOO_MANY_REQUESTS
-9 CANNOT_BIND_TO_SERVICE CANNOT_BIND_TO_SERVICE
-10 NONCE_TOO_SHORT
-11 NONCE_TOO_LONG
-12 GOOGLE_SERVER_UNAVAILABLE GOOGLE_SERVER_UNAVAILABLE
-13 NONCE_IS_NOT_BASE64
-14 PLAY_STORE_VERSION_OUTDATED PLAY_STORE_VERSION_OUTDATED
-15 PLAY_SERVICES_VERSION_OUTDATED PLAY_SERVICES_VERSION_OUTDATED
-16 CLOUD_PROJECT_NUMBER_IS_INVALID CLOUD_PROJECT_NUMBER_IS_INVALID
-17 CLIENT_TRANSIENT_ERROR REQUEST_HASH_TOO_LONG
-18 CLIENT_TRANSIENT_ERROR
-19 INTEGRITY_TOKEN_PROVIDER_INVALID
-100 INTERNAL_ERROR INTERNAL_ERROR

ネイティブ ライブラリのその他のエラーコード値

IntegrityErrorCode StandardIntegrityErrorCode
-100 INTEGRITY_INTERNAL_ERROR STANDARD_INTEGRITY_INTERNAL_ERROR
-101 INTEGRITY_INITIALIZATION_NEEDED STANDARD_INTEGRITY_INITIALIZATION_NEEDED
-102 INTEGRITY_INITIALIZATION_FAILED STANDARD_INTEGRITY_INITIALIZATION_FAILED
-103 INTEGRITY_INVALID_ARGUMENT STANDARD_INTEGRITY_INVALID_ARGUMENT

再試行可能なエラーコード

以下のエラーの原因は一時的な事象であることがあるため、呼び出しを再試行する必要があります。

NETWORK_ERROR(エラーコード -3)

このエラーはデバイスと Play システムの間のネットワーク接続に問題が発生したことを示します。

考えられる解決策

復元するには、ネットワーク接続を確認するようユーザーに依頼し、エラーをトリガーしたアクションに応じて、シンプルな再試行または指数バックオフを使用します。

関連ドキュメント

NETWORK_ERROR(クラシック リクエスト)

TOO_MANY_REQUESTS(エラー コード -8)

呼び出し元アプリからこの API へのリクエスト数が多すぎるため、スロットリングが行われています。

考えられる解決策

  1. リクエストの 1 日あたりの上限の引き上げをリクエストする
  2. 指数バックオフで再試行する

関連ドキュメント

TOO_MANY_REQUESTS(クラシック リクエスト)

GOOGLE_SERVER_UNAVAILABLE(エラーコード -12)

Google サーバーの不明な内部エラーです。

考えられる解決策

指数バックオフで再試行します。それでも失敗する場合は、バグ報告を検討してください。

関連ドキュメント

GOOGLE_SERVER_UNAVAILABLE(クラシック リクエスト)

CLIENT_TRANSIENT_ERROR(エラーコード -18)

クライアント デバイスで一時的なエラーが発生しました。

標準 API リクエストの場合、このエラーコードは Kotlin および Java の Play Integrity API ライブラリ バージョン 1.3.0、Google Play Integrity Plugin for Unity 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 は無効になりました。これは、トークン プロバイダの有効期限が切れたか、ユーザーが Play ストア アプリのデータを消去してトークン プロバイダが削除されたことが原因で発生することがあります。

このエラーコードは、標準 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(クラシック リクエスト)