身份验证可在三种不同的环境中进行:
- 付款集成商的 Android 应用
- 付款集成商的移动网站
- 付款集成商的桌面版网站
无论流程如何,Google 都会将用户互动操作交给付款服务 集成商的软件付款集成商可以选择向用户显示 或者如果已有相应的数据,则直接返回。 所有流程都会导致集成商生成 AuthenticationResponse。这个 签名并发回给 Google。
移动网站和桌面版网站必须遵循 WebRedirect Authentication API 而 Android 应用流程必须遵循 Android 身份验证 API 规范。
集成商应实现 Android APK 解决方案来验证用户身份。 此身份验证是一种不同的模态,但与 由 Web 提供的 身份验证。
用户通过 Android 设备向付款集成商进行身份验证 活动记录。 系统会在账号关联期间调用身份验证 intent, 用户面临的挑战为防止 Android 在 则集成商需要将 活动主题中的后续活动
<item name="android:windowIsTranslucent">true</item>
方法定义
intent 需要具有以下属性:
方法属性 | |
---|---|
操作 |
com.google.android.payments.standard.AUTHENTICATE_V1 |
类别 | android.intent.category.DEFAULT |
请求
字段 | |
---|---|
gspAuthenticationRequest
|
AuthenticationRequest
身份验证请求。 |
gspAssociationId
|
string
如果存在,则包含集成商用于查找 提供凭据。如果不存在 用户可以更改账号标识。 |
响应
用户完成身份验证后,您的应用需要发送一个结果 返回给 Google。如果身份验证成功,请创建一个 intent 并添加 作为 extra 发送经过加密编码的 gspAuthenticationResponse。 接下来,将 activity 结果设置为相应的结果代码。
...
result.setExtra("gspAuthenticationResponse", gspAuthenticationResponse);
setResult(Activity.RESULT_OK, result);
...
finish();
结果
字段 | |||||||
---|---|---|---|---|---|---|---|
条结果 |
int
|
Extra
字段 | |
---|---|
gspAuthenticationResponse |
AuthenticationResponse
身份验证响应。此编码值不得超过 1KB。 |
其他 activity 要求
支持上述 AUTHENTICATE_V1
操作的 activity 必须
还要检查该 API 的调用方是否仅来自由 Google 签名的应用。
这有助于防止其他应用尝试调用您的 activity
检索身份令牌。这可以通过使用
StandardPaymentUtils.verifyCallingActivityIsGoogleSigned
super.onCreate
之后,
活动
实施。
示例如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);
....
}
在 authenticate
数据流中调用的所有 activity 都必须提供一个 activity
主题包含 windowIsTranslucent=true
。必须使用
AndroidManifest android:theme 属性,并且未使用 Context.setTheme()
。
程序化地无法为窗口正确设置主题
半透明性。Google 将强制要求启动的首个 activity 遵循此
模式,但同时启动的所有子 activity 也必须遵循此
模式。如果不能,则可能无法从第三方开发者处购买。