用于快速订阅的一键账户信息共享功能
借助一键账户信息共享功能,客户可以轻松与您的应用共享其亚马逊账户信息,而不必手动输入详细信息。此功能可以改善客户的注册体验。按照本指南操作,可在您的应用中设置一键账户信息共享功能。
更新应用清单
要向亚马逊应用商店表明您的应用支持用于快速订阅的一键账户信息共享功能,请使用以下代码更新您的应用清单。
<uses-feature android:name="amazon.lwa.quicksignup.supported"/>
配置安全配置文件
为了让一键账户信息共享功能正常运行,必须为应用设置安全配置文件。安全配置文件必不可少,因为它让亚马逊能够安全地与您共享客户数据,还能让您自动创建账户并登录用户。
安全配置文件将亚马逊数据(包括安全凭证)与一个或多个应用相关联。例如,如果您有两个应用(如“我的游戏 - 免费”和“我的游戏 - 高清”),那么这两个应用可以通过使用相同的安全配置文件来共享数据。命名安全配置文件时,请采用有助于识别您的应用或应用系列的方式。有关更多详细信息,请参阅安全配置文件。
为应用配置安全配置文件
- 前往开发者控制台主信息页面并登录您的账户。
- 选择应用与服务 > 我的应用程序,然后选择您的应用。
- 选择应用服务,然后滚动到安全配置文件部分。
- 单击选择现有安全配置文件或新建以展开相关选项。
-
通过下拉列表选择要映射到该应用的安全配置文件,然后单击启用安全配置文件。
或者,也可通过单击创建安全配置文件来创建新的安全配置文件。如果要创建新的安全配置文件,请务必填写所有必填字段,然后单击保存。
成功附加安全配置文件后,安全配置文件部分将显示一条成功消息,并显示所附配置文件的详细信息。
更新您的应用代码
要为您的应用添加一键账户信息共享功能,请按照以下步骤更新应用代码。
步骤1: 实现并注册UserProfileAccessListener
在onCreate()
方法中实现并注册UserProfileAccessListener
接口的实例,以便应用侦听并处理由ResponseReceiver
触发的回调。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//...
// 传递要注册的PurchasingListener的引用
PurchasingService.registerListener(this.getApplicationContext(), purchasingListener);
// 传递要注册的UserProfileAccessListener的引用
PurchasingService.registerUserProfileAccessListener(this.getApplicationContext(), userProfileAccessListener);
//...
}
步骤2: 实现getUserData更改
在快速订阅流程中,客户可能已经同意共享其信息。您可以通过实现以下更改,在应用启动期间获取同意数据。
在应用主要活动的onResume()
方法中:
- 创建新的
UserDataRequest
对象并将其配置成请求客户的配置文件同意状态信息。要将UserDataRequest
对象配置成请求同意状态,请将其setFetchUserProfileAccessConsentStatus()
方法设置为true。 - 调用
getUserData()
方法并将配置的UserDataRequest
对象传递给该方法。
以下示例展示了如何构建UserDataRequest
对象并将其传递给getUserData()
。
@Override
protected void onResume()
{
super.onResume();
//...
// 在isLoggedIn() 中实现逻辑以识别客户的登录状态
if (!isLoggedIn()) {
PurchasingService.getUserData(UserDataRequest.newBuilder().setFetchUserProfileAccessConsentStatus(true).build());
}
//...
}
实现onUserDataResponse()
回调方法以获取UserDataResponse
对象,该对象包含客户同意数据。以下代码展示了如何处理从UserDataResponse
对象收到的同意数据。
@Override
public void onUserDataResponse(final UserDataResponse response) {
UserDataResponse.RequestStatus status = response.getRequestStatus();
switch (status) {
case SUCCESSFUL:
if (UserProfileAccessConsentStatus.CONSENTED.equals(response.getUserData().getUserProfileAccessConsentStatus())) {
// 获取授权代码
PurchasingService.requestUserProfileAccess();
}
break;
case FAILED:
case NOT_SUPPORTED:
// 优雅地失败。
break;
}
}
UserData
对象的UserProfileAccessConsentStatus
字段可以为以下值之一:
CONSENTED
: 表明客户已经表示同意。您可以调用requestUserProfileAccess()
方法,并使用响应对象中的授权代码更新您的服务器。有关如何提取授权代码的说明,请参阅提取授权代码。UNAVAILABLE
: 表明同意令牌不可用或已过期。在这种情况下,请启动应用注册流程。在应用注册流程中,使用下一节更新您的应用注册流程中的详细信息来请求同意。
步骤3: 更新您的应用注册流程
在应用注册流程中,调用requestUserProfileAccess()
方法。此操作会启动同意屏幕,您可以在其中请求用户同意并检索授权代码。
以下示例代码展示了如何使用requestUserProfileAccess()
方法调用同意屏幕。
@Override
public void invokeConsentScreen() {
// 启动客户数据共享同意屏幕
PurchasingService.requestUserProfileAccess();
return;
}
现在,您可以提取用户配置文件访问授权代码,如下一节所述。
步骤4: 提取授权代码
客户表示同意后,您必须提取用户配置文件访问授权代码。在请求获取访问令牌API时需要此授权代码。以下代码展示了如何从UserProfileAccessResponse
对象提取授权代码。
@Override
public void onUserProfileAccessResponse(final UserProfileAccessResponse response) {
UserProfileAccessResponse.RequestStatus status = response.getRequestStatus();
switch (status) {
case SUCCESSFUL:
// 从响应中提取身份验证代码
final String userProfileAccessAuthCode = response.getUserProfileAccessAuthCode();
// 此处应使用userProfileAccessAuthCode更新您的服务,
// 从而进一步与亚马逊应用商店IAP REST API交互以获取访问令牌和客户配置文件。
passAuthCodeToBackend(userProfileAccessAuthCode);
break;
case FAILED:
case NOT_SUPPORTED:
// 优雅地失败。
break;
}
}
然后,使用亚马逊应用商店应用内购买 (IAP) REST API来获取访问令牌和客户配置文件。有了客户配置文件后,就可以使用该信息在系统中创建账户。以下各节描述了亚马逊应用商店IAP REST API。
获取访问令牌API
亚马逊应用商店IAP提供了获取访问令牌REST API,用于获取访问令牌。本节介绍相应的请求、响应和错误。
访问令牌请求
应用收到包含有效授权代码的requestUserProfileAccess()
的响应后,可使用该授权代码获取访问令牌。有了访问令牌,客户端就可以读取客户配置文件。
获取访问令牌API必须使用POST请求而不是GET请求,如下例所示。
POST https://appstore-sdk.amazon.com/version/1.0/auth/o2/token?
grant_type=authorization_code
&code=SplxlOBezQQYbYS6WxSbIA
&client_id=foodev
&client_secret=foosecret
下表介绍访问令牌请求参数。
请求参数 | 描述 |
---|---|
grant_type |
必需。请求的访问权限授予类型。必须为authorization_code 。 |
code |
必需。requestUserProfileAccess() 方法返回的授权代码。 |
client_id |
必需。客户端标识符。 |
client_secret |
必需。注册过程中分配给客户端的密钥值。由于网页无法可靠地存储客户端密钥,请勿在基于浏览器的应用中使用客户端密钥。 |
访问令牌响应
要访问客户数据,必须向亚马逊应用商店IAP获取用户配置文件API提供访问令牌。访问令牌是长度在350个字符或以上的字母数字代码,最大大小为2048字节。访问令牌以字符Atza|
开头。
响应参数使用application/json
媒体类型进行编码。有关更多信息,请参阅RFC4627。以下是来自访问令牌请求的示例响应。
{
"access_token":"Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"Atzr|IQEBLzAtAhRPpMJxdwVz2Nn6f2y-tpJX2DeX..."
}
下表介绍访问令牌响应参数。
响应参数 | 描述 |
---|---|
access_token |
用户账户的访问令牌。最大不超过2048字节。 |
token_type |
返回的令牌类型。值为bearer 。 |
expires_in |
访问令牌的有效秒数。 |
refresh_token |
刷新令牌,可用于获取新的访问令牌。最大不超过2048字节。 |
访问令牌是不记名令牌,其他客户端可以使用。有关更多信息,请参阅OAuth 2.0授权框架: 不记名令牌的使用(仅提供英文版)。
访问令牌错误
对于某些错误,授权服务可能会返回HTTP 401 (Unauthorized)
(HTTP 401 [未授权])状态代码。这包括以下情况:客户端在授权标头中传递了client_id
和client_secret
值,但无法对客户端进行身份验证。
下表介绍失败响应中的错误参数。
错误参数 | 描述 |
---|---|
error |
包含错误代码值的ASCII错误代码。 |
error_description |
人类可读的ASCII字符串,含有错误相关信息,对客户端开发者非常有用。 |
request_id |
与您的访问令牌请求关联的ID。 |
返回的error
值中可能包含以下错误代码。
获取用户配置文件API
亚马逊应用商店IAP提供了获取用户配置文件REST API,用于获取用户配置文件数据。本节介绍相应的请求、响应和错误。
用户配置文件请求
要访问授权的用户配置文件数据,请使用获取用户配置文件API将访问令牌提交至亚马逊应用商店。获取用户配置文件API使用HTTPS GET请求,并将从获取访问令牌API收到的访问令牌作为其唯一参数。
下例展示了获取用户配置文件数据的GET请求。
GET https://appstore-sdk.amazon.com/version/1.0/user/profile?
access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
请求参数 | 描述 |
---|---|
access_token |
必需。从获取访问令牌API收到的访问令牌。 |
用户配置文件响应
如果访问令牌有效,则会在HTTP响应中收到JSON形式的客户配置文件数据,如下例所示。
{
"user_id": "amznl.account.K2LI23KL2LK2",
"email":"mhashimoto-04@plaxo.com",
"name" :"Mork Hashimoto",
"postal_code": "98052"
}
如果在履行您的配置文件请求时出现问题,则会收到HTTP错误,并且可能会收到包含更多信息的JSON有效负载,如下例所示。
{
"error": "machine-readable error code",
"error_description": "human-readable error description",
"request_id": "bef0c2f8-e292-4l96-8c95-8833fbd559df"
}
下表介绍在用户配置文件请求失败时可能返回的错误代码。
账户设置的最佳实践
请遵循以下客户账户设置的最佳实践。
- 如果用户表示同意,并且您可以检索授权代码,请执行以下操作:
- 从亚马逊应用商店IAP获取用户配置文件API获取用户信息。使用此信息来创建采用临时密码的登录账户。无需向客户请求重置密码或提供其他详细信息,即可让客户登录应用。
- 之后,通过电子邮件要求客户重置密码。
- 如果用户表示同意,但其信息与贵司系统中的现有账户相匹配,则可以引导用户进入应用的默认登录流程。
- 如果用户拒绝表示同意,请为客户提供默认的应用注册体验。
相关主题
Last updated: 2025年8月13日