Abolebenszyklus

Abokäufe können während ihres Lebenszyklus verschiedene Status haben. Dies hängt von vielen Faktoren ab, darunter das Verhalten bei der automatischen Verlängerung, Situationen bei abgelehnten Zahlungen und Maßnahmen der Entwicklerverwaltung.

Lebenszyklus von Abos mit automatischer Verlängerung handhaben

Wenn sich der Abostatus eines Nutzers ändert, empfängt Ihr Backend-Server eine SubscriptionNotification-Nachricht

Abbildung 1: Lebenszyklusstatus und Übergangsereignisse für Abokäufe mit automatischer Verlängerung.

Wenn du den Status in deinem Back-End aktualisieren möchtest, rufe die purchases.subscriptionsv2.get API mit dem Kauftoken in der Benachrichtigung auf. Dieser Endpunkt stellt den aktuellen Abostatus mit einem Kauftoken bereit und gilt als zentrale Informationsquelle für die Aboverwaltung.

Das Kauftoken ist ab der Registrierung des Abos bis 60 Tage nach Ablauf gültig. Nach diesem Datum kann das Kauftoken nicht mehr zum Aufrufen der Google Play Developer API verwendet werden.

Neue Abokäufe mit automatischer Verlängerung

Wenn ein Nutzer ein Abo kauft, wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PURCHASED an deinen RTDN-Client gesendet. Unabhängig davon, ob Sie diese Benachrichtigung erhalten oder einen neuen In-App-Kauf über PurchasesUpdatedListener registrieren oder in der Methode onResume() der Anwendung Käufe manuell abrufen, sollten Sie den neuen Kauf in Ihrem sicheren Back-End verarbeiten. Gehen Sie hierzu folgendermaßen vor:

  1. Fragen Sie den Endpunkt purchases.subscriptionsv2.get ab, um eine Aboressource mit dem aktuellen Abostatus zu erhalten.
  2. Achten Sie darauf, dass das Feld subscriptionState den Wert SUBSCRIPTION_STATE_ACTIVE hat.
  3. Bestätigen Sie den Kauf.
  4. Gewähren Sie dem Nutzer Zugriff auf die Inhalte. Das mit dem Kauf verknüpfte Nutzerkonto kann mit dem Objekt ExternalAccountIdentifiers aus der Aboressource identifiziert werden, wenn beim Kauf mit setObfuscatedAccountId und setObfuscatedProfileId Kennungen festgelegt wurden.

Die Play Billing Library enthält außerdem eine Methode zur Bestätigung eines Abos, acknowledgePurchase(), und eine Methode zur Überprüfung des Bestätigungsstatus, isAcknowledged(). Aus Sicherheitsgründen empfehlen wir jedoch, die Kaufabwicklung in deinem Back-End vorzunehmen.

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
      }
    }
  ],
}

Verlängerung von Abos

Eine SUBSCRIPTION_RENEWED-Benachrichtigung wird gesendet, wenn ein sich automatisch verlängerndes Abo verlängert wird. Prüfe, ob der Nutzer noch Anspruch auf das Abo hat, und aktualisiere dann den Abostatus mit dem neuen expiryTime in der Aboressource, die von der Google Play Developer API zurückgegeben wurde. 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
      }
    }
  ]
}

Sie müssen Aboverlängerungen nicht bestätigen.

Kulanzzeitraum

Wenn bei einer Aboverlängerung Zahlungsprobleme auftreten, benachrichtigt Google den Nutzer und versucht regelmäßig, das Abo vor Ablauf der Frist zu verlängern. Dieser Wiederherstellungszeitraum kann aus einem Kulanzzeitraum gefolgt von einer Kontosperre bestehen. Der Nutzer sollte während des Kulanzzeitraums weiterhin Zugriff auf seine Aboberechtigung haben.

Über die Methode queryPurchasesAsync() werden weiterhin Käufe zurückgegeben, die sich im Kulanzzeitraum befinden. Wenn deine App ausschließlich queryPurchasesAsync nutzt, um zu prüfen, ob ein Nutzer Anspruch auf ein Abo hat, sollte deine App Kulanzzeiträume automatisch verarbeiten, da diese Abos in der Play Billing Library als aktiv angezeigt werden.

