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