代码之家  ›  专栏  ›  技术社区  ›  Adam Varhegyi

如何使用BillingClient获取IAP的采购历史记录

  •  1
  • Adam Varhegyi  · 技术社区  · 7 年前

    如文件所述:

    queryPurchaseHistoryAsync():
    
    Returns the most recent purchase made by the user for each SKU, even if that purchase is expired, canceled, or consumed.
    

    所以假设我想为用户制作一个IAP 从我的应用程序中永久删除广告。

    我如何决定 如果该用户已经购买了IAP,则重新安装。 如果这个函数 同时返回“已取消”IAP?

    我想问一下 实际购买的IAP,不是全部。 因为这样用户就可以用取消的IAP解锁无广告版本。


    更糟的是, Purchase 没有“已取消”或“已消费”等状态 我无法决定用户购买的IAP的状态。

    我是不是错过了什么?

    提前谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tschallacka    7 年前

    计费客户机文档声明它为用户检查。

    然后我们有一个问题: 谁是用户

    如果您查看上的计费API所采取的步骤 https://developer.android.com/google/play/billing/billing_library_overview 然后你会发现需要连接到Google Play。

    接下来会发生的事情是,Android上的当前用户、他们在Google Play上登录的帐户以及他们的移动设备都被确定为用户。

    所以,如果他们通过google-play-in-app购买了它,它将一直被分配给google-play上的用户,这就是这个问题的答案。无论他们登录的是哪种设备,他们的平板电脑、智能手表、电话、电视等…

    如何获取实际购买产品的列表

    我建议您不要使用Async,它提供了包括废弃购物车在内的所有功能 https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchases

    这样就可以获得应用程序中实际购买和支付的所有物品的购买详情。此方法使用Google Play Store应用程序的缓存,而不启动网络请求。

    注:出于安全考虑,建议进行购买 通过调用 下列API: https://developers.google.com/android-publisher/api-ref/purchases/products/get

    如果您阅读了该API链接,那么可以很容易地通过在线缓存检查购买是否通过简单的GET请求有效。

    就我个人而言,我会在对向商店发送请求的购买API进行手动后台检查之前,先检查手机是否被怀疑是根用户。

    未扎根的手机具有更高的信任级别,因为用户可能不太懂技术,也不会对如何绕过此类检查有任何线索,而且谷歌Play缓存将定期更新,反映值得信赖的数据。

    当一部手机被怀疑是根目录(你可以读受保护的目录/写给他们),然后在线检查他们是否在你认为有必要的时候买了这些东西。

    推荐文章