2017-08-24 3 views
-1

Le problème est que l'application ne permet pas aux utilisateurs d'acheter plus d'une fois. Je dois rendre mon article consommable, et la réponse est tout expliqué here.Achat via l'application Android pour les consommables

Ce que je dois savoir est exactement où je dois mettre cette partie:

mHelper.consumeAsync(purchase, mConsumeFinishedListener); 

dans mon code?

@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"); 
       } 
      } 


     }); 

    } 

} 

Parce que dans le other answer Haxis dit « vous devez appeler la fonction juste après consommer l'achat. »

Quelqu'un peut-il m'aider s'il vous plaît?

+0

S'il vous plaît ne postez pas garbage fillers. Expliquez votre problème à la place .. –

+0

Copie possible de [Facturation de l'application v3 Android non consommables] (https://stackoverflow.com/questions/17804095/in-app-billing-v3-android-non-consumable-items) – Clijsters

+0

J'ai exactement le même problème. Mais les règles disent d'éviter de «demander de l'aide, des éclaircissements ou de répondre à d'autres réponses», alors j'ai posé une autre question. – James

Répondre

2

Comme vous pouvez le vérifier dans l'échantillon de Google - https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/app/src/main/java/com/example/android/trivialdrivesample/MainActivity.java

consumeAsync() est appelée deux fois:

-Lorsque l'achat est complète, dans OnIabPurchaseFinishedListener

-Lorsque l'inventaire est interrogé à le début de l'activité, en QueryInventoryFinishedListener

Vous devez également l'appeler lorsque l'achat a été effectué ainsi que lorsque vous interrogez l'inventaire et trouvez un article consommable dedans (parce que si l'article est consommé, alors il n'apparaîtra pas dans l'inventaire)