Ich teste derzeit die In-App-Abrechnung für eine zukünftige App. Nachdem ich das Testobjekt "android.test.purchased" zum ersten Mal erfolgreich "gekauft" habe, erhalte ich jetzt jedes Mal den Antwortcode 7, wenn ich versuche, es erneut zu kaufen. was bedeutet, dass ich diesen Artikel bereits besitze.
12-15 23: 02: 14.149: E / IabHelper (19829): In-App-Abrechnungsfehler: Artikel kann nicht gekauft werden, Fehlerantwort: 7: Artikel bereits im Besitz
Soweit ich weiß, soll dieser Kauf immer möglich sein, oder? Damit der Entwickler seine App testen kann?
Wenn nicht, wie kann ich den Status auf "Nicht besessen" zurücksetzen? Ich verwende das util-Paket aus dem Google In-App Billing Sample.
android
in-app-billing
Psykhi
quelle
quelle
Antworten:
Fügen Sie diesen Code einem Thread hinzu, um eine Verbrauchsanforderung zu initiieren.
Hier für den Kauftest ist purchaseToken
Und
dann ist der Verbrauch erfolgreich.
Vergessen Sie auch nicht, mService in zu veröffentlichen
dann wäre es möglich, wie folgt zuzugreifen:
quelle
Sie müssen keinen speziellen Verbrauchscode schreiben. Verwenden Sie einfach den Befehl adb, um die Google Play Store-Daten zu löschen:
quelle
Es stellt sich heraus, dass sich das gekaufte android.test.purchased-Element wie eine reguläre ID verhält. Wenn Sie es wieder kaufen möchten, müssen Sie es irgendwo in Ihrem Code konsumieren. Ich denke, dass die Google-Dokumentation in dieser Angelegenheit irreführend ist und dass sie eine weitere statische ID hinzufügen sollte, die Sie zu Testzwecken endlos kaufen können.
quelle
billingClient.queryPurchases()
diesen nicht verbrauchten Gegenstand nicht zurückgibt, so dass ich jetzt keinen Gegenstand konsumieren kann, weil ich ihn nicht bekommenpurchaseToken
kannIn-App-Version 3:
quelle
Version 3 - Schnellste Lösung : Wenn Sie den Cache des Google Play Store leeren, wird "android.test.purchased" wieder verfügbar.
quelle
Ich habe ADB Shell verwendet:
quelle
So können wir den Gegenstand konsumieren
quelle
android.test.purchase
irgendwann verwendete, die Probleme verursachte - Inventarisierungsaufgabe in der In-App-Abrechnung warf nur eine Menge Fehler und wurde nie beendet. Wenn Sie dies einmalig ausführen, wird es gelöscht, sodass ich meine zu meiner tatsächlichen SKU verwenden und so weitermachen kann, wie ich es zuvor war. Vielen DankMeiner Meinung nach müssen Sie den Code nicht anpassen, um den Speicher eines externen Anbieters zu löschen, wenn Ihr Programm nicht für den Verbrauch des Artikels ausgelegt ist. Dadurch wird Ihr Code anfälliger und Sie müssen viel Zeit aufwenden, um Code hinzuzufügen und zu entfernen, der nicht zu Ihrer Software gehört. Daher ist es ein schlechtes Design, eine solche Lösung zu implementieren.
Die beste Lösung, die für mich funktioniert hat, um android.test.purchased zu löschen, war
und dann
Ich musste kein Bargeld einlösen und meine Apps-Einstellungen durchsuchen oder den Code dafür ändern. Ich musste die adb zu den Pfadvariablen des Windows-Systems hinzufügen, was ziemlich einfach war. Also ja, du musst adb verwenden, was du wahrscheinlich sowieso brauchst.
Sie fügen einfach Ihre C: \ ... \ android-sdk \ platform-tools hinzu; im Windows-Pfad in Umgebungsvariablen, und ich stelle mir vor, dass es auch unter Mac und Linux OS ziemlich einfach ist. Hoffe, es hilft jemandem, ein paar Tage weniger mit der Implementierung von Android in App-Abrechnungen zu verbringen.
quelle
uninstall
ist nicht notwendig, um android.test.purchased sku zu löschen .Das Hauptproblem ist, dass Sie den
android.test.purchased
Artikel konsumieren müssen . Dieser Artikel ist jedoch nicht in Ihrem Abfrageinventar verfügbar, sodass Sie ihn nicht mit dem normalen Ablauf verwenden können.Wenn Sie also IabHelper in der
IabHelper
Klasse verwenden, können Sie denIInAppBillingService
mService vorübergehend in public ändern , sodass Sie von IabHelper aus darauf zugreifen können.Dann können Sie in Ihrer Klasse so konsumieren,
Bei Erfolg lautet die Antwort 0.
Hoffe das hilft.
quelle
consumeAsync()
auf android.test.purchased . Damit gibt es kein Problem.Zu Testzwecken empfehle ich Ihnen außerdem, einen Code einzufügen, der alle von Ihnen gekauften Produkte löscht, bevor Sie eine Methode aufrufen, die den GP-Kauffluss initialisiert. Das ist besonders bequem, wenn Sie gerade nur einen Gegenstand testen. ZB so:
quelle
Gehen Sie zur Google Play-Konsole und öffnen Sie die Registerkarte Auftragsverwaltung. Dort können Sie Testkäufe erstatten / stornieren.
quelle
Wenn Sie sich in einer Testumgebung befinden
1) Im Fall von android.test.purchased kann ich die gefälschte Zahlung zurücksetzen, indem ich das Android-Gerät neu starte (das Inventar verbraucht).
2) In InApp util gibt es eine Datei namens Security.java, die vorübergehend wie folgt erstellt wird. Da die Testzahlung (Fälschung) aus Sicherheitsgründen immer falsch zurückgibt.
Rufen Sie dann in Ihrem OnIabPurchaseFinishedListener fechInvForconsumeItem () auf
Das fechInvForconsumeItem () ist
Consume Listener ist
quelle
quelle
In meinem Fall scheint Google keinen Kauf für den Artikel aufzuzeichnen. Die lokale Kopie von Google Play Services speichert den Kauf im Cache. Auf diese Weise wird angezeigt, wenn eine zweite Anforderung auf demselben Gerät erfolgt
android.test.purchased already owned
. Wenn Sie jedoch ein anderes Gerät verwenden oder das Gerät zurücksetzen, wird der Cache geleert und der Kauf kann wiederholt werden.quelle
In meinem Fall musste ich nur den Apps-Cache leeren. Nachdem ich den Cache geleert hatte, konnte ich den Kauffluss erneut initiieren.
Von meinem Gerät (4.4.2) aus navigierte ich zu "Einstellungen-> Anwendungsmanager". Als nächstes habe ich die App auf der Registerkarte "DOWNLOADED" und dann auf "Cache löschen" ausgewählt.
quelle
Dies ist der Unterschied zwischen Verbrauchs- und Nichtverbrauchsartikeln. Nicht verbrauchbare Gegenstände (mit denen Sie hier anscheinend zu tun haben) werden dauerhaft nachverfolgt, während verbrauchbare Gegenstände mehrmals gekauft werden können. Sie müssen in Ihre Play-Verwaltungskonsole gehen und den Verkauf stornieren / erstatten, um ihn erneut zu testen.
quelle