Durch die Synchronisierung des Abostatus mit deinem Back-End kannst du Zahlungsablehnungen besser erkennen und mehr Kontext bieten, wenn du versuchst, unfreiwillige Abwanderung zu reduzieren. Warten Sie auf SubscriptionNotification-Nachrichten vom Typ SUBSCRIPTION_IN_GRACE_PERIOD, um benachrichtigt zu werden, wenn der Nutzer einen Kulanzzeitraum beginnt. Während des Kulanzzeitraums enthält die Aboressource autoRenewEnabled = true. Google Play erweitert den expiryTime-Wert dynamisch, bis der Kulanzzeitraum abgelaufen ist, da die Berechtigung so lange bestehen sollte, bis der Nutzer sie kündigt oder der Kulanzzeitraum die maximale Länge erreicht hat. Der Wert des Felds subscriptionState in diesem Zeitraum beträgt SUBSCRIPTION_STATE_IN_GRACE_PERIOD. Die Aboressource 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
      }
    }
  ],
}

Google Play informiert Nutzer innerhalb eines Kulanzzeitraums darüber, dass ihre Zahlung abgelehnt wurde, und fordert sie auf, die Probleme mit ihrer Zahlungsmethode im Play Store zu beheben. Wenn einem Nutzer ein Kulanzzeitraum gewährt wird, sollten Sie ihn außerdem dazu ermutigen, Probleme mit seiner Zahlungsmethode zu beheben, falls der Fehler nicht freiwillig geschehen ist. Eine einfache Möglichkeit dazu ist die Verwendung der In-App Messaging API. Wenn du diese API aufrufst, wenn der Nutzer deine App öffnet, wird ihm in einer vorübergehenden Snackbar eine Google Play-Meldung 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 seine Zahlungsmethode korrigiert, wird das Abo mit dem ursprünglichen Verlängerungsdatum verlängert und du kannst die Verlängerung wie unter Verlängerungen beschrieben vornehmen.

Wenn der Nutzer seine Zahlungsmethode nicht während des Kulanzzeitraums behebt, gilt für das Abo eine Kontosperre und er verliert die Berechtigung.

Zugriff auf Kulanzzeitraum und Wiederherstellung

Abbildung 2 zeigt eine Zeitachse für ein Abo, für das ein Kulanzzeitraum gilt und das wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert. Nach Ablauf des Kulanzzeitraums sollte der Nutzer die Abovorteile nicht mehr nutzen und das Konto wird gesperrt.

Abbildung 2: Zeitachse für ein Abo, für das ein Kulanzzeitraum gilt und vor seinem Ende wiederhergestellt wird.

Es ist wichtig, die folgenden Punkte zu beachten:

  • Während des Kulanzzeitraums sollte der Nutzer weiterhin auf die Abovorteile zugreifen können.
  • Wenn ein Abo während eines Kulanzzeitraums wiederhergestellt wird, wird das Verlängerungsdatum nicht zurückgesetzt.
  • Wenn du den Kulanzzeitraum verlängerst, z. B. von 7 Tagen auf 14 Tage, erhalten Nutzer, die sich in einem Kulanzzeitraum befinden, erweiterten Zugriff auf Abovorteile.
  • Wenn Sie den Kulanzzeitraum verkürzen, werden die Abovorteile sofort widerrufen, wenn der alte Kulanzzeitraum ausreichend lange zurückliegt, um den neuen Kulanzzeitraum zu überschreiten. Wenn Sie beispielsweise den Kulanzzeitraum von 14 Tagen auf 7 Tage verkürzen, werden die Abovorteile für Nutzer, die in den Tagen 8–14 Tage des alten Kulanzzeitraums liegen, sofort widerrufen.
  • Das Abo bleibt aktiv und du erhältst erst nach Ablauf des stillen Kulanzzeitraums einen Kulanzzeitraum für die Benachrichtigung.

Kulanzzeitraum ohne Ton

Du kannst einen Kulanzzeitraum von 0 Tagen festlegen. Google Play wartet jedoch mindestens einen Tag, damit genügend Zeit für Zahlungswiederholungen bleibt. Dieser stille Kulanzzeitraum bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieser 24 Stunden behält das Abo den Status ACTIVE bei.

Die beste Möglichkeit, um über Änderungen des Abostatus auf dem Laufenden zu bleiben, ist, auf die Entwicklerbenachrichtigungen in Echtzeit zu warten und darauf zu reagieren. Rufe die Methode purchases.subscriptionsv2.get() zur RTDN-Zeit statt zur Ablaufzeit auf, um einen genaueren Status des Abos zu erhalten.

