用于测试的应用提交API
用于测试的应用提交API是一种REST API,允许您以编程方式为亚马逊应用商店DevTest注册应用并添加测试者。
在使用API之前,您必须设置访问权限并获取OAuth会话令牌,该令牌将包含在每个API请求的HTTP标头中。
基本URL
用于测试的应用提交API的基本URL是developer.amazon.com/api/appstore。
身份验证
要配置对用于测试的应用提交API的访问权限,必须先在开发者控制台中创建安全配置文件并将其与该API关联。然后,使用Login with Amazon API请求访问令牌,并将该令牌添加到每个API请求中的HTTP标头。
创建安全配置文件
在使用API之前,必须创建安全配置文件。安全配置文件会生成访问令牌,您可以使用该令牌来访问API。
创建安全配置文件
- 登录亚马逊开发者控制台账户。
- 在顶部导航栏中,选择应用与服务 > API访问。
- 
    选择应用提交API。  
- 单击创建新的安全配置文件。
- 针对新配置文件输入安全配置文件名称和安全配置文件描述,然后单击保存。
- 在Web设置选项卡中,保存客户端ID和客户端密钥,因为访问API时需要这些信息。
     
将安全配置文件与API关联
创建安全配置文件后,必须将其与开发者控制台中的API关联。
将安全配置文件与API关联
- 选择应用与服务 > API访问,导航到API访问页面。
- 单击API名称,展开面板。
- 从下拉列表中选择您在上一部分中创建的安全配置文件。
- 选择附加以将安全配置文件与此API关联。API名称和附加的安全配置文件将添加到Security Profile(s) in use(使用中的安全配置文件)面板。
     
