2017-08-24 104 views
-1

問題是,該應用程序不允許用戶購買多次。我需要讓我的物品消耗,答案全部解釋爲hereAndroid應用程序內購買易耗品

我需要知道的是正是我不得不把這個部分:

mHelper.consumeAsync(purchase, mConsumeFinishedListener); 

在我的代碼?

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (mHelper != null) mHelper.dispose(); 
     mHelper = null; 
    } 

    protected void onActivityResult(int requestCode, int resultCode, 
            Intent data) 
    { 
     if (!mHelper.handleActivityResult(requestCode, 
       resultCode, data)) { 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 




    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
      = new IabHelper.OnIabPurchaseFinishedListener() { 
     public void onIabPurchaseFinished(IabResult result, 
              Purchase purchase) 
     { 
      if (result.isFailure()) { 
       // Handle error 
       return; 
      } 
      else if (purchase.getSku().equals(ITEM_SKU)) { 
       consumeItem(); 
       buyButton.setEnabled(false); 
      } 

     } 
    }; 





    public void consumeItem() { 
     mHelper.queryInventoryAsync(mReceivedInventoryListener); 


    } 

    IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener 
      = new IabHelper.QueryInventoryFinishedListener() { 

     public void onQueryInventoryFinished(IabResult result, 
              Inventory inventory) 

     { 

      if (result.isFailure()) { 
       // Handle failure 
      } else { 
       mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
         mConsumeFinishedListener); 


      } 
     } 
    }; 



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

        if (result.isSuccess()) { 
         clickButton.setEnabled(true); 

        } else { 
         // handle error 
        } 
       } 
      }; 




    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_in_app_billing); 

     buyButton = (Button)findViewById(R.id.buyButton); 
     clickButton = (Button)findViewById(R.id.clickButton); 



     String base64EncodedPublicKey = 
       "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3F8aC2kUFQHf/X3xnfgulD0UpgrQifcjZ66zzhUPhQ/TcrONl22V74Q/Uj57rCwSUfdzz7wbUPxuPayGKBozzoH+2vhMGSetgCFZLcrNbRpBBbihOZrj//GTXMa6VkpUPTAqthEF0oI1M/bW9vF75xZI3u2KAS/AYDfqLTRZ6mh+xh6n/3i0ntSZT+UwzguwyHfS9JwuGGg5AKSutaWhnvOTNeQjsxTskc483h9DfvvRiwdiQPlv7wJRSSIc3RHVwDHleEJ8rsRa8JTypBJuL5oRZSGePUlejWhJvs23tgy5xrvGsMgsICssGzIem2XXSUWm/NDjeO0v2Eh+quQKVQIDAQAB"; 

     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 
       { 
        Log.d(TAG, "In-app Billing is set up OK"); 
       } 
      } 


     }); 

    } 

} 

因爲在other answer Haxis說:「你要調用剛剛購買後的消費功能。」

任何人都可以幫助我嗎?

+0

請不要發佈垃圾填充物。解釋你的問題,而不是.. –

+0

可能重複[在應用程序結算v3 Android非消耗品](https://stackoverflow.com/questions/17804095/in-app-billing-v3-android-non-consumable-items) – Clijsters

+0

我有完全相同的問題。但規則說避免「尋求幫助,澄清或回答其他答案」,所以我提出了另一個問題。 – James

回答

2

,你可以在谷歌樣品中檢查 - https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/MainActivity.java

consumeAsync()被調用兩次:

- 當購買完成後,在OnIabPurchaseFinishedListener

- 當庫存在查詢活動的開始,在QueryInventoryFinishedListener

您還需要在購買成功時以及查詢庫存並查找時調用它(因爲如果物品被消耗,那麼它不會出現在庫存中)

相關問題