Abo-Käufe können im Laufe ihres Lebenszyklus je nach vielen Faktoren, darunter das Verhalten bei der automatischen Verlängerung, Situationen, in denen die Zahlung abgelehnt wird, und Verwaltungsaktionen des Entwicklers, verschiedene Status durchlaufen.
Lebenszyklus für Abos mit automatischer Verlängerung verwalten
Wenn sich der Abostatus eines Nutzers ändert, erhält Ihr Backend-Server eine SubscriptionNotification-Nachricht.
Wenn du den Status in deinem Backend aktualisieren möchtest, rufe die purchases.subscriptionsv2.get API mit dem in der Benachrichtigung enthaltenen Kaufftoken auf. Dieser Endpunkt liefert den neuesten Abostatus für ein bestimmtes Kaufftoken und gilt als „Source of Truth“ für die Aboverwaltung.
Das Kaufftoken ist ab der Registrierung des Abos bis 60 Tage nach Ablauf gültig. Nach diesem Datum ist das Kauf-Token nicht mehr gültig, um die Google Play Developer API aufzurufen.
Neue Käufe von Abos mit automatischer Verlängerung
Wenn ein Nutzer ein Abo kauft, wird eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_PURCHASED an Ihren RTDN-Client gesendet. Unabhängig davon, ob Sie diese Benachrichtigung erhalten oder einen neuen In-App-Kauf über PurchasesUpdatedListener oder manuelles Abrufen von Käufen in der onResume()-Methode Ihrer App registrieren, sollten Sie den neuen Kauf in Ihrem sicheren Backend verarbeiten. Gehen Sie hierzu folgendermaßen vor:
- Fragen Sie den Endpunkt
purchases.subscriptionsv2.getab, um eine Aboressource mit dem aktuellen Abostatus zu erhalten. - Der Wert des Felds
subscriptionStatemussSUBSCRIPTION_STATE_ACTIVEsein. - Bestätigen Sie den Kauf.
- Gewähren Sie dem Nutzer Zugriff auf die Inhalte. Das mit dem Kauf verknüpfte Nutzerkonto kann mit dem Objekt
ExternalAccountIdentifiersaus der Aboressource identifiziert werden, wenn beim Kauf IDs mitsetObfuscatedAccountIdundsetObfuscatedProfileIdfestgelegt wurden.
Das Feld offerPhase im SubscriptionPurchaseLineItem enthält Details zur aktuellen Phase des Abos, z. B. zum kostenlosen Testzeitraum oder zum Einführungspreis.
Die Play Billing Library enthält auch eine Methode zum Bestätigen eines Abos, acknowledgePurchase(), und eine Methode zum Prüfen des Bestätigungsstatus, isAcknowledged().
Wir empfehlen jedoch, die Kaufabwicklung in Ihrem Backend vorzunehmen, um die Sicherheit zu erhöhen.
Die Aboressource für neue Käufe sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
},
"offerPhase": {
"freeTrial": {}
}
}
],
}
Verlängerung von Abos
Bei Abos mit automatischer Verlängerung, die nicht in Raten bezahlt werden, wird eine SUBSCRIPTION_RENEWED-Benachrichtigung gesendet, wenn das Abo verlängert wird. Bei Ratenabos wird jedes Mal, wenn das Abo am Abrechnungsdatum in Rechnung gestellt wird, eine SUBSCRIPTION_RENEWED-Benachrichtigung gesendet. Prüfen Sie, ob der Nutzer weiterhin Anspruch auf das Abo hat, und aktualisieren Sie dann den Abostatus mit dem neuen expiryTime, das in der Aboressource zurückgegeben wird, die von der Google Play Developer API zurückgegeben wird. Die Abo-Ressource sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
},
"offerPhase": {
"basePrice": {}
}
}
]
}
Sie müssen Aboverlängerungen nicht bestätigen.
Kulanzzeitraum
Wenn bei der Verlängerung eines Abos Zahlungsprobleme auftreten, benachrichtigt Google den Nutzer und versucht in regelmäßigen Abständen, das Abo zu verlängern, bevor es abläuft. Dieser Wiederherstellungszeitraum kann aus einem Kulanzzeitraum, gefolgt von einer Kontosperre, bestehen. Während eines Kulanzzeitraums sollte der Nutzer weiterhin Zugriff auf seine Aboberechtigung haben.
Die Methode queryPurchasesAsync() gibt weiterhin Käufe zurück, die sich im Kulanzzeitraum befinden. Wenn deine App ausschließlich auf queryPurchasesAsync angewiesen ist, um zu prüfen, ob ein Nutzer Anspruch auf ein Abo hat, sollte deine App Kulanzzeiträume automatisch verarbeiten, da diese Abos über die Play Billing Library als aktiv angezeigt werden.
Wenn du den Abostatus mit deinem Backend synchronisierst, kannst du abgelehnte Zahlungen besser nachvollziehen und erhältst mehr Kontext, wenn du versuchst, unfreiwillige Abwanderung zu reduzieren. Achten Sie auf SubscriptionNotification-Nachrichten vom Typ SUBSCRIPTION_IN_GRACE_PERIOD, um benachrichtigt zu werden, wenn der Nutzer in einen Kulanzzeitraum eintritt. Während sich der Nutzer im Kulanzzeitraum befindet, enthält die Abo-Ressource autoRenewEnabled = true. Google Play verlängert den Wert expiryTime dynamisch, bis der Kulanzzeitraum abgelaufen ist, da die Berechtigung so lange bestehen bleiben sollte, bis der Nutzer kündigt oder der Kulanzzeitraum seine maximale Länge erreicht hat. Der Wert des Felds subscriptionState in diesem Zeitraum ist SUBSCRIPTION_STATE_IN_GRACE_PERIOD. Die Abo-Ressource sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Play informiert Nutzer, die sich in einem Kulanzzeitraum befinden, dass ihre Zahlung abgelehnt wurde, und fordert sie auf, Probleme mit ihrer Zahlungsmethode im Play Store zu beheben. Wenn ein Nutzer in einen Kulanzzeitraum eintritt, solltest du ihn auch dazu auffordern, seine Zahlungsmethode zu korrigieren, falls der Fehler unbeabsichtigt war. Eine einfache Möglichkeit hierfür ist die Verwendung der In-App Messaging API. Wenn du diese API aufrufst, wenn der Nutzer deine App öffnet, wird ihm in einer temporären Snackbar eine Google Play-Nachricht angezeigt, die ihn darüber informiert, dass seine Zahlung abgelehnt wurde. Diese Nachricht enthält auch einen Deeplink, über den der Nutzer seine Zahlungsmethode bei Google Play korrigieren kann.
Sobald der Nutzer die Zahlungsmethode korrigiert hat, wird das Abo mit dem ursprünglichen Verlängerungsdatum verlängert und du kannst die Verlängerung wie unter Verlängerungen beschrieben verarbeiten.
Wenn der Nutzer seine Zahlungsmethode nicht innerhalb des Kulanzzeitraums korrigiert, wird das Abo in die Kontosperre versetzt und er verliert die Berechtigung.
Zugriff und Wiederherstellung während des Kulanzzeitraums
Abbildung 2 zeigt den Zeitverlauf für ein Abo, das in einen Kulanzzeitraum übergeht und dann wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert. Nach Ablauf des Kulanzzeitraums sollte der Nutzer die Abovorteile verlieren und das Konto sollte gesperrt werden.

