Play Integrity API: アカウント アクティビティ早期アクセス プログラム(EAP)

Play アカウント アクティビティは、Play Integrity API の新しいシグナルです。Play アカウント アクティビティを使用すれば、より効果的で細やかな不正使用防止戦略を構築できます。アカウント アクティビティは、ストア アクティビティの有無および量、デバイス上のアカウントの利用時間に基づくレベルで表されます。アカウント アクティビティが評価されると、現在のユーザー セッションに対するアカウント アクティビティ レベルが返されますが、ユーザー ID やデバイス ID にはリンクされていません。

Play アカウント アクティビティとは

Play Integrity API を利用すれば、完全性シグナルのコレクションを取得できるため、アプリやゲームのデベロッパーは、リスクが潜んでいる可能性のある不正なトラフィックを検出できます。この早期アクセス プログラムに参加しているデベロッパーは、API レスポンスにアカウント アクティビティを追加できます。API レスポンスには、デバイス、アプリ、アカウント ライセンスの判定結果がすでに含まれています。デバイス、アプリ、ライセンスの判定結果に問題があった場合、アカウント アクティビティは評価されません。既存の判定結果に問題がない場合、アカウント アクティビティのレベルが返されます。レベルは、ストア アクティビティの有無および量、デバイス上のアカウントの利用時間に基づいて判断されます。このレベルを利用することで、正当なユーザーのトラフィックと正当でない可能性のあるアカウント(不正行為に使用されるアカウント、自動トラフィックに使用されるアカウント、デバイス ファームで使用されるアカウントなど)のトラフィックをアプリが区別できます。アプリは、価値の高いアクションや機密情報にかかわるアクションを保護する際に、このシグナルを他のシグナルと併用できます。

早期アクセス プログラム(EAP)に参加しているアプリは、現在のユーザー セッションについて、次のいずれかのアカウント アクティビティ レベルを取得できます。

  • UNEVALUATED: デバイスが信頼されていないか、ユーザーが Play アプリのライセンスを持っていないため、アカウント アクティビティが評価されなかった。
  • UNUSUAL: Google Play ストアのアクティビティが、デバイス上のユーザー アカウントの少なくとも 1 つに関して通常と異なる。Google Play では、アクティビティが実際のユーザーによるものであることを確認するようおすすめしています。
  • UNKNOWN: デバイス上のユーザー アカウントに関して評価するだけのストア アクティビティが Google Play に存在しない。アカウントが新しいか、Google Play でのアクティビティがまだ少ない可能性があります。
  • TYPICAL (BASIC): Google Play ストア アクティビティが、デバイス上のユーザー アカウントによる通常のものである。
  • TYPICAL (STRONG): Google Play ストア アクティビティが、デバイス上のユーザー アカウントによる通常のものであり、複製が困難なシグナルを送信している。

不正使用対策戦略の一環としてアカウント アクティビティを使用する

アカウント アクティビティは、全体的な不正使用対策戦略の一環として他のシグナルと併用するのが最適で、単独で不正使用対策メカニズムとして使用するものではありません。このシグナルと Play Integrity API を、自分のアプリに適した他のセキュリティに関するおすすめの方法と組み合わせて使用してください。

アクションの前にテレメトリーを収集し対象ユーザーを理解する

アカウント アクティビティまたは他の Play Integrity API の判定結果に基づいて機能を変更する前に、まず既存のユーザー層の現状を把握する目的で API を実装してください。現在のインストール ベースのレベルが判明したら、計画している適用を実施した場合の影響を推定し、それに応じて不正使用対策戦略を調整できます。

価値の高い機能や機密性の高い機能にアクセスする際に、リスクの高いトラフィックを検証する

アプリやゲームで、Play Integrity API で保護する価値の高いアクションや機密性の高いアクションを特定します。これにより、アプリやゲームへのアクセスを完全に拒否する必要がなくなります。可能であれば、価値の高いアクションを許可する前に、リスクの高いトラフィックを検証します。たとえば、アカウント アクティビティ レベルが UNUSUAL の場合、ユーザーが保護対象のアクションを完了する前に、2 つ目の検証メカニズムを要求することができます。

ユーザー サポートを計画する

