2015-11-23 10 views
7

Ich entwickle gerade eine App mit App-Abrechnung. Alles funktioniert gut. und ich habe die App bereits im Beta-Kanal veröffentlicht und mit Testbenutzern mit echten Items getestet, und es funktioniert.Android in App Abrechnungstest Kaufabstürze Play Store

Allerdings verwende ich beim Debuggen den android.test.purchased-Artikel, mein Play Store stürzt ab, wenn ich den Buy-Button drücke.

enter image description here

und ich erhalte die folgenden Fehler (e):

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.access$1900$2f730cd3(CheckoutPurchaseSidecar.java:72) 
                 at com.google.android.finsky.billing.lightpurchase.CheckoutPurchaseSidecar$1.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) 

manchmal der Kauf weiterhin danach, und andere Zeiten, meine App stürzt ab.

Ich testete dies auf mehreren Geräten (Nexus 7 mit Android 6.0, Note 5 mit Android 5.1.1, Galaxy S3 mit Android 4.3, LG G3 mit Android 4.4), alle haben das gleiche Verhalten.

Was mich verrückt macht, ist, dass echte App-Artikel einwandfrei funktionieren. Das lässt mich denken, dass mein Code in Ordnung ist. Aber wenn das mit den Testgegenständen geschieht, mache ich mir Sorgen, dass es sich bei Veröffentlichung mit echten Artikeln mit echten Benutzern wiederholen könnte.

Ich schätze Ihre Unterstützung, um mich wissen zu lassen, wenn ich etwas falsch mache, was dazu führt, dass der Laden abstürzt, oder kann das passieren?

Bitte beachten Sie, dass ich ziemlich neu in Android Entwicklung bin.

Danke.

Hier ist mein Code für in der Abrechnung App:

///... 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());     } 
      } 
     }; 
+0

herunterladen Hallo ich gleiches Problem konfrontiert habe. Hast du irgendeine Lösung gefunden? –

+0

Noch nicht, leider. – Tamer

+0

ok bitte aktualisieren Sie, wenn Sie irgendeine Lösung gefunden haben. –

Antwort

3

Das Problem in Google Play war v6.0.0, ist jetzt in v6.0.5 behoben (bestätigt sowohl auf einem Samsung- als auch auf einem Nexus-Gerät).

Wenn Sie das Google Play-Update automatisch erhalten haben, können Sie es manuell aus ApkMirror.com usw.

+0

Wenn Sie das Google Play-Update nicht automatisch erhalten, können Sie es herunterladen manuell von ApkMirror.com – Tamer

+1

es stürzt heute wieder ab: https://stackoverflow.com/q/45240471/1472483 – MarsPeople

Verwandte Themen