现在可以使用客户端ID和客户端密钥请求Login With Amazon (LWA) 访问令牌。
请求LWA访问令牌
获取客户端ID和客户端密钥后,按照以下步骤使用Login With Amazon API请求Login with Amazon访问令牌。
发送令牌请求
将POST请求发送到https://api.amazon.com/auth/o2/token,其中包含以下标头和内容:
- 标头: Content-Type: application/x-www-form-urlencoded
- 内容:
示例JSON内容:
{
    "grant_type": "client_credentials",
    "client_id": "amzn1.application-oa2-client.<客户端ID>",
    "client_secret": "<客户端密钥>",
    "scope": "appstore::apps:readwrite"
}
示例cURL请求:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_id=amzn1.application-oa2-client.<客户端ID>&client_secret=<客户端密钥>&scope=appstore::apps:readwrite' https://api.amazon.com/auth/O2/token
保存响应
以下是示例响应。
{
    "access_token": "Atc|MAEBI...",
    "scope": "appstore::apps:readwrite",
    "token_type": "bearer",
    "expires_in": 3600
}
- access_token: 访问令牌。
- expires_in: 访问令牌到期之前的秒数。
- scope: 始终为- appstore::apps:readwrite。
- token_type: 始终为- bearer。
处理任何错误响应
如果令牌请求导致了错误,则响应消息正文包含以下错误消息之一:
| 错误消息正文 | 详情 | 
|---|---|
| {"error_description":"Client authentication failed","error":"invalid_client"} | 密钥无效 | 
| {"error_description":"The request has an invalid parameter : scope","error":"invalid_scope"} | 作用域值无效 | 
| {"error_description":"The authorization grant type is not supported by the authorization server","error":"unsupported_grant_type"} | 授权类型不正确 | 
| {"error_description":"The Content-Type is not supported by the authorization server","error":"invalid_request"} | content-type不受支持 | 
如何使用访问令牌
保存访问令牌,即请求LWA访问令牌响应中的access_token字段。
向API发送请求时,请将Authorization标头的值设置为Bearer <访问令牌>。该访问令牌是一个以“Atc|”开头的长字符串。
示例cURL请求:
curl -v -X GET "<终端节点的URL>"   -H  "Authorization: Bearer Atc|MAEBIKfsULrH7jSzvJTV8UmiHWr9M86O3JRmv4t1hqoCBriSMEP5Gsey_FiBxteZ8oxGd6abGuOFga8fwnMhmSD_Sg4MI4odXLPgB2IVs8M1uswjuWjnsMcvehpWvf9tzQT8HTWiBigInJLB8BrMg5J3O02hlTvcF441XxXDXthyj993COJ2u5swOTKjC_dcijiN8amuzrj32rh9Fr3CNgCpoZ0WqXnBhoHUVMYSOBV-owA5rI4-OfysXC71Zbtv1hb8igk"  
访问令牌到期后,请按照请求LWA访问令牌中的步骤获取新访问令牌,并开始在您的请求中使用新访问令牌。如果您自上次请求访问令牌以来已超过一个小时,并且您开始收到403 Forbidden HTTP错误以及消息“Request is not authorized”(请求未获得授权),则可以确定访问令牌已到期。
操作
用于测试的应用提交API包括以下操作。
| 操作 | HTTP方法和URI | 
|---|---|
| 注册您的应用 | POST /{apiVersion}/applications/{appId}/devtest/register | 
| 添加测试者 | POST /{apiVersion}/applications/{appId}/tracks/{trackId}/testers | 
注册您的应用
为您的应用注册适用于应用内购买 (IAP) 的亚马逊应用商店DevTest。
请求
要为您的应用注册适用于IAP的亚马逊应用商店DevTest,您需要向/{apiVersion}/applications/{appId}/devtest/register终端节点发出POST请求。在请求正文中,提供应用的程序包名称和用于签署应用的证书。
请求示例
POST /{apiVersion}/applications/{appId}/devtest/register
Host: developer.amazon.com/api/appstore
Content-Type: application/json
Authorization: Bearer {access token}
请求参数
| 参数 | 位置 | 描述 | 类型 | 是否必需 | 
|---|---|---|---|---|
| apiVersion | 路径 | API的版本,当前为 v1。 | 字符串 | 是 | 
| appId | 路径 | 应用的标识符。示例: amzn1.devportal.mobileapp.dde7ec787b031584aa5f04606184041a。 | 字符串 | 是 | 
| access token | 标头 | LWA令牌 | 字符串 | 是 | 
请求正文示例
{
    "packageName": String,
    "certificate": String
}
请求正文属性
| 参数 | 描述 | 类型 | 是否必需 | 
|---|---|---|---|
| packageName | 您的应用的程序包名称。 | 字符串 | 是 | 
| certificate | 您将用于签署应用的证书。 | 字符串 | 是 | 
响应
成功的响应会返回HTTP 200 OK以及trackId,您将在添加测试者请求中使用它。出现错误时,响应会返回相应的HTTP状态码,并包括带有错误代码和人类可读消息的响应正文。
响应正文示例
{
    "trackId": "devtest"
}
响应正文属性
| 参数 | 描述 | 类型 | 
|---|---|---|
| trackId | 标识应用的轨迹。对于DevTest,值为 devtest。 | 字符串 | 
HTTP状态码
| 状态 | 描述 | 
|---|---|
| 200 OK | 应用已成功注册DevTest。 | 
| 404 Not Found | 未找到请求的资源。 | 
| 400 Bad Request | 表示请求正文中的一个或多个属性无效或不存在。 | 
将测试者添加到适用于IAP的DevTest
将测试者添加到DevTest环境中以进行IAP测试。
请求
要将测试者添加到适用于IAP的DevTest,您需要向/{apiVersion}/applications/{appId}/tracks/{trackId}/testers端点发出POST请求。在请求中,您必须使用注册响应中返回的trackId。您还必须指定要向其添加测试者的测试者分组名称,并提供测试者详细信息。
请求示例
POST /{apiVersion}/applications/{appId}/tracks/{trackId}/testers
Host: developer.amazon.com/api/appstore
Content-Type: application/json
Authorization: Bearer {access token}
请求参数
| 参数 | 位置 | 描述 | 类型 | 是否必需 | 
|---|---|---|---|---|
| apiVersion | 路径 | API的版本,当前为 v1。 | 字符串 | 是 | 
| appId | 路径 | 应用的标识符。示例: amzn1.devportal.mobileapp.dde7ec787b031584aa5f04606184041a。 | 字符串 | 是 | 
| access token | 标头 | LWA令牌 | 字符串 | 是 | 
请求正文示例
{
    "groups": [{
        "name": String,
        "testers": [{
            "firstName": String,
            "lastName": String,
            "email": String
        }]
    }]
}
请求正文属性
| 参数 | 描述 | 类型 | 是否必需 | 
|---|---|---|---|
| groups | 测试者分组的列表。 | List<TesterGroup> | 是 | 
| name | 测试者分组的名称。 | 字符串 | 是 | 
| testers | 测试者的列表。 | List<Tester> | 是 | 
| firstName | 测试者的名字。 | 字符串 | 否 | 
| lastName | 测试者的姓氏。 | 字符串 | 否 | 
| email | 测试者的电子邮件地址。 | 字符串 | 是 | 
响应
成功的响应返回HTTP 200 OK,包括添加的测试者分组列表以及各组中唯一测试者的数量。出现错误时,响应会返回相应的HTTP状态码,并包括带有错误代码和人类可读消息的响应正文。
响应正文示例
{
    "groups": List<String>,
    "uniqueTesterCount" : Integer
}
响应正文属性
| 参数 | 描述 | 类型 | 
|---|---|---|
| groups | 添加到此应用的DevTest注册中的测试者分组名称的列表。 | List<String> | 
| uniqueTesterCount | 在测试者分组中添加的唯一测试者的数量。 | 整数 | 
HTTP状态码
| 状态 | 描述 | 
|---|---|
| 200 OK | 测试者已成功添加到应用的DevTest。 | 
| 404 Not Found | 未找到请求的资源。 | 
| 400 Bad Request | 表示请求正文中的一个或多个属性无效或不存在。 | 
对象定义
用于测试的应用提交API使用以下对象。
TesterGroup对象
TesterGroup对象包含测试者分组的名称和测试者列表。
{
    "name": String,
    "testers": [{
        "firstName": String,
        "lastName": String,
        "email": String
    }]
}
| 参数 | 描述 | 类型 | 
|---|---|---|
| name | 测试者分组的名称。 | 字符串 | 
| testers | 测试者的列表。 | List<Tester> | 
Tester对象
Tester对象包含测试者的详细信息。
{
    "firstName": String,
    "lastName": String,
    "email": String
}
| 参数 | 描述 | 类型 | 
|---|---|---|
| firstName | 测试者的名字。 | 字符串 | 
| lastName | 测试者的姓氏。 | 字符串 | 
| email | 测试者的电子邮件地址。 | 字符串 | 
Last updated: 2025年9月30日