Je nach Abostatus nach dem 24-Stunden-Kulanzzeitraum sollten Sie eine der folgenden Benachrichtigungen erhalten:

  • SUBSCRIPTION_ON_HOLD (falls aktiviert)
  • SUBSCRIPTION_CANCELED (bei Stornierung)
  • SUBSCRIPTION_EXPIRED (falls abgelaufen)
  • SUBSCRIPTION_RENEWED (bei erfolgreicher Verlängerung)

Sie können die Methode subscriptionV2.get() nach dem 24-stündigen Kulanzzeitraum für die unbeaufsichtigte Nutzung auch jederzeit aufrufen, um den aktuellen Status des Abos abzurufen.

Kontosperre

Wenn bei einer Aboverlängerung Zahlungsprobleme auftreten, beginnt nach Ablauf eines Kulanzzeitraums eine Kontosperre. Wenn für ein Abo eine Kontosperre gilt, solltest du den Zugriff auf die Aboberechtigung blockieren.

Während der Kontosperre solltest du nach Bedarf Kündigungen, Wiederherstellungen oder erneute Käufe deiner Abos bearbeiten, da der Nutzer diese Änderungen auch während der Sperre vornehmen kann.

RTDNs benachrichtigen dich, wenn die Kontosperre für den Nutzer beginnt. So kannst du ihn so schnell wie möglich darüber informieren, warum sein Zugriff auf das Abo gesperrt wurde. Die einfachste Möglichkeit dafür ist die Verwendung der In-App Messaging API. Wenn Sie diese API aufrufen, wenn der Nutzer die App öffnet, wird ihm in einer temporären Snackbar eine Nachricht mit dem Hinweis 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. Vielleicht möchten Sie 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 von der Methode queryPurchasesAsync() nicht zurückgegeben. Wenn deine App also zur Anzeige vorhandener Käufe diese Methode verwendet, solltest du die Kontosperre standardmäßig unterstützen.

Mit Entwicklerbenachrichtigungen in Echtzeit erhältst du eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_ON_HOLD, wenn für ein Abo eine Kontosperre gilt. Rufe die Methode purchases.subscriptionsv2.get von deinem sicheren Backend-Server auf, um die neuen Aboinformationen abzurufen. Während der Kontosperre ist für das Feld expiryTime der Aboressource ein Zeitstempel in der Vergangenheit und für das Feld subscriptionState der Wert SUBSCRIPTION_STATE_ON_HOLD festgelegt:

