退还客户应用内购买但 BillingClient 仍显示用户已购买?
Refund customer in-app purchase but BillingClient still indicate user has purchased?
我正在使用以下 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
的文档
Get purchases details for all the items bought within your app. This
method uses a cache of Google Play Store app without initiating a
network request.
这可能是原因。我尝试使用另一个功能 - queryPurchaseHistoryAsync
也无济于事。根据文档
Returns the most recent purchase made by the user for each SKU, even
if that purchase is expired, canceled, or consumed.
对于queryPurchaseHistoryAsync,没有purchaseState
表示以下购买已取消!
{
"productId": "note_list_promo",
"purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
"purchaseTime": 1560501011137,
"developerPayload": null
}
Google 确实应该提供 queryPurchases
.
的非缓存版本
知道我做错了什么吗?我不希望用户在我发出退款后继续使用付费功能。
我们通过以下方式清除缓存
private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient) {
billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) -> {
});
billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> {
});
}
之后,我们将照常调用BillingClient.queryPurchases
。
请注意,此类缓存清除不会立即发生。清除缓存可能需要长达 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
Get purchases details for all the items bought within your app. This method uses a cache of Google Play Store app without initiating a network request.
这可能是原因。我尝试使用另一个功能 - queryPurchaseHistoryAsync
也无济于事。根据文档
Returns the most recent purchase made by the user for each SKU, even if that purchase is expired, canceled, or consumed.
对于queryPurchaseHistoryAsync,没有purchaseState
表示以下购买已取消!
{
"productId": "note_list_promo",
"purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
"purchaseTime": 1560501011137,
"developerPayload": null
}
Google 确实应该提供 queryPurchases
.
知道我做错了什么吗?我不希望用户在我发出退款后继续使用付费功能。
我们通过以下方式清除缓存
private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient) {
billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) -> {
});
billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> {
});
}
之后,我们将照常调用BillingClient.queryPurchases
。
请注意,此类缓存清除不会立即发生。清除缓存可能需要长达 24 小时的时间。奇怪的是,这个重要的要求没有以任何方式记录。