Код ответа InAppBilling v3 IabResult BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED

Следуя документам на сайте разработчика, я недавно реализовал InAppBilling v3 в своем приложении. Я использовал классы пакета utils из примера TRIVIAL DRIVE.

Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь приобрел продукт в приложении уже при повторном запуске процесса покупки на другом устройстве, в диалоговом окне магазина воспроизведения отображается ЭЛЕМЕНТ УЖЕ ПРИНАДЛЕЖЕН, но код ответа возвращается IabResult< /strong> не соответствует константе IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED . Возвращаемый код ответа на самом деле является одним из кодов ошибок в классе IabHelper (-1005 Пользователь отменен).

Я действительно хотел бы знать, как я могу получить фактический код ответа вместо кода ошибки. Любая помощь будет оценена по достоинству.

Ниже приведен код для обратного вызова

// Callback for when a purchase is finished
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener =
        new IabHelper.OnIabPurchaseFinishedListener() {
            public void onIabPurchaseFinished(IabResult result, Purchase purchase) {

                if (result.isFailure()) {
                    if (result.getResponse() ==
                            IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {
                        //already owned
                        boolean isPremium = true;
                        SharedPrefsUtils.setPremium(BaseActivity.this, isPremium);
                        EventBus.getDefault().post(new InAppBillingUiUpdateEvent(isPremium));
                        //setWaitScreen(false);
                        return;
                    }
                    //handle error
                    complain(result.getResponse() + " " + "Error purchasing: " + result);
                    //setWaitScreen(false);
                    return;
                }
                if (!verifyDeveloperPayload(purchase)) {
                    //corrupted
                    complain("Error purchasing. Authenticity verification failed.");
                    //setWaitScreen(false);
                    return;
                }

                //successful
                if (purchase.getSku().equals(NO_ADS_PRODUCT_ID)) {
                    // bought the premium upgrade!
                    alert("Thank you for upgrading to premium!");
                    boolean isPremium = true;
                    SharedPrefsUtils.setPremium(BaseActivity.this, isPremium);
                    EventBus.getDefault().post(new InAppBillingUiUpdateEvent(isPremium));
                    //setWaitScreen(false);
                }
            }
        }; 

person Ravi    schedule 21.07.2015    source источник


Ответы (1)


Наконец-то мне удалось найти проблему в коде IabHelper. Так вот, всякий раз, когда код результата Activity.RESULT_CANCELED возвращается в методе handleActivityResult, IabResult для всех таких случаев фиксируется пользователь отменен (-1005) независимо от причины. Таким образом, чтобы получить правильный фактический код ответа, замените следующий код в handleActivityResult.

 else if (resultCode == Activity.RESULT_CANCELED) {
        logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode));
        result = new IabResult(IABHELPER_USER_CANCELLED, "User canceled.");
        if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null);
    }

с этим

 else if (resultCode == Activity.RESULT_CANCELED) {
        logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode));
        result = new IabResult(responseCode, null);
        if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null);
    }

надеюсь, это сэкономит чье-то время

person Ravi    schedule 21.07.2015