Android APK Authentication API

身份验证可在三种不同的环境中进行:

  • 付款集成商的 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

Activity.RESULT_OK
身份验证成功。
Activity.RESULT_CANCELED 用户手动取消了该流程,并且应取消该流程。
Activity.RESULT_FIRST_USER 身份验证因严重原因而失败,应取消该流程。IE 服务器在登录时返回 HTTP 500 响应。

花絮

字段
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 也必须遵循此模式。如果不是,就可能无法正常向第三方开发者购买。