{
  "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 die Nutzer in der Kontosperre über die Ablehnung der Zahlung. Sie sollten sie auch ermutigen, ihre Zahlungsmethode zu korrigieren.

Nachdem der Nutzer seine Zahlungsmethode korrigiert hat, wird das Abo wieder aktiviert und du musst den Zugriff auf die abonnierten Inhalte wiederherstellen. In diesem Fall entspricht das Kauftoken wie vor Beginn der Kontosperre, da derselbe Kauf wiederhergestellt wird und du eine RTDN vom Typ SUBSCRIPTION_RECOVERED erhältst.

Nach der Wiederherstellung gibt die Play Billing Library das Abo noch einmal über die Methode queryPurchasesAsync() zurück. Wenn du mit dieser Methode ermittelst, ob ein Nutzer Anspruch auf ein Abo hat, sollte deine App die Wiederherstellung des Abos nach der Kontosperre automatisch verarbeiten.

Achte auf eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RECOVERED. Diese wird benachrichtigt, wenn ein Abo wiederhergestellt wurde und der Nutzer wieder Zugriff erhalten sollte. Wenn Sie nach Erhalt dieser Benachrichtigung ein Abo abfragen, wird das Feld expiryTime auf einen Zeitstempel in der Zukunft 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 der Kontosperre korrigiert, erhältst du stattdessen eine RTDN vom Typ SUBSCRIPTION_CANCELED. Eine Anleitung zum Umgang mit einer Kündigung finden Sie unter Kündigungen. Wenn Sie ein Abo abfragen, das auf diese Weise gekündigt wurde, wird für das zurückgegebene Feld expiryTime ein Zeitstempel in der Vergangenheit festgelegt:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

Unmittelbar nach der Benachrichtigung über die Kündigung während der Kontosperre erhältst du auch eine RTDN vom Typ SUBSCRIPTION_EXPIRED, da der Nutzer keine kostenpflichtige Berechtigung hat und das Abo mit der Kündigung abgewandert ist. Sie können das Ablaufdatum wie gewohnt verwalten.

Der Nutzer kann wieder Zugriff erhalten, indem er während der Kontosperre des ursprünglichen Kaufs dasselbe Abo oder ein anderes Abo, das du über die App anbietest, noch einmal kauft. In diesem Fall wird ein neues Kauftoken ausgestellt und der neue Wert wird als Teil eines SUBSCRIPTION_PURCHASED-Ereignisses zurückgegeben, das diese neue Instanz darstellt.

Zugriff auf Kontosperre und Wiederherstellung

Abbildung 3 zeigt eine Zeitachse für ein Abo, das einer Kontosperre unterliegt und dann wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert.

Abbildung 3: Zeitachse für ein Abo, für das eine Kontosperre gilt und vor Ablauf wiederhergestellt wird.

Ähnlich wie im vorherigen Beispiel zeigt Abbildung 4 eine Zeitachse für ein Abo, das zuerst in einen Kulanzzeitraum tritt, bevor es mit einer Kontosperre zustande kommt, und das dann während einer Wartephase wiederhergestellt wird.

Abbildung 4: Zeitachse für ein Abo, für das ein Kulanzzeitraum gilt, dann mit einer Kontosperre versehen und schließlich wiederhergestellt wird, bevor die Kontosperre endet.

Es ist wichtig, die folgenden Punkte zu beachten:

  • Bevor eine Kontosperre für ein Abo aktiviert wird, unternimmt Google Play zusätzliche Versuche, die Zahlungsmethode bis zu 48 Stunden lang zu belasten. Während dieses Zeitraums kann er weiterhin die Abovorteile nutzen. Nach Ablauf dieses Wiederholungszeitraums wird die Kontosperre für das Abo aktiviert und der Nutzer sollte keinen Zugriff mehr auf die Abovorteile haben.
  • Für das Abo gilt die Kontosperre direkt, wenn das Abo im pausierten Zustand mit fehlgeschlagenem Zahlungsmittel fortgesetzt wird.
  • Wenn die Kontosperre für ein Abo wiederhergestellt wird, wird das Verlängerungsdatum zurückgesetzt.

Ablauf

Nach Ablauf eines Abos sollte der Nutzer keinen Zugriff mehr auf das Abo haben. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_EXPIRED gesendet. Wenn du diese Benachrichtigung erhältst, kannst du die Google Play Developer API abfragen, um die neueste Aboressource zu erhalten. Nachdem du bestätigt hast, dass subscriptionState SUBSCRIPTION_STATE_EXPIRED ist, entferne die Berechtigung und registriere den Kaufstatus in deinem Back-End als ungültig. 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

Nutzer können ein Abo freiwillig im Abocenter von Google Play kündigen oder es automatisch kündigen lassen, wenn es nach einer Kontosperre nicht wiederhergestellt wird. Entwickler können eine Kündigung auch mit purchases.subscriptions.cancel auslösen. Wenn ein Abo gekündigt wird, hat der Nutzer bis zum Ende des aktuellen Abrechnungszeitraums weiterhin Zugriff auf die Inhalte. Nach Ablauf des Abrechnungszeitraums sollte der Zugriff widerrufen werden.

Durch die Kündigung eines Abos wird eine SUBSCRIPTION_CANCELED-Benachrichtigung ausgelöst. Wenn du diese Benachrichtigung erhältst, ist in der von der Google Play Developer API zurückgegebenen Aboressource das Feld subscriptionState auf SUBSCRIPTION_STATE_CANCELED gesetzt. 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 die Berechtigung sofort verlieren. Das kann z. B. passieren, wenn ein Nutzer ein Abo kündigt, während eine Kontosperre aktiv ist, weil die Zahlung abgelehnt wurde.

Die Aboressource für einen stornierten Kauf sieht in etwa so aus:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ],
}

Im Feld canceledStateContext in der Aboressource sehen Sie, warum das Abo gekündigt wurde (z. B. vom Nutzer, vom System oder von Ihnen). Wenn das Abo vom Nutzer gekündigt wurde, kannst du 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 wird, aber noch nicht abgelaufen ist, wird es weiterhin über queryPurchasesAsync() zurückgegeben. Es kann sinnvoll sein, den Nutzer in Ihrer App über die Kündigung und das Ablaufdatum des Abos zu informieren.

