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

时间:2019-06-14 08:55:28

标签: android android-billing

我正在使用以下BillingClient

implementation 'com.android.billingclient:billing:1.2.2'

尽管我已经以波纹管方式退还了

enter image description here

但是我仍然收到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 个答案:

答案 0 :(得分:1)

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

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

    billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> {
    });
}

此后,我们将照常呼叫BillingClient.queryPurchases

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