当前位置: 首页 > 知识库问答 >
问题:

Android:在应用程序购买-onIabPurchase完成未调用和处理活动结果返回false

戚学
2023-03-14

我想从我的应用程序中进行应用内计费。

IabHelper.OnIabPurchaseFinishedListener purchaseThisAppListener = new IabHelper.OnIabPurchaseFinishedListener() {

        @Override
        public void onIabPurchaseFinished(IabResult result, Purchase purchaseDetails) {             
            if(result.isFailure()) {
                if(result.getResponse() == IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {
                    String toastText = "Item is already purchased.\nRestoring purchase.";
                    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());;
                    prefs.edit().putBoolean("isAppPurchased", true).commit();
                    myActivity.refresh_status = myActivity.REFRESH_ACTIVITY;

                    Builder alert = new AlertDialog.Builder(thisActivityContext);
                    alert.setTitle("Item already owned");
                    alert.setMessage("You already own this item. Restoring purchase.");
                    alert.setPositiveButton("OK",null);
                    alert.show();   


                    for(int i = 3; i < myUtility.isCategoryAvailable.length; i++) {
                        myUtility.isCategoryAvailable[i] = true;                
                    }
                    myUtility.isAllCategoriesAvailable = true;
                    isAppPurchased = true;
                }

                return;
            }
            else if (purchaseDetails.getSku().equals(ITEM_SKU)) {    
                prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

                if(prefs != null) {
                    prefs.edit().putBoolean(IS_APP_PURCHASED, true).commit();
                    for(int i = 3; i < myUtility.isCategoryAvailable.length; i++) {
                        myUtility.isCategoryAvailable[i] = true;                
                    }
                    myUtility.isAllCategoriesAvailable = true;
                    isAppPurchased = true;

                }
                else {
                    Log.e(TAG, "Preferences not found");
                }

            }
            else {
                Log.e(TAG, "Purchase successful, but different Item SKU found");
            }

        }

    };

当我读到上面的函数没有被调用时,我还添加了一个activityresult。我从未打过电话。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);

            Log.d("IN APP ACTIVITY", "ENTERED");


        }
        else {
            Log.d("IN APP ACTIVITY", "DID NOT ENTER");

        }

    }

当我放置ITEM_SKU=“android.test.purchased”时,所有这些都起作用了;但是,当我在Google Play上发布这个应用时!埃尔珀。handleActivityResult(请求代码、结果代码、数据)总是返回false。请帮忙。

共有1个答案

百里飞捷
2023-03-14

使用静态SKU“android.test.purchased”似乎仍然存在问题,您似乎遇到了这个问题中概述的类似问题:应用程序购买中的Android:签名验证失败

我也有这个问题,但一旦我使用自己的SKU,一切都很好。我认为向前推进的最佳方式是在开发者控制台中设置应用内产品,如下所述:http://developer.android.com/intl/es/training/in-app-billing/list-iab-products.html然后使用它进行测试,并测试账户(你也可以在控制台中设置——导航到设置、账户详细信息并向下滚动,直到你看到有测试权限的Gmail账户),这样你就不会被收费。这有点乏味,但对我来说很有效。

 类似资料:
  • 我正在开发一个应用内购买。我已将该应用程序放在 Play 商店进行封闭测试。在帐户设置中使用测试人员电子邮件和添加的测试人员电子邮件。我在 Play 商店中有 2 个托管产品。我在调试模式下测试了 android.test.purchased 并且工作正常。但是在我购买 SKU 时从 Play 商店安装的发布版本中,它成功完成了购买,但由于某种原因我收到了失败响应。我试图弄清楚这一点。此外,我在购

  • 问题内容: 我在Utilities类中使用loadImage方法,并且在通过闭包返回图像时遇到了一些麻烦。基本上因为我的代码可能返回图像或错误,所以在调用该方法时将其分配给image属性是行不通的。 我在类的方法声明中使用的方法是否错误,还是应该以不同的方式调用该方法以预期潜在的不同结果?谢谢 问题答案: 将处理程序添加到您的 loadImage 函数中: 迅捷3 像这样调用func: 斯威夫特2

  • 在我的测试应用程序中,用户点击一个购买按钮,然后购买一个物品。当购买完成时,一个textview会显示为“购买完成”。都很好。:)。然而,当我杀死应用程序,并再次打开它,购买按钮再次出现....:/。为什么会发生这种情况?谷歌对此不是很清楚。下面是代码。 固定 最后使用if条件使视图可见或不可见 解决方案并不难,但我必须大量阅读文档,使用调试器点,就是这样:)。

  • 这个问题(Android应用内计费动态产品列表)是3年前问过的。动态的应用内购买项目在Android上还是不可用的吗? 我之所以要实现这种功能,是因为我的应用程序提供了一种让某些用户创建自己的应用内购买的方式,供其他人购买。

  • 我正在尝试构建一个使用条形码阅读器的android应用程序。 null 以上所有操作都按预期工作,但在onActivityResult事件处理之后,应用程序终止。 在日志文件中,我只能找到一个通用的app-kill消息 您可以在下面找到代码片段并注销。 马蒂亚

  • 我正在制作一个显示化学反应动画的应用程序。每个原子都是一个SCNSphere,并用SCNActions动画。我试图使用runAction()中的完成处理程序在当前操作完成后调用下一个动画,因为每个原子必须进行许多不同的运动。 这只是我为简化过程而编写的一些测试代码,实际代码将在对象数组中循环。 语句工作正常,只有在操作完成后才会调用它,但是新的SCNAction不会触发。我是否遗漏了什么来启动下一