IAP最佳实践 - 跟踪客户购买趋势
作为跟踪客户购买趋势的一种策略,您可以在应用中监控已取消收据的比率。
使用亚马逊应用商店用户ID
用户ID是每个使用IAP的客户的唯一标识符。通过PurchasingService.getUserData()
方法来检索客户的用户ID。有关详细信息,请参阅获取用户信息。
如果应用是在Unity中实现的,请通过实现IAmazonExtensions
来获取用户ID。有关详细信息,请参阅亚马逊应用商店和Amazon Underground商店:扩展功能。或者,也可使用亚马逊IAP插件的getUserData()
方法。有关详细信息,请参阅GetUserData。
要跟踪客户的购买历史记录和趋势,请将客户的亚马逊应用商店用户ID链接到您的身份管理系统。通过与身份平台(例如Login with Amazon或A3L身份验证)集成,将身份认证系统引入您的应用程序。或者,可以使用其他服务(例如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的收据验证服务。
其他建议
- 通过创建一个流程,在72小时内针对每个有效收据调用RVS,监控收据取消的趋势。
- 将轮询速率保持在每秒10个交易 (TPS) 以下,以避免请求被限制节流。
- 由于已取消的收据无法恢复,因此不建议针对已取消的收据连续轮询RVS。
- 如果您对
receiptId
的请求被限制节流,请稍等片刻,然后重试相同的receiptId
并降低调用速率。
后续步骤
实施上述策略可帮助您创建可靠的流程来跟踪客户购买趋势,并确保这一重要的收入来源是安全的。查看我们的应用内购买概述,了解有关IAP以及如何在项目中实现的更多详细信息。
Last updated: 2024年3月15日