可能であれば、有用なエラー メッセージをユーザーに提供して、問題を自ら解決できるようにします。たとえば、再試行やインターネット接続の有効化、Google Play ストア アプリが最新かどうかの確認を試みてもらいます。アカウント アクティビティの評価は、Google Play によって定期的に更新されます。定期更新が実施される際、新しいストア アクティビティによってユーザーのレベルが自動的に変更されることがあります。

Play Integrity API に関する既存の推奨事項に従う

前述のおすすめの方法に加えて、Play Integrity API に関するセキュリティ上の考慮事項をお読みください。

早期アクセス プラグラムに参加して、Play Integrity API のアカウント アクティビティを利用する

アカウント アクティビティを利用するには、次の手順を行います。

ステップ 1: 以下の重要な考慮事項を確認する

  • アカウント アクティビティは現在開発中のため、変更される可能性があります。
  • アカウント アクティビティはまだ機密保持の対象です。アカウント アクティビティまたはアカウント アクティビティ レベルに関する情報をエンドユーザーに知らせないでください。
  • アカウント アクティビティを使用すると、Google Play デベロッパー販売 / 配布契約および Play Integrity API 利用規約の各条項に同意したことになります。
  • 早期アクセス プログラムに参加するデベロッパーには、適用戦略を変更する前に、アカウント アクティビティ シグナルを評価し、評価結果に関するフィードバックと情報を Google Play に提供することが求められます。

ステップ 2: Play Integrity API のアカウント アクティビティ EAP への参加をリクエストする

ゲーム向け Google Play パートナー プログラムのデベロッパーには、アカウント アクティビティ EAP へのアクセス権が自動的に付与されます。ステップ 3 に進んでください。

早期アクセス プログラムへの参加をお考えの他のデベロッパーは、以下の情報を記載したメールを integrity-api-eap@google.com までお送りください。

  • パッケージ名とデベロッパー アカウント ID
  • アカウント アクティビティに関する推奨手順を把握済みであることの確認
  • アカウント アクティビティの評価方法および、アカウント アクティビティの使用目的(すでにアイデアがある場合)
  • アカウント アクティビティ早期アクセス プログラムに参加した後の想定スケジュール

現時点では、アカウントが良好な状態で、Google Play の高いパフォーマンスしきい値を満たしているデベロッパーのみを受け付けています。

ステップ 3: Google Play Console から Integrity API レスポンスのアカウント アクティビティをオンにする

早期アクセス プログラムへの参加が承認されると、Google Play Console の [Integrity API] ページに新しいオプションが表示され、Play Integrity API レスポンスにアカウント アクティビティを含められるようになります。準備ができたら、Google Play Console でアカウント アクティビティをオンにします。

  1. Google Play Console にログインします。
  2. アカウント アクティビティを使用するアプリを選択します。
  3. 左側のメニューの [リリース] セクションで、[アプリの完全性] に移動します。
  4. [Play Integrity API] の横にある [設定] をクリックします。
  5. そのページの [レスポンス] セクションで、[アカウント アクティビティ] の横にある [オンにする] をクリックします。
  6. 表示されたウィンドウで [オンにする] をクリックします。

アカウント アクティビティのオン / オフを切り替えると、Google Play Console で設定した Play Integrity API テスト レスポンスがすべて削除されるため、再度作成する必要があります。

ステップ 4: Integrity API をアプリとアプリのバックエンド サーバーに統合する

まだ統合していない場合は、ドキュメントを参照してアプリとアプリのバックエンド サーバーに Play Integrity API を統合します。

ステップ 5: アカウント アクティビティを使用する

アカウント アクティビティを有効にすると、Play Integrity API ペイロードaccountDetails フィールドに、デバイス上のユーザー アカウントに関連付けられたアクティビティを示す、新しいアカウント アクティビティ シグナルが設定されます。

accountDetails: {
  // Represents the licensing status of the user session.
  // This field can be LICENSED, UNLICENSED, or UNEVALUATED.
  appLicensingVerdict: "LICENSED"

  // Represents the activity level associated with the user accounts on
  // the device of the user session.
  accountActivity: {
     // This field can be UNEVALUATED, UNUSUAL,
     // UNKNOWN, TYPICAL_BASIC, TYPICAL_STRONG
     activityLevel: "UNUSUAL"
  }
}

