Ich habe ein Problem mit meiner Android App. Ich versuche ein monatliches Abonnement zu implementieren. Ich habe das IAP erstellt, die App ist in der Beta und ich bin als Tester registriert.Android In App-Abonnement gibt immer den ersten Empfang zurück, ich bekomme nie die Erneuerung
Beim Kauf des Abonnements funktioniert alles wie erwartet. Ich kann es als Tester kaufen, was bedeutet, dass das Abonnement nicht wirklich belastet wird, und es wird jeden Tag erneuert.
Aber hier ist, wo mein Problem beginnt. Ich bekomme immer den Originalbeleg mit dem Original purchaseTime
und purchaseToken
. Wann immer die App startet, rufe ich queryInventoryAsync
an und erwarte, dass ich den letzten Erneuerungsbeleg bekomme. Aber ich bekomme immer den ORIGINAL-Beleg.
Ist mein Denken falsch? Sollte ich nicht den neuen Beleg bekommen, mit dem neuen orderID
? (Wie Google Docs sagen, ich sollte eine orderID
wie GPA.blabla..0|1|2
bekommen. Ich weiß, es gibt einige Caching-Mechanismen, aber ich habe drei Tage gewartet, und ich bekomme immer noch die ursprüngliche Reihenfolge, während ich die neueste erhalten sollte.
Ich benutze immer cordova mit crosswalk, und ich benutze das folgende Plugin für Käufe: https://github.com/j3k0/cordova-plugin-purchase.Ich weiß nicht, ob es wichtig ist, sollte es nicht, da es die gleiche IABHelper-Klasse von jedem anderen Plugin verwendet, aber vielleicht ist es etwas falsch mit ihrem Code?
ich loggte die genaue Antwort von dem Anruf zu mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken);
und es enthält die falschen Daten (Originalrechnung). Warum? :(
Hat jemand anderes ein ähnliches Problem? Liegt es daran, das Abonnement zu testen? Wird es funktionieren, wenn Sie tatsächlich kaufen? Ich habe bereits mit echtem Geld getestet, aber es wird noch eine Woche dauern, bis das Abonnement erneuert wird.
Vielen Dank.
Bearbeiten: Löschen des Cache von Google Play Store App ist keine Option. Ich kann meine Benutzer nicht darum bitten. Außerdem habe ich das getestet und es funktioniert nicht!
Bearbeiten 2 Produktion Abonnement (echtes Geld, keine Tests) funktioniert auch nicht !. Immer noch den Originalbeleg erhalten!
Edit 3 Ich habe dieses Problem noch nicht gelöst. Was wäre der richtige Weg, um die Erneuerungen zu erkennen? Sollte ich einfach einen Cronjob auf dem Backend ausführen und jedes Abonnement gegen Google's Purchase Status API abfragen?
Bearbeiten 4 Vielen Dank für die Antworten. Ich verwende bereits die Kaufstatus-API im Backend, um festzustellen, ob das Abonnement erneuert wurde oder nicht. Aber es ist irgendwie scheiße, was passiert, wenn ich 100.000 Abonnements bekomme? Das Skript, das durch alle von ihnen geht und die API von Google abfragt, wird eine sehr lange Zeit brauchen ... und das Skript sollte wahrscheinlich täglich laufen!
Aber lassen Sie die Dinge klären.
Bedeutet dies, dass die offizielle Dokumentation veraltet ist?.
Sind die GPA.blabla..0 GPA.blabla..1
Stil Erneuerungen tot?
bearbeiten 5. Dezember 2016 aktualisieren: Ich habe Abonnements in der Produktion für ein paar Monate laufen jetzt, und ich immer noch nicht Erneuerungen mit ..0, ..1. Ich habe einen Cronjob eingerichtet, der täglich läuft. Es durchläuft meine aktiven Abonnements und fragt sie gegen die Google Purchase API ab. Wenn die API ein anderes Ablaufdatum zurückgibt als das in meiner Datenbank gespeicherte, bedeutet dies, dass das Abonnement erneuert wurde.
bearbeiten 6. Juli 2017 aktualisieren ich auf meinem täglichen Skript noch verlassen, die alle Abonnements analysiert und aktualisiert den Status von Google Abfrage der Käufe API https://developers.google.com/android-publisher/api-ref/purchases/subscriptions verwenden. Es hat bisher sehr gut funktioniert.
Kurzer Tipp: Abonnements in Batches abfragen! Ich habe einige Tests durchgeführt und konnte in derselben Anfrage bis zu 1.000 Abonnements bündeln. Das Limit wird durch die maximale Antwortgröße der API festgelegt.
Können Sie versuchen, Google Play App-Cache aus den Geräteeinstellungen> Anwendungen zu löschen und dann zu testen? – random
Vielen Dank für Ihre Antwort, aber ich kann meine Benutzer nicht darum bitten. Ich habe es selbst getestet, ohne Ergebnisse. – tehmaestro
Rufen Sie 'getStringArrayList (" INAPP_PURCHASE_DATA_LIST ")' auf das Ergebnis von 'getPurchases'? Gibt es nur ein einzelnes Element im Array? –