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应用收据验证。
其他建议
- 通过创建一个流程,在72小时内针对每个有效收据调用RVS,监控收据取消的趋势。
- 将轮询速率保持在每秒10个交易(TPS)以下,以避免请求被限制节流。
- 由于已取消的收据无法恢复,因此不建议针对已取消的收据连续轮询RVS。
- 如果您对
receiptId
的请求被限制节流,请稍等片刻,然后重试相同的receiptId
并降低调用速率。
后续步骤
实施上述策略可帮助您创建可靠的流程来跟踪客户购买趋势,并确保这一重要的收入来源是安全的。查看我们的应用内购买概述,了解有关IAP以及如何在项目中实现的更多详细信息。