退款客户应用内购买,但 BillingClient 仍然显示用户已购买?
Posted
技术标签:
【中文标题】退款客户应用内购买,但 BillingClient 仍然显示用户已购买?【英文标题】:Refund customer in-app purchase but BillingClient still indicate user has purchased? 【发布时间】:2019-10-28 21:17:24 【问题描述】:我正在使用以下BillingClient
。
implementation 'com.android.billingclient:billing:1.2.2'
虽然我已经按以下方式退款了
但我仍然收到来自BillingClient.queryPurchases
的以下回复
"orderId": "GPA.3352-2555-5719-25534",
"packageName": "com.yocto.wenote",
"productId": "note_list_promo",
"purchaseTime": 1560501011137,
"purchaseState": 0,
"purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF"
根据BillingClient.queryPurchases
的文档
获取在您的应用中购买的所有商品的购买详情。这 方法使用 Google Play 商店应用程序的缓存而不启动 网络请求。
这可能是原因。我尝试使用另一个功能 - queryPurchaseHistoryAsync
也无济于事。根据文档
返回用户为每个 SKU 进行的最近购买,即使 如果该购买已过期、取消或消费。
对于queryPurchaseHistoryAsync,没有purchaseState
表示后面的购买被取消了!
"productId": "note_list_promo",
"purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
"purchaseTime": 1560501011137,
"developerPayload": null
Google 确实应该提供queryPurchases
的非缓存版本。
知道我做错了什么吗?在我发放退款后,我不希望用户继续使用付费功能。
【问题讨论】:
【参考方案1】:我们通过以下方式清除缓存
private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient)
billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) ->
);
billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) ->
);
之后,我们会照常拨打BillingClient.queryPurchases
。
请注意,此类缓存清除不会立即发生。清除缓存可能需要长达 24 小时。奇怪的是,这个重要的要求没有以任何方式记录下来。
【讨论】:
它是如何工作的?你只需拨打queryPurchaseHistoryAsync
两次......然后?
目的是触发缓存清除,以便BillingClient.queryPurchases
将返回正确的值。但是,缓存清除不会立即发生。它可能会延迟长达 24 小时。
这不是“清除”。您只需异步调用相同的函数。这样做没有任何目的,因为它什么都不做。从queryPurchases
购买的东西在一段时间后由于其他原因而被删除,而没有调用这个绝对没有意义的代码。
没有。它不会。我们在现场制作中运行,我们知道queryPurchases
的当前行为。这是一个已知问题 - github.com/googlesamples/android-play-billing/issues/…以上是关于退款客户应用内购买,但 BillingClient 仍然显示用户已购买?的主要内容,如果未能解决你的问题,请参考以下文章