开发人员控制台

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


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

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

使用应用商店UserId

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

如果您是在Unity中实现自己的应用,请通过实施IAmazonExtensions来获取UserId。有关详细信息,请参阅亚马逊应用商店和Amazon Underground商店:扩展功能。或者,使用Amazon 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
}

收据验证

要验证收据,请检查cancelDaterenewalDate字段:

  • 对于消耗品或非消耗品购买,如果两个字段都是null,或者如果cancelDatepurchaseDate之前,则收据有效。
  • 对于订阅购买,如果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
}

其他建议

  1. 通过创建一个流程,在72小时内为每个有效收据调用RVS,监控收据取消的趋势
  2. 将轮询速率保持在每秒10个交易(TPS)以下,以避免请求被限制节流

后续步骤

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