集成一键账户信息共享功能
设置一键账户信息共享功能,是快速订阅流程中的重要步骤。借助一键账户信息共享功能,客户可以轻松与您的应用共享其亚马逊账户信息,而不必手动输入详细信息。此功能可以改善客户的注册体验。按照本指南操作,可在您的应用中设置一键账户信息共享功能。
实现getUserData更改
要确定客户是否已同意共享其亚马逊账户详细信息,请在应用主屏幕组件中调用useIapUserData() 挂钩方法,同时将UserDataRequest对象的fetchUserProfileAccessConsentStatus标记设置为true。
以下示例展示了在客户已同意获取其详细信息的情况下,如何构建UserDataRequest对象并使用useIapUserData() 挂钩调用该对象。
// 调用getUserData。
const { iapUserDataLoading, iapUserDataError, iapUserData } = useIapUserData({fetchUserProfileAccessConsentStatus: true}); 
// ...
// 加载UserData后,调用处理程序
   if (!iapUserDataLoading && !iapUserDataError) {
      this.handleUserDataResponse(iapUserData);
   }
// 处理getUserData响应。
public static handleUserDataResponse = (response: UserDataResponse): UserData => {
      const responseCode = response.responseCode;
      switch (responseCode) {
         case UserDataResponseCode.SUCCESSFUL:
            Logger.debug(`GetUserDataStatus: 成功`);
            Logger.debug(
               `GetUserDataResponse: UserId (${response.userData.userId}), Marketplace (${response.userData.marketplace}), ConsentStatus (${response.userData.userProfileAccessConsentStatus})`
            );
            break;
         case UserDataResponseCode.FAILED:
         case UserDataResponseCode.NOT_SUPPORTED:
            // 优雅地失败。
            break;
      }
      return response.userData; // 对于FAILED和NOT_SUPPORTED的情况返回null
   };
如果客户已表示同意,则UserData对象的userProfileAccessConsentStatus状态为CONSENTED。如果客户未表示同意,或者同意令牌已过期,则userProfileAccessConsentStatus的状态为UNAVAILABLE。
以下代码展示了如何处理从UserDataResponse对象收到的同意数据。
// 处理getUserData响应。
public static handleUserDataResponse = (response: UserDataResponse): UserData => {
    const responseCode = response.responseCode;
    switch (responseCode) {
        case UserDataResponseCode.SUCCESSFUL:
            Logger.debug(`GetUserDataStatus: 成功`);
            Logger.debug(
               `GetUserDataResponse: UserId (${response.userData.userId}), Marketplace (${response.userData.marketplace}, ConsentStatus (${response.userData.userProfileAccessConsentStatus}))`
            );
            if (UserProfileAccessConsentStatus.CONSENTED === response.userData.userProfileAccessConsentStatus) {
                PurchasingService.requestUserProfileAccess()
                .then((res) => {
                    this.handlerUserProfileAccessResponse(res);
                });
            }
            break;
        case UserDataResponseCode.FAILED:
        case UserDataResponseCode.NOT_SUPPORTED:
            // 优雅地失败。
            break;
    }
    return response.userData; // 对于FAILED和NOT_SUPPORTED的情况返回null
};
   
public static handlerUserProfileAccessResponse = (response: UserProfileAccessResponse): void => {
// 此处应使用userProfileAccessAuthCode更新您的服务,
// 进一步与RVS交互以获得访问令牌和客户配置文件。 
}
如果客户表示同意,则调用requestUserProfileAccess() 方法,之后使用该方法的响应更新您的服务器。然后调用Appstore 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
下表介绍访问令牌请求参数。
访问令牌响应
要访问客户数据,必须向亚马逊应用商店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"
}
下表介绍在用户配置文件请求失败时可能返回的错误代码。
账户设置的最佳实践
请遵循以下客户账户设置的最佳实践。
- 如果UserProfileAccessConsentStatus在useIapUserData()挂钩的getUserData()响应中的值为CONSENTED,请执行以下操作:- 从亚马逊应用商店IAP获取用户配置文件API中获取用户信息。使用此信息来创建采用临时密码的登录账户。无需向客户请求重置密码或提供其他详细信息,即可让客户登录应用。
- 之后,通过电子邮件要求客户重置密码。
 
- 如果UserProfileAccessConsentStatus的值为UNAVAILABLE,请为客户使用默认的应用注册体验。
相关主题
Last updated: 2025年9月30日

