【问题标题】:Android: In App purchase - onIabPurchaseFinished not called and handleActivityResult returning falseAndroid:应用内购买 - 未调用 onIabPurchaseFinished 并且 handleActivityResult 返回 false
【发布时间】:2014-11-27 14:26:15
【问题描述】:

我想通过我的应用进行应用内结算。

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");
            }

        }

    };

当我读到上面的函数没有被调用时,我还添加了 onActivityResult。 onIabPurchaseFinished never called.

@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"; 但是,当我在 GooglePlay 上发布这个应用程序时,!mHelper.handleActivityResult(requestCode, resultCode, data) 总是返回 false。请帮忙。

【问题讨论】:

    标签: android in-app-purchase onactivityresult


    【解决方案1】:

    使用静态 SKU“android.test.purchased”似乎仍然存在问题,您似乎遇到了与此问题中所述类似的问题:Android in app purchase: Signature verification failed

    我也遇到过这个问题,但是一旦我使用了自己的 SKU,一切正常。我认为前进的最佳方法是在开发人员控制台中设置应用内产品,如下所述:http://developer.android.com/intl/es/training/in-app-billing/list-iab-products.html 然后使用该帐户进行测试并测试帐户(您也可以在控制台中设置 - 导航到设置,帐户详细信息并向下滚动,直到您看到 具有测试访问权限的 Gmail 帐户),这样您就不会被收费。这有点乏味,但对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多