2017-07-07 4 views
0

初めてアプリ内課金を実装しています。私は最初の取引を完了することができましたが、同じアイテムを購入している間に2回目です「エラー応答:7:アイテムはすでに所有しています」 on onIabPurchaseFinished方法、再購入可能?どんな助けもありがとう。Inapp請求:エラー応答:7:テストトランザクションで既に所有されているアイテム

コード構造のスクリーンショットも添付されています。 code structure

私は以下のメソッドを呼び出しています: initilizeInAppPurchasePakages();

public void initilizeInAppPurchasePakages() 
    { 
     String base64EncodedPublicKey=getString(R.string.inAppBillingKey); 
     mHelper = new IabHelper(getActivity(), base64EncodedPublicKey); 
     mPurchaseFinishedListener 
       = new IabHelper.OnIabPurchaseFinishedListener() { 
      public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
      { 
       if (result.isFailure()) { 
        Log.d(TAG, "Error purchasing: " + result); 
       //  Toast.makeText(getActivity(),"fail to purchase"+result, Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       else if (purchase.getSku().equals(purchaseItemId)) { 
        transactionId=purchase.getOrderId(); 
        PackageFragment.isNeedToUpdate = true; 
        // consume the gas and update the UI 
        // Toast.makeText(getActivity(), "purchase successfully", Toast.LENGTH_SHORT).show(); 
        mHelper.consumeAsync(purchase, 
          mConsumeFinishedListener); 
       } 
       else if (purchase.getSku().equals(purchaseItemId)) { 
        // give user access to premium content and update the UI 
        // Toast.makeText(getActivity(), "purchase successfully", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }; 


     mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
      public void onIabSetupFinished(IabResult result) { 
       if (!result.isSuccess()) { 
        // Oh no, there was a problem. 
        // Toast.makeText(getActivity(), "connection Error", Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
       // Toast.makeText(getActivity(), "connected successfully", Toast.LENGTH_SHORT).show(); 
        Log.d(TAG, "Problem setting up In-app Billing: " + result); 
        mHelper.launchPurchaseFlow(getActivity(), purchaseItemId, 10001, 
          mPurchaseFinishedListener, "testing"); 

       } 
       // Hooray, IAB is fully set up! 
      } 
     }); 
     mConsumeFinishedListener = 
       new IabHelper.OnConsumeFinishedListener() { 
        public void onConsumeFinished(Purchase purchase, IabResult result) { 
         if (result.isSuccess()) { 
          serverUtilities.savePayment(pakageId,pakagePrice,transactionId); 
          // Toast.makeText(getActivity(), "consumed", Toast.LENGTH_SHORT).show(); 
          // provision the in-app purchase to the user 
          // (for example, credit 50 gold coins to player's character) 
         } 
         else { 

          // handle error 
         } 
        } 
       }; 
    } 

答えて

0

さてさて、

アプリ内課金でグーグルの読み取りマニュアルの時間を過ごした後私は私がやったので、どのようなテストを通じてアプリ内課金でテストする必要があることがわかった

テスト課金:

mHelper.launchPurchaseFlow(getActivity(), purchaseItemIdSKU, 10001, 
          mPurchaseFinishedListener, "testing"); 

すでに購入済みのエントリレコードを削除するのは初めてです私が上記で使用したstの請求の行: ArrayList skusToBeListed = null;

   skusToBeListed = new ArrayList<String>(); 
       skusToBeListed.add (SKU_PREMIUM); 
       skusToBeListed.add (SKU_PREMIUM_ELITE); 
       skusToBeListed.add (SKU_PREMIUM_PLUS); 

mHelper.queryInventoryAsync(true、skusToBeListed、mGotInventoryListener);

となったら、頭痛のない多くのテスト予約ができます。

mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 
      @Override 
      public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
       if (result.isFailure()) { 
        //complain("Failed to query inventory: " + result); 
        return; 
       } 

       Purchase currentPurchase = inventory.getPurchase(purchaseItemIdSKU); 
       if(currentPurchase != null) 
       { 
        //Boolean mIsPremium = (currentPurchase != null && verifyDeveloperPayload(currentPurchase)); 
             mHelper.consumeAsync(currentPurchase,mConsumeFinishedListener); 

       } 





     } 
    } ; 

注:「GPA:そう返されたことをどのように処理するかを確認することはありませんテストの課金トランザクションIDの場合は 、私は次の形式にそれをハードコーディングすることによって私のアプリ内課金をテストしました。 1234-5678-9012-34567 "

私が生産モードで使用していたのであれば、上のコードでは問題ありませんでしたが、テストモードの場合、私に説明して解決方法を教えてくれました私はそれを解決した。

関連する問題