要解决已退款的非消耗性购买仍然出现在Google Play计费库2.1.0的列表中的问题,可以使用以下代码示例:
首先,你需要在获取购买商品列表的地方添加过滤逻辑,以排除已退款的商品。可以使用BillingClient.queryPurchases()
方法来获取已购买的商品列表,并遍历该列表来过滤出已退款的商品。
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClient.BillingResponseCode;
import com.android.billingclient.api.BillingClient.SkuType;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.Purchase.PurchaseState;
// 初始化BillingClient
BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.build();
// 查询已购买的商品列表
Purchase.PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP);
if (purchasesResult.getResponseCode() == BillingResponseCode.OK) {
List<Purchase> purchasesList = purchasesResult.getPurchasesList();
// 过滤已退款的商品
List<Purchase> filteredPurchasesList = new ArrayList<>();
for (Purchase purchase : purchasesList) {
if (purchase.getPurchaseState() != PurchaseState.PENDING) {
filteredPurchasesList.add(purchase);
}
}
// 在filteredPurchasesList中处理已购买的商品
for (Purchase purchase : filteredPurchasesList) {
// 处理购买的商品
}
} else {
// 处理查询错误
}
在上面的代码示例中,通过调用billingClient.queryPurchases(SkuType.INAPP)
来获取已购买的非消耗性商品列表。然后,使用Purchase.getPurchaseState()
方法来检查每个商品的购买状态,如果购买状态不是PurchaseState.PENDING
,则将其添加到一个新的列表filteredPurchasesList
中。最后,在filteredPurchasesList
中处理已购买的商品。
这样,已退款的非消耗性购买将不会出现在处理商品的列表中。