2014-05-13 5 views
7

Ich versuche, In-App-Abrechnung für meine App zu implementieren.
Ich verfolge die Implementierung in der TriviaDrive-Beispielanwendung von Google und die entsprechende Dokumentation auf der Developer-Website.
Mein Code funktioniert wie erwartet, aber wenn ich "Query Items Available for Purchase" versuche, enthält das resultierende Inventory-Objekt 0 Objekte, obwohl ich ein Produkt erstellt habe.In-App-Abrechnung: "Zum Kaufen verfügbare Artikel abfragen" gibt 0 Artikel zurück

ich ein verwaltetes Produkt mit der ID erstellt haben paid_version mit der Google Play Developer Console, wie in der folgenden Abbildung dargestellt: In-App Products - Screenshot

Die Dokumentation zeigt an, dass „die Produktdetails abzurufen, rufen Sie queryInventoryAsync(boolean, List, QueryInventoryFinishedListener) auf Ihrem IabHelper Beispiel."

In meinem eigenen Code nenne ich
mHelper.queryInventoryAsync(true, iabItemSkus, mQueryFinishedListener)
Wo:
mHelper meine IabHelper Instanz ist
iabItemSkus ist eine Liste ein einzelnes Element mit dem Wert "paid_version" unter
mQueryFinishedListener ist mein Zuhörer definiert enthält.

IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { 
     @Override 
     public void onQueryInventoryFinished(IabResult result, Inventory inv) { 
      if (result.isFailure()) { 
       Log.d(TAG, "Querying Inventory Failed: " + result); 
       return; 
      } 

      Log.d(TAG, "Title: " + inv.getSkuDetails(SKU_PAID).getTitle()); 
      Log.d(TAG, "Description: " + inv.getSkuDetails(SKU_PAID).getDescription()); 
      Log.d(TAG, "Price = " + inv.getSkuDetails(SKU_PAID).getPrice()); 
     } 
    }; 

Aber auf dem Debuggen kann ich sehen, dass das Inventory Objekt im QueryInventoryFinishedListener enthält zurückgegeben 0 Produkte, und so ruft wie inv.getSkuDetails(SKU_PAID).getTitle() eine Null-Zeiger Ausnahme geben.

Ich kann nicht herausfinden, wo ich falsch liege. Ich habe erwartet, dass das Objekt Inventory die Details für mein In-App-Produkt paid_version enthält.

Unten sind nur die Teile meines Codes und LogCat Ich denke, sind relevant für dieses Problem (versuchen zu vermeiden, Ihnen Code-Überlastung!), Aber wenn mehr Details zu einem anderen Teil des Codes hilfreich wäre, lassen Sie es mich wissen .

Aus meiner Tätigkeit:

Aus meiner LogCat:

... 
05-13 19:46:59.609 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Starting in-app billing setup. 
05-13 19:46:59.629 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Billing service connected. 
05-13 19:46:59.629 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Checking for in-app billing 3 support. 
05-13 19:46:59.629 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ In-app billing version 3 supported for xxx.xxxxxx.xxxxxx 
05-13 19:46:59.639 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Subscriptions AVAILABLE. 
05-13 19:46:59.639 22390-22390/xxx.xxxxxx.xxxxxx D/MyActivity﹕ Setup successful. Querying inventory. 
05-13 19:46:59.639 22390-22390/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Starting async operation: refresh inventory 
05-13 19:46:59.649 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Querying owned items, item type: inapp 
05-13 19:46:59.649 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Package name: xxx.xxxxxx.xxxxxx 
05-13 19:46:59.649 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Calling getPurchases with continuation token: null 
05-13 19:46:59.659 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Owned items response: 0 
05-13 19:46:59.659 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Continuation token: null 
05-13 19:46:59.659 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Querying SKU details. 
05-13 19:46:59.689 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Querying owned items, item type: subs 
05-13 19:46:59.689 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Package name: xxx.xxxxxx.xxxxxx 
05-13 19:46:59.689 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Calling getPurchases with continuation token: null 
05-13 19:46:59.699 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Owned items response: 0 
05-13 19:46:59.699 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Continuation token: null 
05-13 19:46:59.699 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Querying SKU details. 
05-13 19:46:59.829 22390-22596/xxx.xxxxxx.xxxxxx D/IabHelper﹕ Ending async operation: refresh inventory 
05-13 19:46:59.829 22390-22390/xxx.xxxxxx.xxxxxx D/AndroidRuntime﹕ Shutting down VM 
05-13 19:46:59.829 22390-22390/xxx.xxxxxx.xxxxxx W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41b31ba8) 
05-13 19:46:59.839 22390-22390/xxx.xxxxxx.xxxxxx E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: xxx.xxxxxx.xxxxxx, PID: 22390 
    java.lang.NullPointerException 
      at xxx.xxxxxx.xxxxxx.MyActivity$1.onQueryInventoryFinished(MyActivity.java:266) 
      at xxx.xxxxxx.xxxxxx.util.IabHelper$2$1.run(IabHelper.java:630) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5017) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
... 

PS: Ich habe meinen Code nur aktualisiert zu markieren, welche Linie 266.