Widerrufe

Ein Abo kann aus verschiedenen Gründen gekündigt werden, z. B. durch das Widerrufen des Abos durch das Backend mit purchases.subscriptions.revoke oder die Rückbuchung des Kaufs. Widerrufen Sie in diesem Fall die Berechtigung des Nutzers sofort. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_REVOKED gesendet. Wenn du diese Benachrichtigung erhältst, ist in der Aboressource, die von der Google Play Developer API zurückgegeben wurde, das Feld subscriptionState 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,
      ...
    }
  ]
}

Aufgeschobene Abos

Es gibt eine Vielzahl von Gründen, warum Sie die Berechtigung eines Nutzers erweitern möchten. Beispielsweise können Sie Nutzern im Rahmen einer Sonderaktion kostenlosen Zugang anbieten, z. B. eine Woche zum Kauf eines Films kostenlos oder aus Kulanz den kostenlosen Zugang für Kunden. Sie können die Methode purchases.subscriptions.defer aus der Play Developer API verwenden, um das nächste Abrechnungsdatum für ein Abo mit automatischer Verlängerung zu verschieben. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_DEFERRED gesendet. Während des Aufschubzeitraums hat der Nutzer Ihre Inhalte mit uneingeschränktem Zugriff abonniert, ihm werden jedoch keine Kosten in Rechnung gestellt. Das Verlängerungsdatum des Abos wird entsprechend aktualisiert.

Bei Prepaid-Tarifen können Sie die Defer Billing API verwenden, um die Ablaufzeit zu verschieben.

Die Aboressource für ein ausgesetztes 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 freiwillige Abwanderung verringern, indem Sie Nutzern ermöglichen, ihr Abo zu pausieren. Wenn du die Pausenfunktion aktivierst, können Nutzer ihr Abo je nach Wiederholungszeitraum für einen Zeitraum zwischen einer Woche und drei Monaten pausieren.

Eine Abo-Pause wird erst nach Ablauf des aktuellen Abrechnungszeitraums wirksam. Solange das Abo pausiert ist, hat der Nutzer keinen Zugriff auf das Abo und zahlt nicht für die Verlängerung. Nach Ablauf des Pausierungszeitraums wird das Abo fortgesetzt und Google versucht, es zu verlängern. Ist die Fortsetzung erfolgreich, wird das Abo wieder aktiviert. Wenn der Vorgang aufgrund eines Zahlungsproblems fehlschlägt, wird die Kontosperre aktiviert (siehe Abbildungen 5 und 6):

Abbildung 5: Ein Nutzer pausiert und setzt sein Abo dann fort.
Abbildung 6. Ein Nutzer pausiert sein Abo und setzt dann eine Kontosperre ein.

Während des Pausenzeitraums kann ein Nutzer ein Abo auch jederzeit manuell fortsetzen (siehe Abbildung 6). Setzt ein Nutzer die Website manuell fort, wird das Abrechnungsdatum in das manuelle Fortsetzungsdatum geändert.

Wenn das Abo eines Nutzers pausiert wird, gibt die Play Billing Library das Abo nicht über die Methode queryPurchasesAsync() zurück. Wird das Abo fortgesetzt, wird es von der Methode queryPurchasesAsync() noch einmal zurückgegeben.

Achte darauf, dass RTDNs wissen, wenn ein Nutzer sein Abo pausiert. Mit diesen Benachrichtigungen kannst du auch deine Nutzer in deiner App darüber informieren, dass sie ihr Abo pausiert haben und keinen Zugriff mehr haben. Sie sollten dem Nutzer auch 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 dein Nutzer sein Abo pausiert. Derzeit sollte der Nutzer bis zum nächsten Verlängerungsdatum Zugriff auf sein Abo behalten. Die Aboressource enthält autoRenewEnabled = true. Der Wert des Feldes subscriptionState ist an dieser Stelle SUBSCRIPTION_STATE_ACTIVE.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PAUSED wird gesendet, wenn die Pause wirksam wird. In diesem Fall sollte der Nutzer keinen Zugriff mehr auf sein Abo haben. Die Aboressource enthält dann autoRenewEnabled = true und das Feld subscriptionState ist auf SUBSCRIPTION_STATE_PAUSED gesetzt. Wenn du wissen möchtest, wann das Abo voraussichtlich wieder verlängert wird, klicke das Objekt PausedStateContext an.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RENEWED wird gesendet, wenn das Abo entweder am Ende des Pausierungszeitraums automatisch fortgesetzt wird oder wenn der Nutzer es manuell fortsetzt. Dies sollte wie unter Verlängerungen beschrieben gehandhabt werden.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_ON_HOLD wird gesendet, wenn beim Fortsetzen des Abos nach der Pause ein Zahlungsfehler aufgetreten ist. Gehe dazu wie unter Kontosperre beschrieben vor.

