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 von Abos mit automatischer Verlängerung verarbeiten
Wenn sich der Abostatus eines Nutzers ändert, erhält Ihr Backend-Server eine SubscriptionNotification-Nachricht.
Rufen Sie die purchases.subscriptionsv2.get-API mit dem in der Benachrichtigung enthaltenen Kauf-Token auf, um den Status in Ihrem Backend zu aktualisieren. Dieser Endpunkt liefert den aktuellen Abo-Status für ein Kauf-Token und gilt als Source of Truth für die Aboverwaltung.
Das Kauf-Token ist ab der Registrierung für das Abo 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. - Prüfen Sie, ob der Wert des Felds
subscriptionStateSUBSCRIPTION_STATE_ACTIVEist. - Kauf bestätigen
- Gewähren Sie dem Nutzer Zugriff auf die Inhalte. Das mit dem Kauf verknüpfte Nutzerkonto kann mit dem
ExternalAccountIdentifiers-Objekt aus der Aboressource identifiziert werden, wenn zum Zeitpunkt des Kaufs 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 beim Verlängern des Abos eine SUBSCRIPTION_RENEWED-Benachrichtigung gesendet. Bei Abos mit Ratenzahlung wird jedes Mal, wenn das Abo am Abrechnungsdatum belastet 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 Aboressource 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.
Durch die Synchronisierung des Abostatus mit Ihrem Backend können Sie Zahlungsablehnungen besser nachvollziehen und erhalten mehr Kontext, um unfreiwillige Abokündigungen 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 Aboressource autoRenewEnabled = true. Google Play verlängert den Wert expiryTime dynamisch, bis der Kulanzzeitraum abgelaufen ist, da die Berechtigung bis zur Kündigung durch den Nutzer oder bis zum Ablauf des Kulanzzeitraums mit seiner maximalen Länge gelten sollte. Der Wert des Felds subscriptionState in diesem Zeitraum ist SUBSCRIPTION_STATE_IN_GRACE_PERIOD. Die Abo-Ressource sieht etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Google Play informiert Nutzer, die sich in einem Kulanzzeitraum befinden, dass ihre Zahlung abgelehnt wurde, und fordert sie auf, Probleme mit ihrer Zahlungsmethode im Google 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 Sie diese API aufrufen, wenn der Nutzer Ihre App öffnet, wird ihm in einem temporären Snackbar eine Google Play-Meldung angezeigt, in der er darüber informiert wird, 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 gesperrt und er verliert den Anspruch.
Zugriff und Wiederherstellung während des Kulanzzeitraums
Abbildung 2 zeigt eine Zeitachse für ein Abo, das in einen Kulanzzeitraum eintritt und dann reaktiviert 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, sind Nutzer, die sich derzeit in einem Kulanzzeitraum befinden, davon nicht betroffen. Bei Aboverlängerungen, die nach der Änderung in den Kulanzzeitraum eintreten, wird der neue Kulanzzeitraum berücksichtigt. Wenn Sie beispielsweise die Kulanzfrist von 7 Tagen auf 14 Tage ändern, gilt für Nutzer, die nach der Änderung in die Kulanzfrist eintreten, die neue 14‑tägige Kulanzfrist.
- Das Abo bleibt aktiv und Sie erhalten erst nach Ablauf der stillen Kulanzfrist eine RTDN.
Kulanzzeitraum für Stille
Sie können eine Kulanzfrist von 0 Tagen festlegen. Google Play wartet jedoch mindestens einen Tag, um genügend Zeit für erneute Zahlungsversuche zu haben. Diese stille Kulanzfrist bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieser 24 Stunden bleibt das Abo im Status ACTIVE.
Am besten reagieren Sie auf Entwicklerbenachrichtigungen in Echtzeit, um über Änderungen des Abostatus auf dem Laufenden zu bleiben. Rufen Sie die Methode purchases.subscriptionsv2.get() zum Zeitpunkt der Benachrichtigung über die Kündigung in Echtzeit (Real-Time Developer Notification, RTDN) anstelle des Ablaufzeitpunkts auf, um einen genaueren Status des Abos zu erhalten.
Je nach Abo-Status nach Ablauf des 24‑stündigen Kulanzzeitraums 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 wie erforderlich bearbeiten, da der Nutzer diese Änderungen vornehmen kann, 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 Ihre Nutzer außerhalb Ihrer App auf Aboinhalte zugreifen können, stellen sie möglicherweise fest, dass sie auf verschiedenen Plattformen den Zugriff verloren haben. Sie können dem Nutzer eine Push-Benachrichtigung oder E‑Mail senden, um ihn darüber zu informieren, dass sein Abo aufgrund eines Zahlungsablehnung nicht mehr aktiv ist.
Das Abo wird während der Kontosperrung nicht von der Methode queryPurchasesAsync() zurückgegeben. Wenn Ihre App also auf diese Methode angewiesen ist, um bestehende Käufe anzuzeigen, sollten Sie die Kontosperrung 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. Rufen Sie die Methode purchases.subscriptionsv2.get von Ihrem sicheren Backend-Server auf, um die neuen Aboinformationen abzurufen. Während der Kontosperre wird das Feld expiryTime der Aboressource auf einen vergangenen Zeitstempel 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 gesperrtem Konto über die abgelehnte Zahlung. Sie sollten sie ebenfalls dazu auffordern, ihre Zahlungsmethode zu korrigieren.
Nachdem der Nutzer die Zahlungsmethode aktualisiert 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 über die Methode queryPurchasesAsync() zurück. Wenn Sie diese Methode verwenden, um festzustellen, ob ein Nutzer Anspruch auf ein Abo hat, sollte Ihre App automatisch die Wiederherstellung des Abos nach einer Kontosperrung verarbeiten.
Achten Sie auf eine SubscriptionNotification-Nachricht
mit dem Typ SUBSCRIPTION_RECOVERED, um benachrichtigt zu werden, wenn ein Abo reaktiviert wurde und der Nutzer wieder Zugriff erhalten sollte. 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 eine Abfrage für ein Abo ausführen, das auf diese Weise gekündigt wurde, wird das zurückgegebene Feld expiryTime auf einen Zeitstempel in der Vergangenheit festgelegt:
{
"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 diesen Ablauf wie gewohnt verarbeiten.
Der Nutzer kann den Zugriff wiederherstellen, indem er während der Kontosperrung dasselbe Abo oder ein anderes Abo, das Sie über die App anbieten, noch einmal kauft. In diesem Fall wird ein neues Kauf-Token ausgestellt und der neue Wert wird als Teil eines SUBSCRIPTION_PURCHASED-Ereignisses zurückgegeben, das diese neue Instanz darstellt.
Zugriff auf gesperrte Konten und Wiederherstellung
Abbildung 3 zeigt eine Zeitachse für ein Abo, das in den Status „Kontosperre“ wechselt und dann wieder aktiviert wird, wenn der Nutzer seine Zahlungsmethode korrigiert.
Abbildung 4 zeigt wie im vorherigen Beispiel eine Zeitachse für ein Abo, das zuerst in einen Kulanzzeitraum und dann in den Status „Kontosperre“ wechselt und sich dann wieder erholt, während es gesperrt ist.
Beachten Sie die folgenden Punkte:
- Bevor ein Abo in den Kontosperrungsstatus wechselt, unternimmt Google Play bis zu 48 Stunden lang zusätzliche Versuche, die Zahlungsmethode zu belasten. Der Nutzer behält in diesem Zeitraum die Vorteile des Abos. Nach Ablauf dieses Zeitraums wird das Abo gesperrt und der Nutzer sollte den Zugriff auf die Abovorteile verlieren.
- Das Abo wird direkt gesperrt, wenn es nach einer Pause mit einem ungültigen Zahlungsmittel reaktiviert wird.
- Wenn ein Abo nach einer Kontosperrung reaktiviert wird, wird das Verlängerungsdatum zurückgesetzt.
Ablauf
Wenn ein Abo abläuft, sollte der Nutzer den Zugriff darauf verlieren. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_EXPIRED gesendet. Wenn Sie diese Benachrichtigung erhalten, fragen Sie die Google Play Developer API ab, um die aktuelle Aboressource zu erhalten.
Nachdem du bestätigt hast, dass subscriptionState SUBSCRIPTION_STATE_EXPIRED ist, entferne die Berechtigung und registriere den Kaufstatus als ungültig in deinem Backend. Die Aboressource 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 Sie diese Benachrichtigung erhalten, ist in der Aboressource, die von der Google Play Developer API zurückgegeben wird, das Feld subscriptionState auf SUBSCRIPTION_STATE_CANCELED festgelegt und das Feld expiryTime enthält das Datum, an dem der Nutzer den Zugriff auf das Abo verlieren sollte. 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 bei einer vom Nutzer initiierten Kündigung eine SUBSCRIPTION_CANCELLATION_SCHEDULED-Benachrichtigung gesendet, wenn für die Mindestlaufzeit noch Zahlungen ausstehen. Die Kündigung steht noch aus und wird am Ende des aktuellen Mindestlaufzeit wirksam. Wenn Sie diese Benachrichtigung erhalten, ist das Feld „subscriptionState“ in der Aboressource, die von der Google Play Developer API zurückgegeben wird, auf SUBSCRIPTION_STATE_ACTIVE gesetzt, da das Ratenabo bis zum Ende der Mindestlaufzeit aktiv ist.
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 einen Kauf eines Ratenzahlungsabos, 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 können Sie nachsehen, warum das Abo gekündigt wurde (z. B. ob das Abo vom Nutzer, vom System oder von Ihnen 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. Das 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.
Sie können in Ihrer App eine Meldung anzeigen, in der der Nutzer darüber informiert wird, dass sein Abo gekündigt wurde, und in der das Ablaufdatum angegeben ist.
Widerrufe
Ein Abo kann aus verschiedenen Gründen widerrufen werden, z. B. wenn Ihr Backend das Abo mit purchases.subscriptionsv2.revoke widerruft oder die Zahlung zurückgebucht wird. In diesem Fall sollten Sie die Berechtigung des Nutzers sofort widerrufen. In diesem Fall wird eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_REVOKED gesendet. Wenn Sie diese Benachrichtigung erhalten, ist das Feld subscriptionState in der Aboressource, die von der Google Play Developer API zurückgegeben wird, auf SUBSCRIPTION_STATE_EXPIRED festgelegt.
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,
...
}
]
}
Aufgeschobene 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 nach hinten verschieben, werden alle Elemente im Abo um denselben Zeitraum nach hinten verschoben.
Wenn Sie ein Abo verschieben, 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 können Sie die API zum Aufschieben der Abrechnung verwenden, um das Ablaufdatum aufzuschieben.
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 Pausenlängen* | 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 Verlängerungspreis. 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 gesperrt (siehe Abbildung 5 und 6):
Ein Nutzer kann ein Abo auch jederzeit während der Pausierungszeit manuell fortsetzen, wie in Abbildung 6 dargestellt. Wenn ein Nutzer die Mitgliedschaft manuell reaktiviert, ändert sich das Abrechnungsdatum in das Datum der manuellen Reaktivierung.
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 in der QueryPurchasesParams auf „true“ gesetzt. Wenn das Abo fortgesetzt wird, wird es von der Methode queryPurchasesAsync() zurückgegeben.
Achte auf RTDNs, um zu erfahren, wann ein Nutzer sein Abo pausiert. Mit diesen Benachrichtigungen können Sie Ihre Nutzer in Ihrer App auch darüber informieren, dass sie ihr Abo pausiert haben und keinen Zugriff darauf haben. Außerdem solltest du dem Nutzer die Möglichkeit geben, sein Abo jederzeit manuell über einen Deeplink zu Google Play fortzusetzen.
Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED wird gesendet, wenn ein Nutzer sein Abo pausiert. Der Nutzer sollte bis zum nächsten Verlängerungsdatum Zugriff auf sein Abo haben und die Aboressource sollte autoRenewEnabled = true enthalten. 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 autoRenewEnabled = true und das Feld subscriptionState ist auf SUBSCRIPTION_STATE_PAUSED festgelegt. Im Objekt PausedStateContext können Sie 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 reaktiviert 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. Das kann verschiedene Gründe haben, z. B. wenn ein Abo 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 „Abo reaktivieren“ tippt, wird die Kündigung rückgängig gemacht und das Abo wird weiterhin verlängert. Diese Aktion wird in der Play-Entwicklerdokumentation und in APIs als Wiederherstellung bezeichnet.
Nachdem ein Abo mit automatischer Verlängerung abgelaufen ist, können Sie Nutzern erlauben, dasselbe Basis-Abo noch einmal zu kaufen. Diese Aktion wird in der Google Play-Entwicklerdokumentation und in APIs als erneutes 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 Ihre App ausschließlich auf der Methode queryPurchasesAsync() basiert, um festzustellen, ob ein Nutzer Anspruch auf ein Abo hat, sollte Ihre App die Wiederherstellung 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, aufzeichnen, dass das Abo jetzt verlängert wird, und keine Wiederherstellungsmeldungen mehr in Ihrer App anzeigen. 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 API so konfiguriert ist, dass die Option „Erneut abonnieren“ verfügbar ist, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal abschließen.
Das sind neue Käufe. Google Play stellt ein neues Kauf-Token aus und dein Backend erhält eine RTDN mit dem 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 ausschließlich für nicht bestätigte Käufe für erneute Abos 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 Kauf-Token des zuletzt abgelaufenen Abos.
Verwenden Sie einen dieser Bezeichner, um den neuen Kauf in Ihrem Backend zu suchen und mit dem richtigen Nutzerkonto 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 über Ihre App vor Ablauf des Abos registriert, wird das alte Abo ungültig und ein neues Abo mit einem neuen Kauf-Token erstellt.
Außerdem enthält die Aboressource, die von der Google Play Developer API zurückgegeben wird, das Feld linkedPurchaseToken, das den alten Kauf angibt, von dem der Nutzer ein Upgrade oder Downgrade durchgeführt oder sich neu angemeldet 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 über Ihre App noch einmal 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 über 0,00 € wird in der Play Console in der Bestellverwaltung und in Ihren Finanzberichten angezeigt. Das bedeutet nicht, dass der Nutzer ein Probeabo oder einen Angebotsrabatt erhalten hat.
Bevor Sie einem Nutzer in Ihrer App Optionen zum Upgraden, Downgraden oder erneuten Abonnieren anbieten, müssen Sie das bestehende Abo bestätigen. Tarifänderungen oder erneute Abos sind blockiert, wenn das bestehende Abo noch nicht bestätigt wurde.
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. Die empfohlene Methode dafür ist die Google Play Developer API. 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 findest du Informationen zum Ändern der Preise für sich automatisch verlängernde Abos und zum Benachrichtigen von Nutzern.
Wenn eine Preisänderung hinzugefügt wird und bei allen Aktualisierungen des Status der Preisänderung erhalten Sie 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 bei bestehenden Abonnenten als Opt-in angewendet werden, erhalten Sie eine RTDN, wenn der Nutzer Maßnahmen ergreift, um den neuen Preis zu bestätigen oder abzulehnen.
Nutzerbestätigung einer Opt-in-Preisänderung verarbeiten
Wenn ein Nutzer Ihre Preiserhöhung für das Abo akzeptiert, erhalten Sie 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. Behandeln Sie diese Benachrichtigung wie jede andere Verlängerung.
Fälle behandeln, in denen eine Opt-in-Preiserhöhung nicht akzeptiert wird
Wenn ein Nutzer Ihre Opt-in-Preiserhöhung nicht akzeptiert hat, bevor er das Abo zum höheren Preis verlängern muss, wird das Abo automatisch gekündigt und Sie erhalten eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_CANCELED. Gehen Sie bei diesem Ereignis wie unter Kündigungen beschrieben vor.
Nutzer können ihre Abos auch bei einer Opt-out-Preiserhöhung auf dieselbe Weise kündigen.
Einwilligung zur Preiserhöhung (gilt nur für die Region Korea)
Aufgrund neuer Verordnungen in Südkorea müssen Nutzer in Südkorea, die ein Abo haben, 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, erhalten Sie eine SubscriptionNotification-Nachricht mit dem 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 zur nächsten. Beispiel: Ein Abo wechselt von einem kostenlosen Testzeitraum zu einem regulären Preis. Mit dem Feld offerPhase in der Aboressource können Sie die aktuelle Phase des Abos ermitteln.
Ein price change bezieht sich jedoch auf Preisaktualisierungen, die von Ihnen (dem Entwickler) für den Basis-Abopreis 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 müssen Sie 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-Abos ist es wichtig, den Kauf so schnell wie möglich zu bestätigen. Prepaid-Abos mit einer Laufzeit von einer Woche oder länger müssen innerhalb von drei Tagen bestätigt werden. Prepaid-Abos mit einer Laufzeit von weniger als einer Woche müssen innerhalb der Hälfte der Abolaufzeit 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 Aufladekäufe wird ein neues Kauf-Token ausgestellt. Das vorherige Kauf-Token erhalten Sie im Feld linkedPurchaseToken als Teil des neuen Abo-Kaufstatus. Das Kauf-Token ist ab der Registrierung für das Abo 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.
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 den Kauf von Guthaben wird die Berechtigungszeit verlängert. Wenn der Nutzer also vor Ablauf seines ursprünglichen Anspruchs Guthaben auflädt, wird die neue Zeit zum vorherigen Ablaufdatum hinzugefügt.
Sie können in Ihrer App eine Mitteilung anzeigen, in der Nutzer darüber informiert werden, dass ihre Prepaid-Abos durch Aufladen verlängert werden können. Um herauszufinden, wann ein Nutzer sein Abo aufstocken 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 auslaufen 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 wie für Abos, die automatisch verlängert werden, mit den folgenden Ausnahmen:
- [Neues Feld] lineItems[0].prepaid_plan.allowExtendAfterTime: Gibt an, wann ein Nutzer ein weiteres Guthaben aufladen darf, um seinen Prepaid-Tarif zu verlängern, da ein Nutzer jeweils nur ein nicht genutztes Guthaben haben darf.
- [Neues Feld] SubscriptionState: Gibt den Status des Aboobjekts an.
Bei Prepaid-Abos ist dieser Wert immer
ACTIVE,PENDINGoderCANCELED. - lineItems[0].expiryTime: Dieses Feld ist für Prepaid-Abos 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 für Prepaid-Abos vorhanden, da dieses Feld nur für Nutzer gilt, die ein Abo aktiv kündigen.
- lineItems[0].productId: Dieses Feld ersetzt
subscriptionIdaus früheren Versionen.