如文档所述:
queryPurchaseHistoryAsync():
Returns the most recent purchase made by the user for each SKU, even if that purchase is expired, canceled, or consumed.
可以这么说,我想为用户创建一个IAP,以便从我的应用中永久删除广告。
如果该用户还返回了“取消的” IAPS,我如何确定该用户是否已经购买了该IAP ?
我想查询实际购买的IAPS,而不是所有内容。因为那样,用户可以通过取消IAP来解锁无广告版本。
更糟糕的是,Purchase
类不具有“已取消”或“已消耗”之类的状态。我无法确定用户购买的IAPS的状态。
我在这里想念东西吗?
预先感谢
答案 0 :(得分:1)
计费客户文档说明它检查用户。
然后我们有一个问题:谁是用户
如果您查看https://developer.android.com/google/play/billing/billing_library_overview上计费API所采取的步骤,则会发现需要与Google Play建立连接。
然后发生的是,当前使用android的用户,他们在google play上登录的帐户以及他们的移动设备被确定为该用户。
因此,如果他们通过Google Play应用程序购买了该产品,它将始终分配给该用户在Google Play上,这就是查询的内容。无论他们使用哪种设备登录,平板电脑,智能手表,电话,电视等……
如何获取实际购买的产品列表
我建议您使用https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchases
,而不要使用异步方式为您提供包括废弃购物车在内的所有物品通过这种方式,Get获取有关您在应用内实际购买和付款的所有商品的购买详细信息。此方法使用Google Play商店应用的缓存,而无需启动网络请求。
注意:出于安全考虑,建议您进行购买 通过调用后端(如果有的话)进行验证 以下API: https://developers.google.com/android-publisher/api-ref/purchases/products/get
如果您阅读了该API链接,则可以通过简单的GET请求轻松地通过在线缓存检查购买是否有效。
我个人会先检查是否怀疑手机已扎根,然后再使用向商店发送请求的购买API进行手动背景检查。
不扎根的手机具有较高的信任度,因为用户可能不是很精通技术,也不会对如何规避此类检查有所了解,并且Google Play缓存将定期更新,反映出值得信赖数据。
如果怀疑手机已扎根(您可以阅读受保护的目录/对其进行写操作),然后在每次您认为有必要时购买它们,然后对其进行在线检查。