开发者控制台

集成一键账户信息共享功能

集成一键账户信息共享功能

设置一键账户信息共享功能,是快速订阅流程中的重要步骤。借助一键账户信息共享功能,客户可以轻松与您的应用共享其亚马逊账户信息,而不必手动输入详细信息。此功能可以改善客户的注册体验。按照本指南操作,可在您的应用中设置一键账户信息共享功能。

更新应用清单

要向亚马逊应用商店表明您的应用支持一键账户信息共享功能,请使用以下代码更新您的应用清单。

<uses-feature android:name="amazon.lwa.quicksignup.supported"/>

实现getUserData更改

要确定客户是否明确同意与您的应用共享其亚马逊账户详细信息,您必须在应用初始化期间实现以下流程。

在应用主要活动的onCreate() 方法中:

以下示例展示了如何构建UserDataRequest对象并将其传递给getUserData()

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    
    //...
    
    // 传递要注册的PurchasingListener的引用
    PurchasingService.registerListener(this.getApplicationContext(), purchasingListener);
    
    // 传递要注册的UserProfileAccessListener的引用
    PurchasingService.registerUserProfileAccessListener(this.getApplicationContext(), userProfileAccessListener);
     
    // 在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。如果客户不同意,或者同意令牌已过期,则UserProfileAccessConsentStatus的状态为UNAVAILABLE

如果客户表示同意,则调用requestUserProfileAccess() 方法,并使用响应对象中的授权代码更新您的服务器。然后,使用Appstore SDK提供的REST API,获取访问令牌和客户配置文件。使用共享的用户信息,在您的系统中创建账户。

以下代码展示了如何从UserProfileAccessResponse对象提取用户配置文件访问授权代码。

@Override
public void onUserProfileAccessResponse(final UserProfileAccessResponse response) {
    
    UserProfileAccessResponse.RequestStatus status = response.getRequestStatus();
    
    switch (status) {
        case SUCCESSFUL:
            // 此处应使用userProfileAccessAuthCode更新您的服务,
            // 进一步与Appstore SDK REST API交互以获得访问令牌和客户配置文件。
            final String userProfileAccessAuthCode = response.getUserProfileAccessAuthCode();
            break;
    
        case FAILED:
        case NOT_SUPPORTED:
            // 优雅地失败。
            break;
    } 
}

如果客户不同意,请显示您自己的登录屏幕。然后,客户可以使用键盘输入凭证或登录您的应用。

获取访问令牌API

Appstore SDK提供了获取访问令牌REST API,用于获取访问令牌。本节介绍相应的请求、响应和错误。

访问令牌请求

应用收到包含有效授权代码的requestUserProfileAccess() 的响应后,可使用该授权代码获取访问令牌。有了访问令牌,客户端就可以读取客户配置文件。

获取访问令牌API必须使用POST请求而不是GET请求,如下例所示。

POST http://appstore-sdk.haqm.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 必需。注册过程中分配给客户端的密钥值。由于网页无法可靠地存储客户端密钥,请勿在基于浏览器的应用中使用客户端密钥。

访问令牌响应

要访问客户数据,必须向Appstore SDK获取用户配置文件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_idclient_secret值,但无法对客户端进行身份验证。

下表介绍失败响应中的错误参数。

访问令牌错误响应参数
错误参数 描述
error 包含错误代码值的ASCII错误代码。
error_description 人类可读的ASCII字符串,含有错误相关信息,对客户端开发者非常有用。
request_id 与您的访问令牌请求关联的ID。

返回的error值中可能包含以下错误代码。

访问令牌错误响应代码
错误代码 描述
invalid_request 请求中缺少必要参数、具有无效值,或格式不正确。
invalid_client 客户端身份验证失败。该参数用于授权服务不返回HTTP 401 (Unauthorized) 状态代码的情况。
invalid_grant 授权代码无效、已过期、已撤销,或已发放至另一client_id
unauthorized_client 客户端无权使用授权代码。可能因code_verifier无效而导致。
unsupported_grant_type 客户端指定了错误的token_type
ServerError 服务器运行错误。

获取用户配置文件API

Appstore SDK提供了获取用户配置文件REST API,用于获取用户配置文件数据。本节介绍相应的请求、响应和错误。

用户配置文件请求

要访问授权的用户配置文件数据,请使用获取用户配置文件API将访问令牌提交至亚马逊应用商店。获取用户配置文件API使用HTTPS GET请求,并将从获取访问令牌API收到的访问令牌作为其唯一参数。

下例展示了获取用户配置文件数据的GET请求。

GET http://appstore-sdk.haqm.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"
}

下表介绍在用户配置文件请求失败时可能返回的错误代码。

用户配置文件错误响应代码
HTTP状态码 状态消息 描述
200 Success 请求成功。
400 invalid_request 请求缺少必需的参数或存在格式错误。
400 invalid_token 提供的访问令牌已过期、已撤销、格式错误或由于其他原因无效。
401 insufficient_scope 提供的访问令牌没有所需范围的访问权限。
500 ServerError 服务器运行错误。

账户设置的最佳实践

请遵循以下客户账户设置的最佳实践。

  • 如果UserProfileAccessConsentStatusgetUserData() 响应中的值为CONSENTED,请执行以下操作:
    • 从Appstore SDK获取用户配置文件API中获取用户信息。使用此信息来创建采用临时密码的登录账户。无需向客户请求重置密码或提供其他详细信息,即可让客户登录应用。
    • 之后,通过电子邮件要求客户重置密码。
  • 如果UserProfileAccessConsentStatus的值为UNAVAILABLE,请为客户使用默认的应用注册体验。

Last updated: 2025年4月7日