2015-11-23 15 views
7

Attualmente sto sviluppando un'applicazione con la fatturazione in App. tutto funziona bene. e ho già pubblicato l'app nel canale Beta e l'ho testata con gli utenti di prova con articoli reali, e funziona.Android in App test di fatturazione in arresto anomalo Play store

Tuttavia durante il debug, sto usando l'oggetto android.test.purchased, il mio play store si arresta in modo anomalo quando premo il pulsante di acquisto.

enter image description here

e ottengo il seguente errore (s):

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) 

volte l'acquisto continua dopo, e altre volte, i miei si blocca app.

Ho provato questo su diversi dispositivi (Nexus 7 con Android 6.0, Nota 5 con Android 5.1.1, Galaxy S3 con Android 4.3, LG G3 con Android 4.4), tutti hanno lo stesso comportamento.

Ciò che mi fa impazzire è il fatto che gli elementi di app reali funzionano perfettamente. il che mi fa pensare che questo significhi che il mio codice va bene. ma stando accadendo con gli articoli di prova, mi preoccupa che possa essere ripetuto con oggetti reali con utenti reali una volta pubblicati.

Apprezzo il vostro aiuto per farmi sapere se sto facendo qualcosa di sbagliato che porta a giocare a crash del negozio, o questo può succedere?

Si noti che sono abbastanza nuovo per lo sviluppo di Android.

Grazie.

Ecco il mio codice per la fatturazione in 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

Ciao ho di fronte lo stesso problema. Hai trovato qualche soluzione? –

+0

Non ancora, sfortunatamente. – Tamer

+0

ok per favore aggiorna se hai trovato qualche soluzione. –

risposta

3

Il problema era in Google Play v6.0.0, è ora corretto in v6.0.5 (confermato sia su un dispositivo Samsung che su un dispositivo Nexus).

Se non si ottiene automaticamente l'aggiornamento Google Play, è possibile scaricare manualmente dalla ApkMirror.com ecc

+0

se non hai ottenuto automaticamente l'aggiornamento di Google Play, puoi scaricarlo manualmente da ApkMirror.com – Tamer

+1

si blocca di nuovo al giorno d'oggi: https://stackoverflow.com/q/45240471/1472483 – MarsPeople