java - android 计费 :4. 0.0 - queryPurchases(INAPP) 和 purchase.getSku()

标签 java android in-app-purchase in-app-billing

我刷新到 android billing 版本 4 和 2 东西不再工作了。
首先我有这个:

else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
            Purchase.PurchasesResult queryAlreadyPurchasesResult = billingClient.queryPurchases(INAPP); // deprecated
            List<Purchase> alreadyPurchases = queryAlreadyPurchasesResult.getPurchasesList();
            if(alreadyPurchases!=null){
                handlePurchases(alreadyPurchases);
            }
        }
不推荐使用 queryPurchases。
其次我有这个:
void handlePurchases(List<Purchase>  purchases) {
    for(Purchase purchase:purchases) {
        //if item is purchased
        if (PRODUCT_ID.equals(purchase.getSku()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
        {
            if (!verifyValidSignature(purchase.getOriginalJson(), purchase.getSignature())) {
                // Invalid purchase
                // show error to user
                Toast.makeText(getApplicationContext(), R.string.plus_error, Toast.LENGTH_SHORT).show();
                return;
            }
getSku() 正在工作,但现在它被标记为 Cannot resolve method getSku() in Purchase任何想法如何解决这个问题?

来自文档:
Summary of changes
Added BillingClient.queryPurchasesAsync() to replace BillingClient.queryPurchases() which will be removed in a future release.

Added Purchase#getSkus() and PurchaseHistoryRecord#getSkus(). These replace Purchase#getSku and PurchaseHistoryRecord#getSku which have been removed.
但我不知道如何在上面的代码中应用这个新命令。
如果我将 getSku 更改为 getSkus 我的 if if (PRODUCT_ID.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)会说它总是假的。而且我不知道如何使用 queryPurchasesAsync(),现在需要 2 个参数。
谢谢。

最佳答案

正如我之前在评论中提到的,您将 String 与 List 对象进行比较,但正如 chitgoks 所说,它是 ArrayList<String>而不是 List<String>正如我假设的那样。我不确定您是否会得到多个 sku 字符串(因为您可能不会同时订购多件东西?)但要么仔细查看它们以确保,要么捕获机会将 PRODUCT_ID 与 only 进行比较购买.getSkus().get(0)。
新的异步购买调用似乎只需要很小的改动。
旧方法的示例:

Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.SUBS);
doSomethingWithPurchaseList(result.getPurchasesList());
这将是做同样事情的新方法:
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS, new PurchasesResponseListener() {
        @Override
        public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {
            doSomethingWithPurchaseList(list);
        }
    });

关于java - android 计费 :4. 0.0 - queryPurchases(INAPP) 和 purchase.getSku(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67607661/

相关文章:

android - 尝试从 Android 在 Facebook 上共享链接时出错

android - App产品购买中如何消费订阅类型

java - 使用 MOXy 读取 XML 时如何将字段标记为必填/可选?

Java:将一天中的长时间转换为时间戳

android - 无法实例化 GoogleApiClient

android - 向 Realm 添加新字段后如何设置默认值?

c# - 桌面应用程序的应用程序内购买

android - 响应代码项目已购买但购买列表为空

java - 正则表达式 cucumber 小 cucumber 用于数字 float

java - RecyclerView 插入动画中断 OnClick