Android APK Authentication API

認証は、次の 3 つの異なる環境で行うことができます。

  • 決済インテグレータの Android アプリ
  • 決済代行業者のモバイルサイト
  • 決済代行業者のパソコン用ウェブサイト

フローに関係なく、Google はユーザー操作を決済インテグレータのソフトウェアに渡します。決済インテグレータは、ユーザーにインターフェースを表示するか、すでに適切なデータがある場合はすぐに戻るかを選択できます。どのフローでも、インテグレータは AuthenticationResponse を生成します。このレスポンスは署名され、Google に返されます。

モバイルサイトとパソコンサイトは WebRedirect Authentication API 仕様に準拠し、Android アプリのフローは Android Authentication API 仕様に準拠している必要があります。

インテグレータは、ユーザーを認証するために Android APK ソリューションを実装する必要があります。この認証は別のモダリティですが、ウェブ認証で提供される認証と同じ目的です。

ユーザーは Android アクティビティを介して決済インテグレータの認証を行います。認証インテントは、アカウントの関連付け中に、およびユーザーの本人確認のために呼び出されます。認証中に Android がバックグラウンドで Play を終了しないようにするには、インテグレータがアクティビティ テーマに以下を含める必要があります。

<item name="android:windowIsTranslucent">true</item>

メソッド定義

インテントには次のプロパティが必要です。

メソッドのプロパティ
行動 com.google.android.payments.standard.AUTHENTICATE_V1
カテゴリ android.intent.category.DEFAULT

リクエスト

フィールド
gspAuthenticationRequest AuthenticationRequest

認証リクエスト。

gspAssociationId string

存在する場合、インテグレータがチャレンジ対象のユーザーの認証情報を検索する際に使用する識別子が含まれます。このフィールドが存在しない場合、ユーザーはアカウント ID を変更できます。

レスポンス

ユーザーが認証が完了したら、アプリケーションから Google に結果インテントを送信する必要があります。認証が成功したら、インテントを作成し、暗号化されたエンコードされた gspAuthenticationResponse をエクストラとして追加します。次に、アクティビティの結果を適切な結果コードに設定します。

...
result.setExtra("gspAuthenticationResponse", gspAuthenticationResponse);
setResult(Activity.RESULT_OK, result);
...
finish();

結果

フィールド
結果 int

Activity.RESULT_OK
認証に成功しました。
Activity.RESULT_CANCELED ユーザーが手動でフローをキャンセルしたため、フローを中止する必要があります。
Activity.RESULT_FIRST_USER 致命的な理由で認証に失敗したため、フローを中止する必要があります。IE サーバーがログイン時に HTTP 500 レスポンスを返しました。

その他

フィールド
gspAuthenticationResponse AuthenticationResponse

認証レスポンス。このエンコードされた値は 1 KB を超えないようにしてください。

その他のアクティビティ要件

また、上記の AUTHENTICATE_V1 アクションをサポートするアクティビティは、API の呼び出し元が Google によって署名されたアプリのみからのものかどうかを確認する必要もあります。これにより、他のアプリがアクティビティを呼び出して ID トークンを取得することを防止できます。これを行うには、Activity の実装内の super.onCreate の直後にある StandardPaymentUtils.verifyCallingActivityIsGoogleSigned を使用します。

サンプル:


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);

  ....
}

authenticate フロー内で呼び出されるアクティビティはすべて、windowIsTranslucent=true を持つアクティビティ テーマを提供する必要があります。これを行うには、Context.setTheme() ではなく、AndroidManifest の android:theme 属性を使用する必要があります。プログラム的にテーマを設定しても、ウィンドウの半透明度が正しく機能しません。Google では、最初に起動されるアクティビティがこのパターンに従うよう強制しますが、起動されるサブアクティビティもこのパターンに従う必要があります。対応していない場合、サードパーティのデベロッパーからの購入で動作しない可能性があります。