Erneut abonnieren

Bei Basis-Abos mit automatischer Verlängerung wird im Google Play Store möglicherweise die Schaltfläche Wieder abonnieren angezeigt. Mit dieser Schaltfläche können Nutzer wieder Zugriff auf ein Abo erhalten. Das kann verschiedene Gründe haben, z. B. weil ein Abo vor langer Zeit abgelaufen ist.

Abbildung 7: Im Bereich Konto > Abos der Google Play Store App wird ein gekündigtes Abo mit der Schaltfläche Wieder abonnieren angezeigt.

Obwohl die Schaltfläche immer mit Wieder abonnieren beschriftet ist, hängt ihre Funktionalität vom Abostatus ab.

Ein Abo wurde gekündigt, ist aber noch nicht abgelaufen, aber der Nutzer besteht weiterhin und erhält die Abovorteile. Wenn der Nutzer auf „Wieder abonnieren“ tippt, wird die Kündigung rückgängig gemacht und das Abo verlängert sich weiter. Diese Aktion wird in der Google Play-Entwicklerdokumentation und in den APIs als Wiederherstellung bezeichnet.

Nachdem ein Abo mit automatischer Verlängerung abgelaufen ist, können Sie Nutzern ermöglichen, dasselbe Basis-Abo zu kaufen. In der Google Play-Entwicklerdokumentation und in APIs wird diese Aktion 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 deine App ausschließlich auf die Methode queryPurchasesAsync() zurückgreift, um zu bestimmen, ob ein Nutzer Anspruch auf ein Abo hat, sollte deine App Wiederherstellungen automatisch verarbeiten, da die Methode queryPurchasesAsync() stornierte Käufe weiterhin vor ihrem Ablaufdatum zurückgibt. Ein wiederhergestelltes Abo wird so lange verlängert, als ob es nicht gekündigt worden wäre.

Wenn deine Anwendung den Abostatus mit einem Back-End synchronisiert, solltest du auf eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RESTARTED warten. Nachdem du diese RTDN erhalten hast, kann deine App auf die Benachrichtigung reagieren, aufzeichnen, dass das Abo jetzt verlängert wird, und keine Wiederherstellungsnachrichten in deiner App mehr anzeigen. Die Aboressource sieht in etwa so aus:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date
      ...
    }
  ],
}

Nach Ablauf wieder abonnieren

Wenn über die Google Play Console oder die API ein Basis-Abo mit automatischer Verlängerung konfiguriert wurde, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal erwerben.

Das sind Neukäufe. Google Play gibt ein neues Kauftoken aus und dein Back-End 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. Dies sind neue Käufe, die Ihr Back-End wie alle anderen Käufe verarbeiten und bestätigen muss.

Upgrades, Downgrades und neue Abos

Wenn ein Nutzer ein Upgrade oder Downgrade ausführt oder sich nach der Kündigung für Ihre App vor Ablauf des Abos registriert, wird das alte Abo ungültig und es wird ein neues Abo mit einem neuen Kauftoken erstellt.

Außerdem enthält die Aboressource, die von der Google Play Developer API zurückgegeben wurde, ein linkedPurchaseToken-Feld mit dem alten Kauf, bei dem der Nutzer ein Upgrade, Downgrade ausgeführt oder ein neues Abo abgeschlossen hat. Mit dem Kauftoken in diesem Feld kannst du das alte Abo aufrufen und das vorhandene Nutzerkonto identifizieren, sodass du den neuen Kauf mit demselben Konto verknüpfen kannst.

Bevor Sie einem Nutzer in Ihrer Anwendung Optionen zum Upgrade, Downgrade oder zum erneuten Abonnieren anbieten, müssen Sie das bestehende Abo bestätigen. Jegliche Tarifänderung oder Neuanmeldung wird blockiert, wenn für das vorhandene Abo noch die Bestätigung aussteht.

