Android в приложении биллинг тест покупки сбои Play store

В настоящее время я разрабатываю приложение с помощью биллинга приложений. все работает нормально. и я уже опубликовал приложение в бета-канале и протестировал его с тестовыми пользователями с реальными предметами, и он работает.

однако во время отладки я использую android.тест.купленный товар, мой play store падает, когда я нажимаю кнопку покупки.

enter image description here

и я получаю следующую ошибку(ы):

E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.android.vending, PID: 25463
                                                   java.lang.NullPointerException: Attempt to read from field 'com.google.android.finsky.protos.Acquisition$AutoDismissTemplate com.google.android.finsky.protos.Acquisition$PostAcquisitionPrompt.autoDismissTemplate' on a null object reference
                                                       at com.google.android.finsky.billing.SuccessStep.getLayoutResId(SuccessStep.java:75)
                                                       at com.google.android.finsky.billing.lightpurchase.PurchaseFragment.onStateChange(PurchaseFragment.java:31066)
                                                       at com.google.android.finsky.fragments.SidecarFragment.notifyListener(SidecarFragment.java:255)
                                                       at com.google.android.finsky.fragments.SidecarFragment.setState(SidecarFragment.java:250)
                                                       at com.google.android.finsky.billing.lightpurchase.CheckoutPurchaseSidecar.confirmAuthChoiceSelected(CheckoutPurchaseSidecar.java:631)
                                                       at com.google.android.finsky.billing.lightpurchase.PurchaseFragment.onStateChange(PurchaseFragment.java:32156)
                                                       at com.google.android.finsky.fragments.SidecarFragment.notifyListener(SidecarFragment.java:255)
                                                       at com.google.android.finsky.fragments.SidecarFragment.setState(SidecarFragment.java:250)
                                                       at com.google.android.finsky.billing.lightpurchase.CheckoutPurchaseSidecar.access00f730cd3(CheckoutPurchaseSidecar.java:72)
                                                       at com.google.android.finsky.billing.lightpurchase.CheckoutPurchaseSidecar.run(CheckoutPurchaseSidecar.java:1009)
                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:148)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-23 02:22:43.202 590-739/? W/ActivityManager:   Force finishing activity com.android.vending/com.google.android.finsky.billing.lightpurchase.IabV3Activity


Purchase finished: IabResult: Null data in IAB result (response: -1002:Bad response received), purchase: null
Error purchasing: IabResult: Null data in IAB result (response: -1002:Bad response received)

иногда покупка продолжается после этого, и в других случаях мое приложение падает.

я протестировал это на нескольких устройствах (Nexus 7 с Android 6.0, Примечание 5 с Android 5.1.1, Galaxy S3 с Android 4.3, LG G3 с Android 4.4), все имеют одинаковое поведение.

что меня злит, так это то, что реальные элементы приложения работают безупречно. что заставляет меня думать, что это означает, что мой код в порядке. но когда это происходит с тестовыми элементами, я беспокоюсь, что это может повториться с реальными элементами с реальными пользователями при публикации.

I оцените вашу помощь, чтобы сообщить мне, если я делаю что-то не так, что приводит к сбою Play store, или это может произойти?

обратите внимание, что я довольно новыми для Android развития.

спасибо.

вот мой код для выставления счетов в приложении:

 ///... part of onCreate:

 mHelper = new IabHelper(this, base64EncodedPublicKey);

        mHelper.startSetup(new
                                   IabHelper.OnIabSetupFinishedListener() {
                                       public void onIabSetupFinished(IabResult result) {
                                           if (!result.isSuccess()) {
                                               Log.d(TAG, "In-app Billing setup failed: " +
                                                       result);
                                           } else {
                                               // Hooray, IAB is fully set up. Now, let's get an inventory of
                                               // stuff we own.
                                               Log.d(TAG, "Setup successful. Querying inventory.");
                                                mHelper.queryInventoryAsync(mGotInventoryListener);                                           }
                                       }
                                   });

/////////////////

public void startPurchase(String ITEM_SKU) { // Start the purchase process here

    String purchaseToken = "inapp:" + getPackageName() + ":"+ ITEM_SKU;

    Log.d(TAG, "Purchase started for : " + ITEM_SKU);

    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10002,
                mPurchaseFinishedListener, purchaseToken);
}


// Callback for when a purchase is finished
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        Log.d(TAG, "Purchase finished: " + result + ", purchase: "
                + purchase);
        if (result.isFailure()) {
            Log.d(TAG,"Error purchasing: " + result);
            if (result.getResponse()==7){
                if(myInventory.hasPurchase(ITEM_SKU))
                {
                    Log.d(TAG,"Ooops, Item already purchased, consume it");
                    mHelper.consumeAsync(myInventory.getPurchase(ITEM_SKU),mConsumeFinishedListener2);
                }
            }
            return;
        }

        Log.d(TAG, "Purchase successful.");

        if (purchase.getSku().equals(ITEM_SKU)) {
            mHelper.consumeAsync(purchase, mConsumeFinishedListener);

        }
    }
};

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
                                         Inventory inventory) {
        Log.d(TAG, "Query inventory finished.");

        if (result.isFailure()) {
            Log.d(TAG,"Failed to query inventory: " + result);
            return;
        }

        Log.d(TAG, "Query inventory was successful.");

        myInventory = inventory;
        //Process inventory


    }
};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
        new IabHelper.OnConsumeFinishedListener() {
            public void onConsumeFinished(Purchase purchase,
                                          IabResult result) {

                if (result.isSuccess()) {
                    Log.d(TAG,"consume successful for " + purchase.getSku() + " & " + result.getMessage());
                    updateCoinsAndScore(coinsToAdd, 0);
                    Toast.makeText(getApplication(), "تم إضافة عدد " + coinsToAdd + " عملات إلى رصيدك", Toast.LENGTH_LONG).show();
                    //reset values
                    coinsToAdd=0;
                    ITEM_SKU="";
                } else {
                    Log.d(TAG, "Consume failed " + result.getMessage());                    }
            }
        };

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener2 =
        new IabHelper.OnConsumeFinishedListener() {
            public void onConsumeFinished(Purchase purchase,
                                          IabResult result) {

                if (result.isSuccess()) {
                    Log.d(TAG,"consumed, starting purchase again");
                    Log.d(TAG,"consume successful for " + purchase.getSku() + " & " + result.getMessage());

                    startPurchase(ITEM_SKU);

                } else {
                    Log.d(TAG,"Consume failed " + result.getMessage());                    }
            }
        };

1 ответов


проблема была в Google Play v6.0.0, теперь он зафиксирован в v6.0.5 (подтверждено как на Samsung, так и на устройстве Nexus).

Если вы не получили обновление Google Play автоматически, вы можете загрузить его вручную изApkMirror.com etc.