开发者控制台

IAP最佳实践 - 跟踪客户购买趋势

IAP最佳实践 - 跟踪客户购买趋势

作为跟踪客户购买趋势的一种策略,您可以在应用中监控已取消收据的比率。

使用亚马逊应用商店用户ID

用户ID是每个使用IAP的客户的唯一标识符。通过PurchasingService.getUserData()方法来检索客户的用户ID。有关详细信息,请参阅获取用户信息

如果应用是在Unity中实现的,请通过实现IAmazonExtensions来获取用户ID。有关详细信息,请参阅亚马逊应用商店和Amazon Underground商店:扩展功能。或者,也可使用亚马逊IAP插件的getUserData()方法。有关详细信息,请参阅GetUserData

要跟踪客户的购买历史记录和趋势,请将客户的亚马逊应用商店用户ID链接到您的身份管理系统。通过与身份平台(例如Login with AmazonA3L身份验证)集成,将身份认证系统引入您的应用程序。或者,可以使用其他服务(例如Facebook的登录服务),也可创建自己的系统。

IAP收据验证

用户完成购买后,在onResume()调用中处理收据,而无需进一步的用户交互。有关详细信息,请参阅实现getPurchaseUpdates方法。 

要验证收据,需要集成适用于Appstore SDK IAP的收据验证服务。RVS调用需要以下参数:

  • 收据ID。这是每次购买的唯一标识符。从onPurchaseResponse()回调中检索ReceiptId对象,如以下示例所示。

       @Override
       public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
          switch (purchaseResponse.getRequestStatus()) {
              case SUCCESSFUL:
                  receiptId = purchaseResponse.getReceipt().getReceiptId();
                  PurchasingService.notifyFulfillment(purchaseResponse.getReceipt().getReceiptId(),
                  FulfillmentResult.FULFILLED);
                  break ;
              case FAILED:
                  break ;
          }
       }
    
  • 用户ID。这是客户的唯一标识符。从onUserDataResponse()回调中检索用户ID,如以下示例所示。

      @Override
      public void onUserDataResponse(UserDataResponse response) {
          final UserDataResponse.RequestStatus status = response.getRequestStatus();
          switch (status) {
              case SUCCESSFUL:
                  currentUserId = response.getUserData().getUserId();
                  currentMarketplace = response.getUserData().getMarketplace();
                  break;
              case FAILED:
              case NOT_SUPPORTED:
                  // 失败时适当处理。
                  break;
          }
      }
    

以下是RVS请求语法:

https://{rvs-server}/version/{operation-version-number}/verifyReceiptId/developer/{shared-secret}/user/{user-id}/receiptId/{receipt-id}

请求和响应示例

下面的示例说明了在RVS生产服务器上验证收据的请求: 

https://appstore-sdk.amazon.com/version/1.0/verifyReceiptId/developer/2:smXBjZkWCxDMSBvQ8HBGsUS1PK3jvVc8tuTjLNfPHfYAga6WaDzXJPoWpfemXaHg:iEzHzPjJ-XwRdZ4b4e7Hxw==/user/LRyD0FfW_3zeOlfJyxpVll-Z1rKn6dSf9xD3mUMSFg0=/receiptId/wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11

如果请求成功,RVS API将返回响应代码 (HTTP 200)。以下是成功请求的响应示例:

{
    "betaProduct": false,
    "cancelDate": null,
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.gold_medal",
    "productType": "CONSUMABLE",
    "purchaseDate": 1399070221749,
    "quantity": 1,
    "receiptId": "wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11",
    "renewalDate": null,
    "term": null,
    "termSku": null,
    "testTransaction": true
}

收据验证

如果没有正确实现服务器端收据验证,应用可能会容易受到退款欺诈的影响。如果不验证取消日期,则客户可在取消购买后继续接收服务。

可使用收据验证服务 (RVS) 检查cancelDate 字段以验证收据:对于所有应用内购买(消费品、权利或订阅),如果cancelDate字段为null,则收据有效。

以下是已取消收据的示例:

{
    "betaProduct": false,
    "cancelDate": 1583136000000,
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.gold_medal",
    "productType": "CONSUMABLE",
    "purchaseDate": 1583049600000,
    "quantity": 1,
    "receiptId": "wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11",
    "renewalDate": null,
    "term": null,
    "termSku": null,
    "testTransaction": true
}

有关RVS的更多信息,请参阅适用于Appstore SDK IAP的收据验证服务

其他建议

  1. 通过创建一个流程,在72小时内针对每个有效收据调用RVS,监控收据取消的趋势。
  2. 将轮询速率保持在每秒10个交易 (TPS) 以下,以避免请求被限制节流。
  3. 由于已取消的收据无法恢复,因此不建议针对已取消的收据连续轮询RVS。
  4. 如果您对receiptId的请求被限制节流,请稍等片刻,然后重试相同的receiptId并降低调用速率。

后续步骤

实施上述策略可帮助您创建可靠的流程来跟踪客户购买趋势,并确保这一重要的收入来源是安全的。查看我们的应用内购买概述,了解有关IAP以及如何在项目中实现的更多详细信息。


Last updated: 2024年3月15日