Wenn der Nutzer das Upgrade, Downgrade oder das erneute Abonnieren erfolgreich erworben hat, ist dies ein neuer Kauf, den Sie bestätigen müssen. Wir empfehlen dazu die Verwendung der 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 Best Practices-Leitfaden für Preisänderungen erfährst du, wie du Preise für Abos mit automatischer Verlängerung ändern und Nutzer gegebenenfalls benachrichtigen kannst.

Wenn Preisänderungen im Rahmen der Aktivierung auf bestehende Abonnenten angewendet werden, erhältst du eine Benachrichtigung, wenn der Nutzer den neuen Preis bestätigt oder ablehnt.

Nutzerbestätigung bei einer Preisänderung durch den Nutzer verarbeiten

Wenn ein Nutzer die Preiserhöhung für dein Abo akzeptiert, erhältst du eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PRICE_CHANGED_CONFIRMED. Bei einer Preissenkung unter Vorbehalt oder der Verlängerung des Abopreises erhältst du eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RENEWED. Behandeln Sie diese Benachrichtigung wie jede andere Verlängerung.

Umgang mit Fällen, in denen eine Preiserhöhung im Rahmen des Opt-ins nicht akzeptiert wird

Wenn ein Nutzer die Preiserhöhung nicht akzeptiert hat, bevor er sie zum höheren Preis verlängern muss, wird er automatisch abgemeldet und Sie erhalten eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_CANCELED. Verarbeite dieses Ereignis wie unter Stornierungen beschrieben.

Nutzer können auf die gleiche Weise ihre Abos kündigen, um eine Preiserhöhung unter Vorbehalt des Nutzerwiderrufs zu verlangen.

Lebenszyklus von Prepaid-Tarifen handhaben

Wie bei Abos mit automatischer Verlängerung musst du Prepaid-Tarife nach jedem neuen Kauf bestätigen. Bei Prepaid-Tarifen müssen sowohl der Erstkauf als auch das Aufladen vollständig verarbeitet werden, da der Nutzer jedes Mal den Kaufvorgang durchlaufen muss.

Da die Laufzeit eines Prepaid-Tarifs möglicherweise kurz ist, ist es wichtig, den Kauf so schnell wie möglich zu bestätigen. Prepaid-Tarife mit einer Laufzeit von einer Woche oder länger müssen innerhalb von 3 Tagen bestätigt werden. Prepaid-Tarife, die weniger als eine Woche in Anspruch nehmen, müssen innerhalb der Hälfte der Abolaufzeit bestätigt werden. Entwickler haben beispielsweise 1,5 Tage Zeit, um den Kauf eines dreitägigen Prepaid-Tarifs zu bestätigen.

Abbildung 8. Lebenszyklusstatus und Übergangsereignisse für Abokäufe.

Wenn du ein Prepaid-Abo kaufst, wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PURCHASED an deinen RTDN-Client gesendet, einschließlich aller Aufladungen. Rufen Sie die Methode purchases.subscriptionsv2.get auf, um den aktuellen Abostatus des Prepaid-Tarifs zu prüfen.

Für Aufladekäufe wird ein neues Kauftoken ausgegeben und du erhältst das vorherige Kauftoken im Feld linkedPurchaseToken als Teil des neuen Abokaufstatus. Das Kauftoken ist ab der Registrierung des Abos bis 60 Tage nach Ablauf gültig. Nach diesem Datum kann das Kauftoken nicht mehr zum Aufrufen der Google Play Developer API verwendet werden.

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
      }
    }
  ]
}

Wann die Berechtigung endet, können Sie im Feld expiryTime sehen. Aufladekäufe verlängern die Berechtigungszeit, indem sie sie aufstocken. Wenn also der Nutzer den Betrag einlöst, bevor die ursprüngliche Berechtigung endet, wird der neue Zeitpunkt dem vorherigen Ablaufdatum hinzugefügt.

Es kann sinnvoll sein, in Ihrer App eine Nachricht anzuzeigen, die den Nutzer darüber informiert, dass seine im Voraus bezahlten Abos mit einer Aufladung verlängert werden können. Im Feld allowExtendAfterTime in der Aboressource siehst du, wann ein Nutzer das Guthaben aufladen kann.

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 das Ablaufdatum erreichen.