退款客户应用内购买,但 BillingClient 仍显示用户已购买?

Che*_*eng 11 android android-billing

我正在使用以下内容BillingClient

implementation 'com.android.billingclient:billing:1.2.2'
Run Code Online (Sandbox Code Playgroud)

虽然我已经发出退款如下

在此处输入图片说明

但我仍然收到以下回复 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"
}
Run Code Online (Sandbox Code Playgroud)

根据文档 BillingClient.queryPurchases

获取在您的应用内购买的所有商品的购买详情。此方法使用 Google Play Store 应用程序的缓存,而无需发起网络请求。

这可能是原因。我尝试使用另一个功能 -queryPurchaseHistoryAsync也无济于事。根据文档

返回用户最近为每个 SKU 进行的购买,即使该购买已过期、取消或消费。

对于queryPurchaseHistoryAsync,没有purchaseState表示以下购买被取消!

{
  "productId": "note_list_promo",
  "purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
  "purchaseTime": 1560501011137,
  "developerPayload": null
}
Run Code Online (Sandbox Code Playgroud)

谷歌真的应该提供一个非缓存版本的queryPurchases.

知道我做错了什么吗?在我发出退款后,我不希望用户可以继续使用付费功能。

Che*_*eng 1

我们通过以下方式清除缓存

private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient) {
    billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) -> {
    });

    billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> {
    });
}
Run Code Online (Sandbox Code Playgroud)

之后,我们会BillingClient.queryPurchases像往常一样打电话。

请注意,此类缓存清除不会立即发生。清除缓存可能需要长达 24 小时的时间。奇怪的是,这个重要的要求没有以任何方式记录下来。

  • 这不是“清理”。您只需异步调用相同的函数即可。这样做没有任何目的,因为它什么也没做。从“queryPurchases”进行的购买在一段时间后会因其他原因而删除,而不会调用此代码,这绝对是毫无意义的。 (4认同)