2014-03-03 4 views
6

Ich habe ein Problem mit dem Testen meiner App. Ich habe 2 Artikel, die der Benutzer kaufen kann. Vor einigen Tagen wusste ich nicht, dass ich die Einkäufe konsumieren sollte. Heute erhalte ich jedes Mal, wenn ich versuche, eines der Objekte zu kaufen, den Code 7 (Item Already Owned), weil ich es nicht konsumiert habe. Was kann ich tun, um einen alten Kauf zu konsumieren?Konsumieren alten Käufe Android IAB V3

ADDED: Beide Titel sind ‚nicht verwaltet‘ in Console Entwickler

+0

Verwenden Sie die consume-Methode, um das Produkt helperObject.consumeAsync zu konsumieren (con, mConsumeFinishedListener); – Meenal

+0

Ich habe versucht, aber Code 5 (Entwicklerfehler) erhalten. Aber wenn ich zweiten Artikel konsumiere, empfange ich Code 0. – ziwert

Antwort

6

ich mit falschen Zeichen zu konsumieren versucht. Dieser Code hat mir geholfen.

Bundle ownedItems = mService.getPurchases(3, context.getPackageName(), "inapp", null); 
int response = ownedItems.getInt("RESPONSE_CODE"); 
if (response == 0) 
{ 
    ArrayList<String> ownedSkus = ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST"); 
    ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); 
    //ArrayList<String> signatureList = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE"); 
    //String continuationToken = ownedItems.getString("INAPP_CONTINUATION_TOKEN"); 
    for (int i = 0; i < purchaseDataList.size(); ++i) { 
     try { 
      String purchaseData = purchaseDataList.get(i); 
      JSONObject jo = new JSONObject(purchaseData); 
      final String token = jo.getString("purchaseToken"); 
      String sku = null; 
      if (ownedSkus != null) 
       sku = ownedSkus.get(i); 
      consume(sku, token, purchaseData); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 
} 
+0

Was ist mService hier? –

+0

@PulahNandha Es ist IInAppBillingService. Weitere Informationen [hier] (http://developer.android.com/google/play/billing/billing_integrate.html), wenn Sie benötigen – ziwert

2

Für den Konsum von inapp-Produkt müssen Sie kaufen, dass sku. Dafür benötigen Sie zuerst oder erhalten INVENTAR von allen Produkten oder KAUFEN genau dieses Produkt.

Bitte überprüfen Sie den Code unten, der Ihnen helfen kann, Produkte zu verwenden, die vorher gekauft wurden.

public void consume(final String skuName) { 
    mHelper.queryInventoryAsync(true, new IabHelper.QueryInventoryFinishedListener() { 
     @Override 
     public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
      if (inventory.getSkuDetails(skuName) != null){ 
       mHelper.consumeAsync(inventory.getPurchase(skuName), null); 
      } 
     } 
    }); 
} 
0

Dank der vorherigen Antworten habe ich dieses Solt. zum Löschen aller Käufe

import com.android.vending.billing.util.Inventory; 
import com.android.vending.billing.util.Purchase; 

public class BasePurchaseActivity { 

    protected IabHelper billingHelper; 
    ... 

    /** 
    * Means it will clear our the purchase history 
    */ 
    protected void consumeAllPurchases() { 

     // You know your product ids 
     Set<String> allProductIds = com.demo.myapp.AppMgr.getAllAppProductIds(); 

     try { 

      Inventory inventory = getInventory(); 

      for (String curProdId : allProductIds) { 

       Purchase purchase = inventory.getPurchase(curProdId);    

       if (purchase != null) { 

        billingHelper.consumeAsync(purchase, null); 
       } 

      } 

     } 
     catch (IabException iabEx) { 

      iabEx.printStackTrace(); 
     } 
    }