Android:在App中购买 - onIabPurchaseFinished未调用且handleActivityResult返回false

时间:2014-10-02 14:51:58

标签: android in-app-purchase onactivityresult

我想从我的应用中进行应用结算。

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。请帮忙。

1 个答案:

答案 0 :(得分:2)

使用静态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帐户,这样您就不会收费。这有点乏味但它对我有用。