accountActivity は次のいずれかの値を取ります。

UNUSUAL
Google Play ストアのアクティビティが、デバイス上のユーザー アカウントの少なくとも 1 つに関して通常と異なる。
UNKNOWN
デバイス上のユーザー アカウントに関して評価するだけのストア アクティビティが Google Play に存在しない。アカウントが新しいか、Google Play でのアクティビティがまだ少ない可能性があります。
TYPICAL (BASIC)
Google Play ストア アクティビティが、デバイス上のユーザー アカウントによる通常のものである。
TYPICAL (STRONG)
: Google Play ストア アクティビティが、デバイス上のユーザー アカウントによる通常のものであり、複製が困難なシグナルを送信している。
UNEVALUATED

要件が満たされていないため、アカウント アクティビティが評価されなかった。

次のような原因が考えられます。

  • デバイスの信頼性が十分でない。
  • デバイスにインストールされているアプリのバージョンが Google Play に認識されていない。
  • ユーザーが Google Play にログインしていない。
  • ユーザーがアプリにアクセスするために必要なライセンスを持っていない。

デバイス上のユーザー アカウントに通常と異なるアカウント アクティビティがあるかどうかを確認するには、次のコード スニペットに示すように、accountActivity.activityLevel が想定どおりかどうかを検証します。

Kotlin

val requestDetails = JSONObject(payload).getJSONObject("accountDetails")
val accountActivity = requestDetails.getJSONObject("accountActivity")
val activityLevel = accountActivity.getString("activityLevel")

if (activityLevel == "UNUSUAL") {
    // One of the accounts is UNUSUAL! Be careful.
}

Java

JSONObject requestDetails =
    new JSONObject(payload).getJSONObject("accountDetails");
JSONObject accountActivity =
    new JSONObject(requestDetails).getJSONObject("accountActivity");
String activityLevel = accountActivity.getString("activityLevel");

if (activityLevel == "UNUSUAL") {
    // One of the accounts is UNUSUAL! Be careful.
}

ステップ 6: アカウント アクティビティとの統合をテストする

Play Integrity API で提供されているテスト機能を使用すれば、Play Integrity API から取得したアカウント アクティビティ レベルがアプリにどのように作用するのか評価するためのテストを作成できます。このテスト機能の使用方法については、Google Play Console ヘルプセンターをご覧ください。

ステップ 7: Google Play に早期アクセス プログラムのフィードバックを提供する

早期アクセス プログラムへの参加者には、アカウント アクティビティについてのフィードバックをお願いしています。フィードバックは、integrity-api-eap@google.com までメールで送信してください。デベロッパー リサーチチームより、インタビューの日程調整に関してご連絡差し上げます。Google では次のことを把握したいと考えています。

  • アカウント アクティビティ レベルとアプリやゲームの既知の不正なアカウントとの相関関係がどれくらい正確か。
  • アカウント アクティビティと他の Play Integrity API 判定結果に関して、ユーザー層の分布は、Google の想定と一致しているか。
  • アカウント アクティビティや他の Play Integrity API 判定結果に基づいて、デベロッパーが解決しようとしている不正使用問題にはどのようなものがあるか。
  • アカウント アクティビティや他の Play Integrity API 判定結果に基づいて、デベロッパーがどのような機能を変更しようとしているか。

Google Play の完全性に関するその他のツール

不正使用対策戦略の一環として、以下の完全性保護対策を実施することを検討してください。

  • 信頼できないデバイスが、Google Play でアプリを見つけてインストールできないように除外する。これにより、ユーザーが他の手段(サイドローディングなど)でアプリを入手してインストールすることができなくなるわけではありません。
  • Automatic Integrity Protection を使用して、コードに変更を加えることなく、不正な改変や再配布を防ぐ。現在この機能にアクセスできない場合は、担当のパートナー マネージャーにお問い合わせください。
  • インストール時整合性保護をリクエストする(早期アクセス プログラム)。Google Play 開発者サービスを搭載した Android 11 以降のデバイスに、バージョンが不明なアプリや改変されたバージョンのアプリがインストールされないように保護できます。