2015-11-23 26 views
7

私は現在、App請求でアプリを開発中です。すべて正常に動作します。私はすでにベータ版のチャンネルでアプリを公開し、実際の商品を使ってテストユーザーとテストしています。アプリの請求テスト購入がクラッシュするPlayストア

デバッグ中は、android.test.purchasedアイテムを使用しています。購入ボタンを押すとプレイストアがクラッシュします。

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.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) 

を時々購入はその後続け、他の回、私のアプリがクラッシュします。

これをいくつかのデバイス(Android 6.0のNexus 7、Android 5.1.1のNote 5、Android 4.3のGalaxy S3、Android 4.4のLG G3)でテストしましたが、すべて同じ動作です。

私が怒っているのは、アプリアイテムの中身が完璧に機能しているということです。これは私のコードが上手であることを意味すると私に思い出させます。テスト項目でこれが起こっていると、実際のユーザーが実際のアイテムを公開したときにそれが実際のアイテムと繰り返される可能性があることを心配しています。

私が店舗のクラッシュを引き起こすような何か間違ったことをしている場合は、私に知らせていただきありがとうございますか?

私は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());     } 
      } 
     }; 
+0

から手動でダウンロードすることができます。解決策は見つかりましたか? –

+0

まだ、残念ながら。 – Tamer

+0

ok解決方法を見つけたら更新してください。 –

答えて

3

問題はGoogle Playの中でしたv6.0.0では、v6.0.5で修正されました(SamsungとNexusの両方のデバイスで確認済み)。

あなたは自動的にGoogle Playのアップデートを取得していない場合、私は同じ問題に直面しているこんにちは、あなたはなどApkMirror.com

+0

Google Playのアップデートを自動的に入手できなかった場合は、ダウンロードできます手動でApkMirror.com – Tamer

+1

からそれは最近またクラッシュしている:https://stackoverflow.com/q/45240471/1472483 – MarsPeople

関連する問題