开发者控制台

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

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

本指南概述了如何通过监控取消收据率来跟踪客户的购买趋势,以此作为充分利用应用的策略。

使用亚马逊应用商店UserId

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

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

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

IAP收据验证

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

通过与Receipt Verification Service (RVS)集成验证收据,并通过提供以下方式调用收据: 

  • receiptId: 这是每次购买的唯一标识符。从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 ;
          }
       }
    
  • userId:​ 这是客户的唯一标识符。从onUserDataResponse回调中检索userId,如下所述:

      @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_Url>/version/<Operation_version_number>/verifyReceiptId/developer/<Shared_Secret>/user/<UserId>/receiptId/<ReceiptId>

请求和响应示例

下面的示例说明了在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
}

收据验证

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

可使用Receipt Verification Service (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的更多信息,请参阅IAP应用收据验证

其他建议

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

后续步骤

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