Beachten Sie die folgenden Punkte:
- Während eines Kulanzzeitraums sollte der Nutzer weiterhin Zugriff auf die Abovorteile haben.
- Wenn ein Abo während eines Kulanzzeitraums reaktiviert wird, wird das Verlängerungsdatum nicht zurückgesetzt.
- Wenn Sie den Kulanzzeitraum ändern, hat das keine Auswirkungen auf Nutzer, die sich derzeit in einem Kulanzzeitraum befinden. Für Aboverlängerungen, die nach der Änderung in den Kulanzzeitraum eintreten, gilt der neue Kulanzzeitraum. Wenn Sie beispielsweise den Kulanzzeitraum von 7 Tagen auf 14 Tage ändern, gilt für Nutzer, die nach der Änderung in den Kulanzzeitraum eintreten, der neue Kulanzzeitraum von 14 Tagen.
- Das Abo bleibt aktiv und Sie erhalten erst nach Ablauf des Kulanzzeitraums eine RTDN.
Kulanzzeitraum für Stille
Du kannst einen Kulanzzeitraum von 0 Tagen festlegen. Google Play wartet jedoch mindestens 1 Tag, damit genügend Zeit für erneute Zahlungsversuche bleibt. Diese stille Kulanzfrist bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieser 24 Stunden bleibt das Abo im Status ACTIVE.
Am besten bleibst du über Änderungen des Abostatus auf dem Laufenden, indem du die Entwicklerbenachrichtigungen in Echtzeit (RTDN) aktivierst und darauf reagierst. Rufen Sie die Methode purchases.subscriptionsv2.get() zum Zeitpunkt der RTDN statt zum Ablaufzeitpunkt auf, um einen genaueren Status des Abos zu erhalten.
Je nach Abostatus nach dem 24-stündigen Kulanzzeitraum solltest du eine der folgenden Benachrichtigungen erhalten:
SUBSCRIPTION_ON_HOLD(falls aktiviert)SUBSCRIPTION_CANCELED(falls storniert)SUBSCRIPTION_EXPIRED(falls abgelaufen)SUBSCRIPTION_RENEWED(falls erfolgreich verlängert)
Sie können die subscriptionV2.get()-Methode auch jederzeit nach dem 24‑stündigen Kulanzzeitraum ohne Benachrichtigung aufrufen, um den aktuellen Status des Abos abzurufen.
Kontosperre
Wenn bei der Verlängerung eines Abos Zahlungsprobleme auftreten, beginnt nach Ablauf des Kulanzzeitraums eine Kontosperre. Wenn eine Kontosperre für ein Abo aktiviert wurde, solltest du den Zugriff auf die Aboberechtigung sperren.
Während der Kontosperre solltest du weiterhin alle Kündigungen, Wiederherstellungen oder erneuten Käufe deiner Abos nach Bedarf verarbeiten, da der Nutzer diese Änderungen möglicherweise vornimmt, während das Abo gesperrt ist.
Über RTDNs werden Sie benachrichtigt, wenn der Nutzer in den Zeitraum der Kontosperre eintritt. So können Sie ihn so schnell wie möglich darüber informieren, warum sein Zugriff auf das Abo gesperrt wurde. Eine einfache Möglichkeit hierfür ist die Verwendung der In-App Messaging API. Wenn Sie diese API aufrufen, wenn Ihr Nutzer die App öffnet, wird ihm in einer temporären Snackbar eine Meldung angezeigt, dass seine Zahlung abgelehnt wurde. Diese Nachricht enthält auch einen Deeplink, über den der Nutzer seine Zahlungsmethode bei Google Play korrigieren kann.
Wenn deine Nutzer außerhalb deiner App auf Aboinhalte zugreifen können, stellen sie möglicherweise fest, dass sie auf verschiedenen Oberflächen keinen Zugriff mehr haben. Du kannst dem Nutzer eine Push-Benachrichtigung oder eine E‑Mail senden, um ihn darüber zu informieren, dass sein Abo aufgrund einer abgelehnten Zahlung nicht mehr aktiv ist.
Das Abo wird während der Kontosperre nicht von der Methode queryPurchasesAsync() zurückgegeben. Wenn deine App diese Methode verwendet, um vorhandene Käufe anzuzeigen, solltest du die Kontosperre standardmäßig unterstützen.
Mit Entwicklerbenachrichtigungen in Echtzeit erhalten Sie eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_ON_HOLD, wenn ein Abo in die Kontosperre wechselt. Rufe die Methode purchases.subscriptionsv2.get von deinem sicheren Backend-Server auf, um die neuen Aboinformationen abzurufen. Während der Kontosperre wird das Feld expiryTime der Aboressource auf einen Zeitstempel in der Vergangenheit und das Feld subscriptionState auf SUBSCRIPTION_STATE_ON_HOLD gesetzt:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Um den Zugriff wiederherzustellen, müssen Nutzer ihre Zahlungsmethode korrigieren. Google Play informiert Nutzer mit Kontosperre über die abgelehnte Zahlung. Sie sollten sie ebenfalls dazu auffordern, ihre Zahlungsmethode zu korrigieren.
Nachdem der Nutzer die Zahlungsmethode korrigiert hat, wird das Abo wieder aktiviert und du musst den Zugriff auf die abonnierten Inhalte wiederherstellen. In diesem Fall ist das Kauf-Token dasselbe wie vor Beginn der Kontosperrung, da derselbe Kauf wiederhergestellt wird und Sie eine RTDN mit dem Typ SUBSCRIPTION_RECOVERED erhalten.
Bei Ratenabos können Zahlungsablehnungen und ‑wiederherstellungen bei jedem einzelnen Zahlungsversuch auftreten.
Wenn ein Abo nach einer Kontosperrung reaktiviert wird, wird das Abrechnungsdatum auf das Datum der Reaktivierung verschoben.Nach der Wiederherstellung gibt die Play Billing Library das Abo wieder über die Methode queryPurchasesAsync() zurück. Wenn Sie diese Methode verwenden, um festzustellen, ob ein Nutzer ein Abo hat, sollte Ihre App die Wiederherstellung des Abos nach einer Kontosperre automatisch verarbeiten.
Warten Sie auf eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RECOVERED, um benachrichtigt zu werden, wenn ein Abo wiederhergestellt wurde und der Nutzer wieder Zugriff erhalten soll. Wenn Sie nach Erhalt dieser Benachrichtigung eine Abfrage für ein Abo durchführen, wird das Feld expiryTime auf einen zukünftigen Zeitstempel und das Feld subscriptionState wieder auf SUBSCRIPTION_STATE_ACTIVE gesetzt:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
Wenn der Nutzer seine Zahlungsmethode nicht vor Ablauf des Zeitraums für die Kontosperrung korrigiert, erhalten Sie stattdessen eine RTDN vom Typ SUBSCRIPTION_CANCELED. Eine Anleitung zum Umgang mit einer Kündigung finden Sie unter Kündigungen. Wenn Sie ein auf diese Weise gekündigtes Abo abfragen, wird das zurückgegebene Feld expiryTime auf einen Zeitstempel in der Vergangenheit gesetzt:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Unmittelbar nachdem Sie während der Kontosperre über die Kündigung benachrichtigt wurden, erhalten Sie auch eine RTDN vom Typ SUBSCRIPTION_EXPIRED, da der Nutzer keine bezahlte Berechtigung mehr hat und das Abo mit der Kündigung gekündigt wurde.
Sie können dieses Ablaufdatum wie gewohnt verwalten.
Der Nutzer kann wieder Zugriff erhalten, indem er während der Kontosperre dasselbe Abo oder ein anderes Abo, das du über die App anbietest, noch einmal kauft. In diesem Fall wird ein neues Kaufftoken ausgestellt und der neue Wert wird als Teil eines SUBSCRIPTION_PURCHASED-Ereignisses zurückgegeben, das diese neue Instanz darstellt.
Kontosperre und -wiederherstellung
Abbildung 3 zeigt einen Zeitstrahl für ein Abo, das in die Kontosperre übergeht und dann wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert.
Ähnlich wie im vorherigen Beispiel zeigt Abbildung 4 eine Zeitleiste für ein Abo, das zuerst in einen Kulanzzeitraum und dann in eine Kontosperre übergeht und dann während der Sperre wiederhergestellt wird.
Beachten Sie Folgendes:
- Bevor ein Abo in die Kontosperre übergeht, versucht Google Play bis zu 48 Stunden lang, die Zahlungsmethode zu belasten. Der Nutzer behält in diesem Zeitraum die Vorteile des Abos. Nach Ablauf dieses Wiederholungszeitraums wird das Abo gesperrt und der Nutzer sollte keinen Zugriff mehr auf die Abovorteile haben.
- Das Abo wird direkt gesperrt, wenn es nach einer Pause mit einem ungültigen Zahlungsmittel reaktiviert wird.
- Wenn die Kontosperre für ein Abo aufgehoben wird, wird das Verlängerungsdatum zurückgesetzt.
Ablauf
Nach Ablauf eines Abos sollte der Nutzer den Zugriff darauf verlieren. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_EXPIRED gesendet. Wenn du diese Benachrichtigung erhältst, frage die Google Play Developer API ab, um die aktuelle Abo-Ressource zu erhalten.
Nachdem du bestätigt hast, dass der subscriptionState SUBSCRIPTION_STATE_EXPIRED ist, entferne die Berechtigung und registriere den Kaufstatus in deinem Backend als ungültig. Die Abo-Ressource sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
Kündigungen
Ein Nutzer kann ein Abo freiwillig im Abocenter von Google Play kündigen oder sein Abo wird automatisch gekündigt, wenn er nach einem Konto-Hold nicht wieder Zugriff auf sein Konto erhält. Entwickler können eine Kündigung auch mit purchases.subscriptionsv2.cancel auslösen. Wenn ein Abo gekündigt wird, behält der Nutzer bis zum Ende des aktuellen Abrechnungszeitraums Zugriff auf die Inhalte. Nach Ablauf des Abrechnungszeitraums sollte der Zugriff widerrufen werden.
Wenn Sie ein Abo ohne Ratenzahlung mit automatischer Verlängerung kündigen, wird eine Benachrichtigung vom Typ SUBSCRIPTION_CANCELED ausgelöst. Wenn du diese Benachrichtigung erhältst, ist das Feld subscriptionState der von der Google Play Developer API zurückgegebenen Aboressource auf SUBSCRIPTION_STATE_CANCELED gesetzt und das Feld expiryTime enthält das Datum, an dem der Nutzer den Zugriff auf das Abo verlieren soll. Wenn dieses Datum in der Vergangenheit liegt, sollte der Nutzer sofort die Berechtigung verlieren. Das kann beispielsweise passieren, wenn ein Nutzer ein Abo kündigt, während sein Konto aufgrund eines Zahlungsrückgangs gesperrt ist.
Die Aboressource für einen gekündigten Kauf sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
Bei Ratenabos wird eine SUBSCRIPTION_CANCELLATION_SCHEDULED-Benachrichtigung gesendet, wenn der Nutzer das Abo kündigt und noch Zahlungen für die Mindestlaufzeit ausstehen. Die Kündigung steht noch aus und wird am Ende der aktuellen Mindestlaufzeit wirksam. Wenn du diese Benachrichtigung erhältst, ist das Feld „subscriptionState“ der von der Google Play Developer API zurückgegebenen Aboressource auf SUBSCRIPTION_STATE_ACTIVE gesetzt, da das Ratenabo bis zum Ende der Mindestlaufzeit aktiv bleibt.
Es ist jedoch ein leeres pendingCancellation-Objekt vorhanden.
Eine SUBSCRIPTION_CANCELED-Benachrichtigung wird gesendet, gefolgt von einer SUBSCRIPTION_EXPIRED am Ende der Mindestlaufzeit.
Die Aboressource für den Kauf eines Ratenabos, dessen Kündigung aussteht, sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
Im Feld canceledStateContext der Aboressource kannst du nachsehen, warum das Abo gekündigt wurde, z. B. ob es vom Nutzer, vom System oder von dir gekündigt wurde. Wenn das Abo vom Nutzer gekündigt wurde, können Sie im Feld userInitiatedCancellation nachsehen, warum der Nutzer das Abo gekündigt hat. Dies kann bei der Entwicklung von Kommunikationsstrategien helfen.
Wenn ein Abo gekündigt wurde, aber noch nicht abgelaufen ist, wird es weiterhin von queryPurchasesAsync() zurückgegeben.
Du kannst in deiner App eine Nachricht anzeigen lassen, die den Nutzer darüber informiert, dass sein Abo gekündigt wurde, und das Ablaufdatum angibt.
Widerrufe
Ein Abo kann aus verschiedenen Gründen widerrufen werden, z. B. wenn dein Backend das Abo mit purchases.subscriptionsv2.revoke widerruft oder der Kauf zurückgebucht wird. In diesem Fall solltest du die Berechtigung des Nutzers sofort widerrufen. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_REVOKED gesendet. Wenn du diese Benachrichtigung erhältst, ist das Feld subscriptionState der von der Google Play Developer API zurückgegebenen Abo-Ressource auf SUBSCRIPTION_STATE_EXPIRED gesetzt.
Die Aboressource für einen widerrufenen Kauf sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
Zurückgestellte Abos
Es gibt verschiedene Gründe, warum Sie die Berechtigung eines Nutzers verlängern möchten. Sie können Nutzern beispielsweise im Rahmen eines besonderen Angebots kostenlosen Zugriff gewähren, etwa eine Woche lang kostenlosen Zugriff für den Kauf eines Films oder kostenlosen Zugriff für Kunden als Geste des guten Willens.
Mit der purchases.subscriptionsv2.defer API können Sie das Abrechnungsdatum für Abos (einschließlich Abos mit Add-ons) verschieben. Wenn Sie ein Abo mit Add-ons verschieben, werden alle Elemente im Abo um denselben Zeitraum verschoben.
Wenn Sie ein Abo zurückstellen, wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_DEFERRED gesendet. Während des Aufschubzeitraums hat der Nutzer ein Abo für deine Inhalte mit vollem Zugriff, ihm wird jedoch nichts in Rechnung gestellt. Das Verlängerungsdatum des Abonnements wird aktualisiert, sodass es dem neuen Datum entspricht.
Bei Prepaid-Tarifen kannst du die API zum Aufschieben der Abrechnung verwenden, um die Ablaufzeit zu verschieben.
Die Aboressource für ein aufgeschobenes Abo sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
Pausierte Abos
Sie können die absichtliche Abwanderung verringern, indem Sie es Nutzern ermöglichen, ihr Abo zu pausieren. Wenn Sie die Funktion zum Pausieren aktivieren, können Nutzer ihr Abo für einen Zeitraum zwischen einer Woche und drei Monaten pausieren – je nachdem, welches wiederkehrende Abo sie haben. Dadurch wird das Abo vorübergehend pausiert.
| Abo-Wiederholung | Wöchentlich | Monatlich | 3 Monate | 6 Monate | Jährlich |
|---|---|---|---|---|---|
| Verfügbare Pausendauer* | 1 Woche 2 Wochen 3 Wochen 4 Wochen |
1 Monat 2 Monate 3 Monate |
1 Monat 2 Monate 3 Monate |
1 Monat 2 Monate 3 Monate |
1 Monat 2 Monate 3 Monate |
Eine Abo-Pause wird erst nach Ablauf des aktuellen Abrechnungszeitraums wirksam. Während das Abo pausiert ist, hat der Nutzer keinen Zugriff auf das Abo und zahlt nicht den Preis für die Verlängerung. Nach Ablauf der Pause wird das Abo fortgesetzt und Google wird versuchen, das Abo zu verlängern. Ist die Fortsetzung erfolgreich, wird das Abo wieder aktiviert. Wenn die Reaktivierung aufgrund eines Zahlungsproblems fehlschlägt, wird das Konto des Nutzers in den Kontosperre-Zustand versetzt (siehe Abbildung 5 und 6):
Ein Nutzer kann ein Abo auch jederzeit während des Pausenzeitraums manuell fortsetzen, wie in Abbildung 6 dargestellt. Wenn ein Nutzer die Mitgliedschaft manuell fortsetzt, ändert sich das Abrechnungsdatum auf das Datum der manuellen Fortsetzung.
Wenn das Abo eines Nutzers pausiert ist, wird es von der Play Billing Library nicht über die Methode queryPurchasesAsync() zurückgegeben, es sei denn, der Parameter includeSuspendedSubscriptions ist im QueryPurchasesParams auf „true“ gesetzt. Wenn das Abo fortgesetzt wird, wird es von der Methode queryPurchasesAsync() wieder zurückgegeben.
Achte auf RTDNs, um zu erfahren, wenn ein Nutzer sein Abo pausiert. Diese Benachrichtigungen ermöglichen es dir auch, deine Nutzer in deiner App darüber zu informieren, dass sie ihr Abo pausiert haben und keinen Zugriff darauf haben. Außerdem solltest du Nutzern die Möglichkeit geben, ihr Abo jederzeit manuell über einen Deeplink zu Google Play fortzusetzen.
Eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED wird gesendet, wenn der Nutzer sein Abo pausiert. Der Nutzer sollte bis zum nächsten Verlängerungsdatum Zugriff auf sein Abo haben und die Aboressource enthält autoRenewEnabled = true. Der Wert des Felds subscriptionState ist an dieser Stelle SUBSCRIPTION_STATE_ACTIVE.
Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PAUSED wird gesendet, wenn die Pausierung in Kraft tritt. In diesem Fall sollte der Nutzer den Zugriff auf sein Abo verlieren. Die Aboressource enthält dann autoRenewEnabled = true und das Feld subscriptionState ist auf SUBSCRIPTION_STATE_PAUSED gesetzt. Im Objekt PausedStateContext kannst du sehen, wann das Abo voraussichtlich verlängert wird.
Eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_RECOVERED wird gesendet, wenn das Abo entweder automatisch am Ende des Pausenzeitraums oder manuell durch den Nutzer fortgesetzt wird.
Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_ON_HOLD wird gesendet, wenn beim Versuch, das Abo nach einer Pause fortzusetzen, ein Zahlungsfehler aufgetreten ist.
Beide Situationen sollten wie unter Kontosperrung beschrieben behandelt werden.
Erneut abonnieren
Für Basis-Abos mit automatischer Verlängerung wird im Google Play Store möglicherweise die Schaltfläche Erneut abonnieren angezeigt. Über diesen Button können Nutzer wieder Zugriff auf ein Abo erhalten. Es kann verschiedene Gründe haben, warum sie nicht angezeigt wird, z. B. wenn ein Abo schon vor langer Zeit abgelaufen ist.
Die Schaltfläche ist immer mit Abo reaktivieren beschriftet, ihre Funktion hängt jedoch vom Abo-Status ab.
Wenn ein Abo gekündigt, aber noch nicht abgelaufen ist, ist der Nutzer weiterhin Abonnent und erhält die Vorteile des Abos. Wenn der Nutzer auf „Erneut abonnieren“ tippt, wird die Kündigung rückgängig gemacht und das Abo wird weiterhin verlängert. Diese Aktion wird in der Entwicklerdokumentation und den APIs von Google Play als Wiederherstellung bezeichnet.
Nach Ablauf eines Abos mit automatischer Verlängerung können Sie Nutzern erlauben, dasselbe Basis-Abo noch einmal zu kaufen. Diese Aktion wird in der Google Play-Entwicklerdokumentation und in den APIs als erneut abonnieren bezeichnet. Sie können diese Option für jedes Basis-Abo in der Play Console oder über die API konfigurieren.
Vor Ablauf wiederherstellen
Wenn deine App ausschließlich die Methode queryPurchasesAsync() verwendet, um zu ermitteln, ob ein Nutzer ein Abo hat, sollte sie Wiederherstellungen automatisch verarbeiten, da die Methode queryPurchasesAsync() weiterhin gekündigte Käufe vor ihrem Ablaufdatum zurückgibt. Ein wiederhergestelltes Abo wird weiterhin verlängert, als wäre es nicht gekündigt worden.
Wenn Ihre App den Abo-Status mit einem Backend synchronisiert, sollten Sie auf eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_RESTARTED warten. Nachdem Sie diese RTDN erhalten haben, kann Ihre App auf die Benachrichtigung reagieren, die Verlängerung des Abos erfassen und die Anzeige von Wiederherstellungsnachrichten in Ihrer App beenden. Die Aboressource sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
Beim Wiederherstellen eines Abos wird keine neue Bestellung generiert. Wenn Sie eine Bestellung über 0,00 € für ein Abo sehen, das der Nutzer zuvor gekündigt hat, hat er sich wahrscheinlich über Ihre App wieder angemeldet, bevor das Abo abgelaufen ist. Weitere Informationen finden Sie unter Upgrades, Downgrades und erneutes Abonnieren.
Nach Ablauf des Abos neu abonnieren
Wenn ein Basis-Abo mit automatischer Verlängerung über die Google Play Console oder die API so konfiguriert ist, dass die Option „Erneut abonnieren“ zulässig ist, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal abschließen.
Dies sind neue Käufe. Google Play stellt ein neues Kaufftoken aus und dein Backend erhält eine RTDN vom Typ SUBSCRIPTION_PURCHASED. Der Kaufstatus für diese Art von Out-of-App-Kauf enthält in diesem Fall keine linkedPurchaseToken, die mit dem ursprünglichen Kauf verknüpft ist, da das ursprüngliche Abo vollständig abgelaufen ist.
Damit die neu gekauften Abos den Nutzern korrekt zugeordnet werden und automatische Erstattungen für nicht bestätigte Käufe verhindert werden, müssen Sie den Neukauf auf Ihrem Backend-Server bestätigen:
Rufen Sie
purchases.subscriptionsv2.getmit dem neuen Kauf-Token aus dem RTDN auf. Die Antwort für diese Art von Out-of-App-Kauf enthält das FeldoutOfAppPurchaseContext, das nur für nicht bestätigte Käufe zum erneuten Abonnieren vorhanden ist. Dieses Feld enthält Folgendes:expiredExternalAccountIdentifiers: EinExternalAccountIdentifiers-Objekt mit den FeldernobfuscatedAccountIdundobfuscatedProfileId, die für das vorherige abgelaufene Abo konfiguriert wurden, sofern sie festgelegt waren.expiredPurchaseToken: Das Kaufftoken des zuletzt abgelaufenen Abos.
Verwende eine dieser Kennungen, um den neuen Kauf zu suchen und mit dem richtigen Nutzerkonto in deinem Backend zu verknüpfen.
Rufen Sie
purchases.subscriptions.acknowledgeauf, um den Kauf zu bestätigen.- Optional können Sie die
obfuscatedAccountIdundobfuscatedProfileIddes Nutzers senden, wenn Sie sie während des In-App-Abrechnungsablaufs mitsetObfuscatedAccountIdundsetObfuscatedProfileIdkonfiguriert haben.
- Optional können Sie die
Mit diesem serverseitigen Ansatz können Sie den Kauf innerhalb von drei Tagen nach dem Kaufdatum bestätigen, auch wenn der Nutzer Ihre App nicht öffnet.
Upgrades, Downgrades und erneutes Abonnieren
Wenn ein Nutzer ein Upgrade oder Downgrade durchführt oder sich nach der Kündigung in deiner App vor Ablauf des Abos wieder anmeldet, wird das alte Abo ungültig und ein neues Abo mit einem neuen Kaufftoken wird erstellt.
Außerdem enthält die von der Google Play Developer API zurückgegebene Abo-Ressource das Feld linkedPurchaseToken, das den alten Kauf angibt, von dem aus der Nutzer ein Upgrade, ein Downgrade oder ein erneutes Abo durchgeführt hat. Mit dem Kauf-Token in diesem Feld können Sie das alte Abo und das vorhandene Nutzerkonto suchen, um den neuen Kauf demselben Konto zuzuordnen.
Wenn sich ein Nutzer vor Ablauf seines Abos noch einmal über Ihre App für dasselbe Basis-Abo registriert, generiert Google Play eine Bestellung über 0,00 $ für den neuen Kauf. Dem Nutzer wird bei der Registrierung nichts in Rechnung gestellt, da er bereits für den aktuellen Abrechnungszeitraum bezahlt hat. Die reguläre Abrechnung wird am ursprünglichen Verlängerungsdatum fortgesetzt. Die Bestellung im Wert von 0,00 $ wird in der Play Console unter Bestellverwaltung und in deinen Finanzberichten angezeigt. Das bedeutet nicht, dass der Nutzer ein Probeabo oder einen Angebotsrabatt erhalten hat.
Bevor Sie einem Nutzer in Ihrer App Optionen für ein Upgrade, ein Downgrade oder ein erneutes Abonnieren anbieten, müssen Sie das bestehende Abo bestätigen. Tarifänderungen oder erneute Abos sind blockiert, solange die Bestätigung des bestehenden Abos noch aussteht.
Wenn der Nutzer das Upgrade, Downgrade oder die erneute Anmeldung erfolgreich kauft, handelt es sich um einen neuen Kauf, den Sie bestätigen müssen. Wir empfehlen, dafür die Google Play Developer API zu verwenden. Die Aboressource sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Preisänderungen
Im Leitfaden zu Best Practices für Preisänderungen finden Sie Informationen zum Ändern der Preise für sich automatisch verlängernde Abos und zum Benachrichtigen von Nutzern, wenn dies erforderlich ist.
Wenn eine Preisänderung hinzugefügt wird und der Status der Preisänderung aktualisiert wird, erhältst du die RTDN SUBSCRIPTION_PRICE_CHANGE_UPDATED. Sie können den Endpunkt purchases.subscriptionsv2.get abfragen, um eine Aboressource zu erhalten, die Preisänderungsdetails für jeden Artikel im Abo enthält.
Wenn Preisänderungen für bestehende Abonnenten als Opt-in gelten, erhalten Sie eine RTDN, wenn der Nutzer den neuen Preis bestätigt oder ablehnt.
Nutzerbestätigung einer Preisänderung mit Opt-in verarbeiten
Wenn ein Nutzer die Preiserhöhung für dein Abo akzeptiert, erhältst du eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PRICE_CHANGE_UPDATED.
Verlängerungen nach einer Preisänderung verarbeiten
Bei einer Preissenkung oder wenn die Preiserhöhung des Abos verlängert wird, erhalten Sie eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RENEWED. Behandle diese Benachrichtigung wie jede andere Verlängerung.
Fälle behandeln, in denen eine Opt-in-Preiserhöhung nicht akzeptiert wird
Wenn ein Nutzer der Opt-in-Preiserhöhung nicht zugestimmt hat, bevor er das Abo zum höheren Preis verlängern muss, wird er automatisch abgemeldet und du erhältst eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_CANCELED. Behandle dieses Ereignis wie unter Kündigungen beschrieben.
Nutzer können ihre Abos auch bei einer Opt-out-Preiserhöhung kündigen.
Einwilligung zur Preiserhöhung (gilt nur für die Region KR)
Aufgrund neuer südkoreanischer Vorschriften müssen Abonnenten in Südkorea allen Preiserhöhungen zustimmen, die nach Ablauf des kostenlosen Testzeitraums oder des Einführungszeitraums erfolgen.
Damit Sie die Verordnung einhalten können, werden Nutzer in Südkorea von Google Play über die Einwilligungsanforderung informiert. Außerdem wird die Antwort der Nutzer auf die Einwilligung gespeichert. Abos werden für Nutzer, die vor Inkrafttreten des höheren Preises keine Einwilligung erteilen, automatisch gekündigt. Zusätzlich zu den von Google Play gesendeten Benachrichtigungen können Sie Ihren Nutzern auch benutzerdefinierte Benachrichtigungen zur Preiserhöhung senden und in Ihren Benachrichtigungen einen Link zu einer bestimmten Verwaltungsseite angeben.
Wenn der Einwilligungszeitraum begonnen hat oder der Nutzer seine Einwilligung erteilt hat, erhältst du eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED.
Unterschied zwischen Preiserhöhung und Preisänderung
Eine price step-up bezieht sich auf eine Erhöhung des Abopreises aufgrund des Übergangs von einer Angebotsphase zu einer anderen. Beispiel: Ein Abo wird von einem kostenlosen Testzeitraum auf einen regulären Preis umgestellt. Anhand des Felds offerPhase in der Aboressource können Sie die aktuelle Phase des Abos ermitteln.
Eine price change bezieht sich jedoch auf Preisaktualisierungen, die von Ihnen (dem Entwickler) für den Preis des Basis-Abos eines Abos initiiert wurden. Beispiele: Opt-in-Preiserhöhung oder Opt-out-Preiserhöhung.
Lebenszyklus für Prepaid-Tarife verarbeiten
Wie bei Abos mit automatischer Verlängerung müssen Sie Prepaid-Tarife nach jedem neuen Kauf bestätigen. Bei Prepaid-Tarifen musst du sowohl den Erstkauf als auch alle Aufladungen vollständig verarbeiten, da der Nutzer jedes Mal den Kaufvorgang durchlaufen muss.
Aufgrund der potenziell kurzen Laufzeiten von Prepaid-Tarifen ist es wichtig, den Kauf so schnell wie möglich zu bestätigen. Prepaid-Tarife mit einer Dauer von einer Woche oder länger müssen innerhalb von 3 Tagen bestätigt werden. Prepaid-Tarife mit einer Dauer von weniger als einer Woche müssen innerhalb der Hälfte der Tarifdauer bestätigt werden. Entwickler haben beispielsweise 1,5 Tage Zeit, den Kauf eines Prepaid-Tarifs mit einer Laufzeit von drei Tagen zu bestätigen.
Eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_PURCHASED wird an Ihren RTDN-Client gesendet, wenn ein Abo mit Prepaid-Tarif gekauft wird, einschließlich jedes Aufladens. Rufen Sie die Methode purchases.subscriptionsv2.get auf, um den aktuellen Status des Prepaid-Tarifabos abzurufen.
Für Aufladungen wird ein neues Kaufftoken ausgestellt. Das vorherige Kaufftoken wird im Feld linkedPurchaseToken als Teil des neuen Kaufstatus des Abos angezeigt. Das Kauf-Token ist ab der Registrierung für das Abo bis 60 Tage nach Ablauf gültig. Nach diesem Datum ist das Kaufftoken nicht mehr gültig, um die Google Play Developer API aufzurufen.
Die Aboressource für den Kauf eines Prepaid-Tarifs sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
Im Feld expiryTime sehen Sie, wann die Berechtigung endet. Durch Aufladungen wird die Berechtigungsdauer verlängert, da sie akkumuliert wird. Das bedeutet, dass die neue Zeit zum vorherigen Ablaufdatum hinzugefügt wird, wenn der Nutzer vor Ablauf seiner ursprünglichen Berechtigung auflädt.
Du kannst in deiner App eine Nachricht anzeigen lassen, die den Nutzer darüber informiert, dass er sein Prepaid-Abo durch Aufladen verlängern kann. Um herauszufinden, wann ein Nutzer sein Abo aufwerten kann, sehen Sie sich das Feld allowExtendAfterTime in der Aboressource an.
Prepaid-Tarife werden nicht automatisch verlängert und können daher nicht gekündigt werden. Wenn ein Nutzer einen Prepaid-Tarif kündigen möchte, kann er ihn einfach bis zum Ablaufdatum laufen lassen.
SubscriptionPurchaseV2-Felder für Prepaid-Tarife
Es wurden neue Felder hinzugefügt, um Prepaid-Tarife zu unterstützen, die vom Nutzer verlängert werden, anstatt sich automatisch zu verlängern. Alle Felder gelten für Prepaid-Tarife genauso wie für Abos mit automatischer Verlängerung, mit folgenden Ausnahmen:
- [Neues Feld] lineItems[0].prepaid_plan.allowExtendAfterTime: Gibt an, wann ein Nutzer ein weiteres Guthaben kaufen kann, um seinen Prepaid-Tarif zu verlängern. Ein Nutzer darf jeweils nur ein nicht verbrauchtes Guthaben haben.
- [Neues Feld] SubscriptionState: Gibt den Status des Aboobjekts an.
Bei Prepaid-Tarifen ist dieser Wert immer entweder
ACTIVE,PENDINGoderCANCELED. - lineItems[0].expiryTime: Dieses Feld ist bei Prepaid-Tarifen immer vorhanden.
- paused_state_context: Dieses Feld ist nie vorhanden, da Prepaid-Tarife nicht pausiert werden können.
- lineItems[0].auto_renewing_plan: Nicht für Prepaid-Tarife vorhanden.
- canceled_state_context: Nicht vorhanden für Prepaid-Tarife, da dieses Feld nur für Nutzer gilt, die ein Abo aktiv kündigen.
- lineItems[0].productId: Dieses Feld ersetzt
subscriptionIdaus früheren Versionen.