Weitere

Ich habe dieses Problem 12 Stunden nach dem Hochladen meiner APK, und wie Sie aus dem LogCat sehen können, zeigt es "In-app billing version 3 supported" für meine App.
Das Problem blieb bestehen, unabhängig davon, ob ich den Status des IN-APP PRODUCT als aktiv oder inaktiv festlegte.

Jetzt 24 Stunden später entscheidet es sich magisch richtig zu arbeiten.

Davon kann ich nur feststellen, dass es ein Problem mit Google Play war, nicht mit meinem Code.

Antwort

2

Ich bin im selben Boot.Ich warte ab, was passiert.

In Google Dokumentation http://developer.android.com/training/in-app-billing/test-iab-app.html

gibt es eine Warnung, vielleicht ist dies das Problem ist:

Warnung: Es kann bis zu 2-3 Stunden dauern, bis nach dem APK Upload für Google Ihre Spiele zu erkennen aktualisierte APK-Version. Wenn Sie Ihre App testen, bevor Ihr hochgeladenes APK von Google Play erkannt wird, erhält Ihre Anwendung die Antwort "Kauf abgebrochen" mit der Fehlermeldung "Diese Version der Anwendung ist für die In-App-Abrechnung nicht aktiviert."

+0

ich für 3 Tage gewartet haben und immer noch die –

1

um In-App Billing Arbeits haben die folgenden Schritte aus:

  • <uses-permission android:name="com.android.vending.BILLING" /> Erlaubnis zum AndroidManifest.xml hinzufügen.
  • Erstellen Sie ein signiertes APK und laden Sie es als Alpha, Beta oder Produktion auf die Entwicklerkonsole hoch.
  • Veröffentlichen Sie die APK oder create a google group and add an alpha list of testers.
  • Sie müssen einige Stunden warten, um die In-App-Käufe in Ihrer App
+0

die gleiche ist der oben Benutzer wird nicht das Ergebnis erhalten: 1 - wenn nicht Benutzer-Berechtigung hinzugefügt, um zu manifestieren. 2 - erhalte keinen öffentlichen Schlüssel, es sei denn, es wurde eine APK hochgeladen. 3 - Ich habe 2 Tage gewartet und konnte die Produkte nicht abfragen. Es funktioniert nur mit statischen Test-SKUs –

0

Spät zu beantworten, auch ich in gleiches Problem lief zu sehen. Nachdem ich 3 Tage lang die gesamte Dokumentation gelesen hatte, fand ich endlich den Schuldigen.

Nach documentation:

Draft Apps werden nicht mehr unterstützt.

Zuvor konnten Sie eine "Entwurf" Version Ihrer App für testen. Diese Funktionalität wird nicht mehr unterstützt. Stattdessen gibt es zwei Möglichkeiten, wie Sie testen können, wie eine Vorabversion App auf dem Google Play Store

funktioniert. Sie können eine App in den Alpha- oder Beta-Vertriebskanäle veröffentlichen. Dadurch ist die App im Google Play Store verfügbar, aber nur für die Tester, die Sie auf eine "Whitelist" setzen. In einigen Fällen können Sie Google Play-Funktionen mit einer nicht veröffentlichten App testen. Sie können beispielsweise die In-App-Rechnungsunterstützung einer unveröffentlichten App mithilfe von statischen Antworten testen: Spezielle reservierte Produkt-IDs, die immer ein bestimmtes Ergebnis liefern (wie "gekauft" oder "zurückerstattet").

Google sollte diesen Prozess erleichtern.

1

Ich habe das gleiche Problem.Wenn Sie den Code IabHelper aussehen, denke ich, das Problem ist folgendes:

Innen queryInventory:

if (querySkuDetails) { 
    r = querySkuDetails(ITEM_TYPE_INAPP, inv, moreItemSkus); 
    if (r != BILLING_RESPONSE_RESULT_OK) { 
     throw new IabException(r, "Error refreshing inventory (querying prices of items)."); 
    } 
} 

Aber dann die ersten paar Zeilen querySkuDetails:

int querySkuDetails(String itemType, Inventory inv, List<String> moreSkus) 
     throws RemoteException, JSONException { 
    logDebug("Querying SKU details."); 
    ArrayList<String> skuList = new ArrayList<String>(); 
    skuList.addAll(inv.getAllOwnedSkus(itemType)); 

Beachten Sie die letzte Zeile bevölkert die skuList mit allen gehört skus. Nicht alle verfügbaren.

Also die Antwort ist, dass der IabHelper nicht wirklich die Abfrage verfügbarer Käufe unterstützt.

0

, um eine Liste der verfügbaren Einkäufe mit Preisen zu erhalten, müssen Sie queryInventoryAsync mit den Parametern aufrufen - Listen von Einkaufs Identifikatoren:

ArrayList<String> skuList = new ArrayList<String>(); 
skuList.add("purchase1"); 
ArrayList<String> subsList = new ArrayList<String>(); 
subsList.add("subscribe1"); 
mHelper.queryInventoryAsync(true, skuList, subsList, mGotInventoryListener);