アプリ間の検証

カード発行会社は、トークンをプロビジョニングする際に要認証 ID&V 本人確認を完了するためのオプションとして、アプリ間の検証を提供できます。アプリ間の検証は TSP を介して構成されます。Google Pay チームによる構成は必要ありません。このページでは、Google が TSP から受け取ったプロビジョニング情報に基づいて Google Pay アプリを操作する方法について説明します。

ユーザーがアプリ間の検証機能を有効にすると、Google Pay は TSP 構成を介してカード発行会社が指定した Android アクティビティを呼び出し、カード発行会社のアプリを呼び出します。ユーザーが本人確認を行うと、カード発行会社のアプリは Google Pay に制御を戻し、プロビジョニング フローを完了します。

アプリがユーザーのデバイスにインストールされていない場合は、Google Pay によって Play ストアのアプリのページが表示されます。カード発行会社のアプリをインストールした後、ユーザーはフローを再起動する必要があります。

アプリ間の検証をサポートするには、次のことを行う必要があります。

以下のフローは、アプリ間の検証でユーザーが行う操作を示しています。

a2a-sample-flow

TSP の設定

カード発行会社は、以下のパラメータを TSP に提供する必要があります。Google Pay は、トークン化プロセスでこれらのパラメータを TSP から受け取り、アプリを呼び出します。

パラメータ 説明
パッケージ名 com.example.myapp パッケージ名(applicationId)は、インテントを呼び出してアプリ間フローを開始する際に Google Pay が呼び出すカード発行会社のモバイルアプリを表します。アプリがカード所有者のモバイル デバイスにインストールされていない場合は、Google Play ストアからインストールするように指示されます。
アクション com.example.bank.action.ACTIVATE_TOKEN アプリを呼び出すときに、明示的インテントを作成します。アクションは、パッケージ名を含む完全修飾名で指定する必要があります。また、トークンの有効化で使用するため、アクションは具体的に指定する必要があります。
追加のテキスト このパラメータは、インテントに含まれる追加データを渡すために使用します。通常は JSON の構文で、Base64 で暗号化されています。この文字列の値を Google が読み取ることはできません。また、この値は標準フィールド EXTRA_TEXT でそのまま使用されます。

詳しくは、Android でのインテントの送信Android でのインテントの許可についてのドキュメントをご覧ください。

アプリ開発

ユーザーが身元確認にアプリ間メソッドを選択した場合、カード発行会社のアプリは次の処理を行う必要があります。

  1. Google Pay からインテントを受信する
  2. カード所有者を認証する
  3. トークンを有効にする
  4. activity.setResult(RESULT_OK, ...) を呼び出して、ユーザーを Google Pay に戻す

インテントの受信

ユーザーがカード発行会社のアプリを使用して身元確認を行うよう選択すると、Google Pay は、パッケージ名、アクション、TSP を通じて提供される EXTRA_TEXT を使用してアプリを呼び出します。この呼び出しから Intent を受信するには、アプリ マニフェストを更新し、アクティビティを作成してトークンを有効にする必要があります。

アプリ マニフェスト

カード発行会社は、Action を処理するようにモバイルアプリの Android マニフェストを更新し、アプリ間フローで Google Pay がアプリを呼び出せるようにする必要があります。

アプリ マニフェストが更新されると、Google Pay はアプリを呼び出し、アプリでトークンの有効化アクティビティを開始できるようになります。

<activity android:name="AppToAppActivity">
  <!-- This activity handles APP_TO_APP actions -->
  <intent-filter>
    <action android:name="com.example.bank.action.APP_TO_APP"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
</activity>

Android インテントの詳細については、Android デベロッパー向けドキュメントAndroid デベロッパー向けリファレンスをご覧ください。

トークンの有効化アクティビティ

有効化を完了するには、Intent で渡された有効化パラメータを使用してアクティビティを開始し、トークンの有効化を完了する必要があります。次のサンプルコードは、IntentEXTRA_TEXT からデータにアクセスする方法を示しています。

/*
 * Within issuer's mobile app AppToAppActivity
 */

// Validate caller is Google Pay
// see Security Considerations section below

String data = getIntent().getStringExtra(Intent.EXTRA_TEXT);

// Parse base64 to retrieve the activation parameters as a JSON object in a String
String decodedData = new String(base64.decodeBase64(data));

// Read the JSON string
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(decodedData);

// Extract the activation parameters
String tokenRef = node.get("param0").asText());
String tokenParam = node.get("param1").asText());
// etc.

// Authenticate the user
...

トークンの有効化

トークンを有効にするには、次の 2 つの方法があります。

TSP API を使用した有効化

カード会社のモバイルアプリが TSP API を使用してトークンを有効にすると、カード発行会社のアプリは Intent を受け取り、カード所有者を認証し、TSP の API を呼び出してトークンを有効にします。このフローの最後で、ユーザーを Google Pay に戻すときに、有効化の成否を Google Pay に通知します。API を使用してトークンを有効にする方法については、TSP 技術ドキュメントをご覧ください。

TSP API を使用して有効にする場合、アプリは Google Pay にコードを返しません。Google Pay から見ると、トークンの有効化は「帯域外」で行われます。

a2a-activation-using-tsp-api

以下のコードサンプルは、TSP API で有効化プロセスが完了した後にユーザーを Google Pay に戻す方法を示しています。

Intent resultIntent = new Intent();

resultIntent.putExtra("BANKING_APP_ACTIVATION_RESPONSE", "approved");
// or "declined", or "failure"

activity.setResult(RESULT_OK, resultIntent);

アクティベーション コード

カード発行会社のモバイルアプリが TSP からアクティベーション コードを取得して Google Pay に通知する際、発行会社のアプリはインテント結果に基づきアクティベーション コードを Google Pay に通知します。アクティベーション コード(認証コードまたは TAV(Tokenization Authentication Value)とも呼びます)の生成方法については、TSP にお問い合わせください。

a2a-activation-using-activation-code

以下のコードサンプルは、アクティベーション コードと一緒にユーザーを Google Pay に戻す方法を示しています。

Intent resultIntent = new Intent();

resultIntent.putExtra("BANKING_APP_ACTIVATION_RESPONSE", "approved");
// or "declined", or "failure"

// if "approved", also pass the code
resultIntent.putExtra("BANKING_APP_ACTIVATION_CODE", activationCode);

activity.setResult(RESULT_OK, resultIntent);

モバイルアプリのセキュリティ

カード会社のモバイルアプリは、特にインテントの使用について、Android セキュリティ モデルを遵守する必要があります。インテントを受け取ったら、以下に示すように Activity.getCallingPackage を使用して、アクティビティが実際に Google Pay であることを確認します。


// Validate caller is Google Pay (Google Play Services)
if ("com.google.android.gms".equals(getCallingPackage())) {
    // Proceed with token activation
    ...
} else {
    // Abort token activation: handle error
    ...
}

モバイルアプリで次のことを行う必要があります。

  • カード所有者を認証する
  • すべてのデジタル化リクエストにカード所有者の同意を得る
  • デジタル化が正しいカード所有者のアカウントと関連して行われていることを確認する

トークン有効化については、TSP 技術ドキュメントをご覧ください。Intents送信許可受け取りを行う方法については、Android のデベロッパー向けサイトをご確認ください。