アプリ間の検証

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

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

アプリがユーザーのデバイスにインストールされていない場合は、Google ウォレットによって 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 ウォレットからインテントを受信する
  2. カード所有者を認証する
  3. トークンを有効にする
  4. activity.setResult(RESULT_OK, ...) を呼び出して、ユーザーを Google ウォレットに戻す

インテントの受信

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

アプリ マニフェスト

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

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

<activity android:name="AppToAppActivity">
  <!-- This activity handles App To App ACTIVATE_TOKEN action -->
  <intent-filter>
    <action android:name="com.example.bank.action.ACTIVATE_TOKEN"/>
    <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 Wallet
// 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 ウォレットに戻すときに、有効化の成否を Google ウォレットに通知します。API を使用してトークンを有効にする方法については、TSP 技術ドキュメントをご覧ください。

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

a2a-activation-using-tsp-api

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

Intent resultIntent = new Intent();

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

activity.setResult(RESULT_OK, resultIntent);

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

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

a2a-activation-using-activation-code

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

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 ウォレットであることを確認します。


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

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

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

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