2016-06-17 8 views
2

Ich verwende Abonnements in meiner App und zu Testzwecken verwende ich einen Testentwickler, der Testabonnements kauft.Android-Abonnements getPurchases

Ich habe ein dreimonatiges Abonnement für meine App mit diesem Testentwickler erhalten. Danach habe ich dieses Abonnement von meinem Benutzerkonto gekündigt (was im Grunde bedeutet, dass ich erneuere = false). Sobald ich die Abonnements gekündigt habe, kann ich es wieder von der App kaufen (es ist die Absicht, die Abonnements zu "fusionieren" und die Ablaufzeit zu verschieben. Zum Beispiel wenn ein Monat übrig war und drei Monate mehr kaufen, sollte mein neues wxpiry Datum sein in vier Monaten).

Wenn ich die Methode getPurchases() den gleichen Kauf aufrufen, den ich zum ersten Mal bekam, werden mir Daten gesendet (nichts hat sich geändert, nicht das Token, nicht das Kaufdatum).

Wenn ich diese Daten verwenden, um einen Anforderungsserver zum Server mit Google Developer API (der einzige Weg, den ich weiß, um das Ablaufdatum zu verlangen) zu tun, ist das Ablaufdatum in der Vergangenheit zurück. Wenn ich also eine Geschäftslogik mache, muss ich bedenken, dass das Abonnement abgelaufen ist, aber dennoch sind es die Daten, die ich von GooglePlay erhalte, wenn ich getPurchases() abfrage. Und in der Dokumentation heißt es: "Die Methode getPurchases() gibt keine fehlgeschlagenen oder abgelaufenen Abonnements zurück."

Also, was ich denke, es ist, dass, wenn ich zum zweiten Mal bougth, eine neue Kaufdaten generiert worden sein müssen, mit neuen Token Server zu Server abzufragen, aber ich bekomme es nicht.

Irgendwelche Ideen über was könnte passieren?

Auch ich würde gerne wissen, wo kann ich diese Bestellungen in meinem Google-Konto sehen, weil ich in meinem Händlerkonto eingecheckt habe, sehe ich sie nicht. Danke!

Antwort

1

Wenn 3 Jahre vergangen sind, nehme ich an, dass Sie Google In-App Billing v2 verwendet haben.

Dennoch bleiben Probleme in v3 (zumindest für die Sandbox/Test-Konten) und Synchronisierung. Sie können sich wirklich nur auf die Google In-App Billing v3-API (GIABAPIv3) verlassen, um Ihnen nach erfolgreichem Abschluss des Zahlungs-Popup-Ablaufs eine neue purchaseToken und developerPayload zur Verfügung zu stellen. purchaseData zurückgegeben von getPurchases kann nicht mit der Realität * übereinstimmen, wie ich oft beobachtet habe. Darüber hinaus ist das Verhalten des GIABAPIv3-Popup-Flusses möglicherweise nicht mit der Realität * synchron.

Es ist möglich, dass purchaseData von GIABAPIv3 den falschen isAutoRenewing-Status und für den GIABAPIv3-Popup-Fluss ebenfalls widerspiegelt! Zum Beispiel kann ein Abonnement in der Realität abgebrochen werden (und abgelaufen), aber sowohl GIABAPIv3 als auch sein Popup-Fenster zeigen an, dass der Benutzer abonniert bleibt. In solchen Fällen scheint es, als ob die Aufhebung (über die Google Play-App) dazu beiträgt, dass GIABAPIv3 synchronisiert wird.

"Die Methode getPurchases() gibt keine fehlgeschlagenen oder abgelaufenen Subskriptionen zurück."

Im Gegensatz dazu gibt getPurchases Daten für 'stornierte' Käufe zurück. Seltsamerweise wird die GDAPI expiryTime von dem normalen Ende des Abonnements bis zu dem Zeitpunkt geändert, zu dem der Kauf storniert wurde. Um das gewünschte Verhalten zu erreichen, bei dem Ihre App den Benutzer weiterhin als abonniert behandelt, bis das Abonnement endet, muss sich Ihr Server an die ursprüngliche Ablaufzeit erinnern. Wenn das expiryTime < Abonnement endet, zeigt dies an, dass der Kauf abgebrochen wurde (und Sie sollten erwarten, dass GDAPIs AutoRenewing ebenfalls auf false geändert wurde). "Der Aufruf gibt ein Bundle mit allen aktiven Abonnements des Benutzers zurück. Sobald ein Abonnement ohne Verlängerung abläuft, wird es nicht mehr im zurückgegebenen Bundle angezeigt." Dies führt mich zu der Schlussfolgerung, dass Google das Wort "expires" oben und den Feldnamen expiryTime schlecht verwendet hat, sie sind nicht vollständig verwandt (expiryTime wird den Zeitpunkt der Kündigung darstellen, wenn das passiert, und der wahre Ablauf (Abonnement Ende) gewonnen ' t über GDAPI verfügbar sein - man muss sich daran erinnern oder es durch die Abwesenheit dieses Kaufs in GIABAPIv3 ableiten ^).

* Wirklichkeit entspricht hier, was der menschliche Benutzer getan hat und was die Google Developer API (GDAPI) sagt.

^Ich kann nicht sagen, dass ich das gesehen habe, was ein Symptom für den täglichen Reset von Sandbox/Test sein könnte. Ich habe ein abgesagtes und abgelaufenes Abonnement in der Realität * gesehen, das auch Tage später in GIABAPIv3 angezeigt wird (nur die erneute Stornierung in der Google Play App führte zu einer Synchronisierung zurück zur Realität *).