認証は、次の 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
|
その他
フィールド | |
---|---|
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 では、最初に起動されるアクティビティがこのパターンに従うよう強制しますが、起動されるサブアクティビティもこのパターンに従う必要があります。対応していない場合、サードパーティのデベロッパーからの購入で動作しない可能性があります。