Abolebenszyklus

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

Lebenszyklus für sich automatisch verlängernde Abos verwalten

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

Abbildung 1. Lebenszyklusstatus und Übergangsereignisse für sich automatisch verlängernde Abokäufe.

Rufen Sie zum Aktualisieren des Status in Ihrem Back-End die purchases.subscriptionsv2.get API mit dem Kauftoken auf, das in der Benachrichtigung enthalten ist. Dieser Endpunkt stellt bei einem Kauftoken den aktuellen Abostatus bereit und wird als zentrale Datenquelle für die Aboverwaltung betrachtet.

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

Käufe von Abos, die sich automatisch verlängern

Wenn ein Nutzer ein Abo erwirbt, wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PURCHASED an deinen RTDN-Client gesendet. Unabhängig davon, ob Sie diese Benachrichtigung erhalten oder über PurchasesUpdatedListener einen neuen In-App-Kauf registrieren oder mit der onResume()-Methode Ihrer App 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 der Wert des Felds subscriptionState SUBSCRIPTION_STATE_ACTIVE ist.
  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 IDs zum Zeitpunkt des Kaufs mit setObfuscatedAccountId und setObfuscatedProfileId festgelegt wurden.

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, dass Sie die Kaufverarbeitung in Ihrem Back-End abwickeln, 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
      }
    }
  ],
}

Verlängerung von Abos

Bei Abos mit automatischer Verlängerung ohne Ratenzahlung wird bei der Verlängerung des Abos eine SUBSCRIPTION_RENEWED-Benachrichtigung gesendet. Bei Ratenabos wird jedes Mal eine SUBSCRIPTION_RENEWED-Benachrichtigung gesendet, wenn das Abo am Abrechnungsdatum belastet wird. Prüfe, ob der Nutzer noch die Aboberechtigung hat, und aktualisiere dann den Abostatus mit dem neuen expiryTime aus der Aboressource, 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
      }
    }
  ]
}

Aboverlängerungen müssen nicht bestätigt werden.

Kulanzzeitraum

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

Die Methode queryPurchasesAsync() gibt weiterhin Käufe zurück, die im Kulanzzeitraum liegen. 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 verwalten, da diese Abos in der Play Billing Library als aktiv angezeigt werden.

Wenn du den Abostatus mit deinem Backend synchronisierst, wirst du über Zahlungsablehnungen informiert und erhältst mehr Kontext, um eine unfreiwillige Abwanderung zu reduzieren. Auf SubscriptionNotification-Nachrichten vom Typ SUBSCRIPTION_IN_GRACE_PERIOD warten, um benachrichtigt zu werden, wenn ein Kulanzzeitraum für den Nutzer beginnt. Solange sich der Nutzer in einem Kulanzzeitraum befindet, enthält die Aboressource autoRenewEnabled = true. Google Play verlängert den Wert für expiryTime dynamisch, bis der Kulanzzeitraum abgelaufen ist, da die Berechtigung so lange bestehen sollte, bis der Nutzer sie kündigt oder der Kulanzzeitraum die maximale Dauer erreicht hat. Der Wert des Felds subscriptionState in diesem Zeitraum ist 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, 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 der Kulanzzeitraum für einen Nutzer aktiviert wird, solltest du ihn außerdem bitten, seine Zahlungsmethode zu korrigieren, falls der Fehler unfreiwillig war. Dafür können Sie einfach die In-App Messaging API verwenden. Wenn du diese API aufrufst, sobald der Nutzer deine App öffnet, wird ihm in einer temporären Snackbar eine 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 seine Zahlungsmethode korrigiert hat, wird das Abo mit dem ursprünglichen Verlängerungsdatum verlängert. Du kannst die Verlängerung wie unter Verlängerungen beschrieben vornehmen.

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

Zugriff auf den 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 kann der Nutzer seine Abovorteile verlieren und eine Kontosperre aktiviert haben.

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

Beachten Sie die folgenden Punkte:

  • Während eines Kulanzzeitraums sollte der Nutzer weiterhin auf die Abovorteile zugreifen können.
  • Wird ein Abo während eines Kulanzzeitraums wiederhergestellt, wird das Verlängerungsdatum nicht zurückgesetzt.
  • Wenn Sie den Kulanzzeitraum erhöhen, z. B. von 7 auf 14 Tage, erhalten Nutzer, die sich in einem Kulanzzeitraum befinden, erweiterten Zugriff auf die Abovorteile.
  • Wenn du den Kulanzzeitraum kürzest, werden Nutzern, die sich weit genug im alten Kulanzzeitraum befinden, um den neuen Kulanzzeitraum zu überschreiten, ihre Abovorteile sofort entzogen. Wenn Sie beispielsweise den Kulanzzeitraum von 14 Tagen auf 7 Tage verkürzen, werden Nutzern, die zwischen 8 und 14 Tage des alten Kulanzzeitraums liegen, die Abovorteile sofort widerrufen.
  • Das Abo bleibt aktiv und du erhältst erst dann einen Echtzeit-RTDN für den Kulanzzeitraum, wenn der stille Kulanzzeitraum endet.

Stiller Kulanzzeitraum

Du kannst einen Kulanzzeitraum von 0 Tagen festlegen, aber Google Play wartet mindestens einen Tag, um genügend Zeit für Zahlungsversuche zu haben. Dieser stille Kulanzzeitraum bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieses Zeitraums behält das Abo den Status ACTIVE.

Am besten kannst du über Änderungen am Abostatus auf dem Laufenden bleiben, indem du auf Entwicklerbenachrichtigungen in Echtzeit achtest und darauf reagierst. Wenn du einen genaueren Status des Abos abrufen möchtest, rufe die Methode purchases.subscriptionsv2.get() zur RTDN-Zeit statt zur Ablaufzeit auf.

Je nach Abostatus nach dem 24-stündigen stillen Kulanzzeitraum solltest du eine der folgenden Benachrichtigungen erhalten:

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

Sie können die Methode subscriptionV2.get() auch jederzeit nach dem 24-Stunden-Kulanzzeitraum im Hintergrund aufrufen, um den neuesten Status des Abos abzurufen.

Kontosperre

Bei Zahlungsproblemen bei der Aboverlängerung beginnt nach Ablauf eines Kulanzzeitraums eine Kontosperre. Wenn für ein Abo eine Kontosperre aktiviert wird, solltest du den Zugriff auf die Aboberechtigung blockieren.

Während der Kontosperre solltest du weiterhin nach Bedarf Kündigungen, Wiederherstellungen oder Rückkäufe deiner Abos vornehmen, da der Nutzer diese Änderungen vornehmen kann, während das Abo ausgesetzt ist.

RTDNs informieren dich, wenn der Zeitraum für die Kontosperre für den Nutzer beginnt, damit du ihn so schnell wie möglich darüber informieren kannst, warum sein Zugriff auf das Abo gesperrt wurde. Dafür können Sie einfach die In-App Messaging API verwenden. Wenn der Nutzer die API aufruft, sobald er die App öffnet, wird er in einer temporären Snackbar darüber informiert, dass seine Zahlung abgelehnt wurde. Diese Meldung 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, werden sie möglicherweise feststellen, dass sie auf verschiedenen Oberflächen keinen Zugriff mehr haben. Möglicherweise möchten Sie eine Push-Benachrichtigung oder eine E-Mail an den Nutzer senden, um ihn darüber zu informieren, dass sein Abo aufgrund einer abgelehnten Zahlung nicht mehr aktiv ist.

Das Abo wird von der Methode queryPurchasesAsync() während der Kontosperre nicht zurückgegeben. Wenn deine App also diese Methode benötigt, um vorhandene Käufe anzuzeigen, 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 aktiviert wird. Rufe die Methode purchases.subscriptionsv2.get auf deinem sicheren Backend-Server auf, um die neuen Aboinformationen abzurufen. Während des Kontoinhabers ist im Feld expiryTime der Aboressource ein Zeitstempel in der Vergangenheit und im Feld subscriptionState auf 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 mit der Kontosperre über die Ablehnung einer Zahlung. Du solltest sie außerdem dazu auffordern, 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 ist das Kauftoken mit dem vor Beginn der Kontosperre identisch, da derselbe Kauf wiederhergestellt wird und du ein RTDN vom Typ SUBSCRIPTION_RECOVERED erhältst.

Bei Ratenabos kann es bei jedem einzelnen Zahlungsversuch zu Zahlungsablehnungen und ‐rückzahlungen kommen.

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

Achte auf eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RECOVERED, um benachrichtigt zu werden, wenn ein Abo wiederhergestellt wurde und der Nutzer wieder Zugriff erhalten sollte. Wenn Sie nach Erhalt dieser Benachrichtigung eine Aboanfrage stellen, 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 des Zeitraums der Kontosperre korrigiert, erhältst du stattdessen eine RTDN mit dem Typ SUBSCRIPTION_CANCELED. Eine Anleitung zum Umgang mit einer Kündigung findest du unter Kündigungen. Wenn Sie ein Abo abfragen, das auf diese Weise gekündigt wurde, 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 nach der Benachrichtigung über die Kündigung während der Kontosperre erhältst du auch ein RTDN vom Typ SUBSCRIPTION_EXPIRED, da der Nutzer keine kostenpflichtige Berechtigung hat und das Abo durch die Kündigung abgewandert ist. Sie können wie gewohnt auf das Ablaufdatum reagieren.

Der Nutzer kann wieder Zugriff erhalten, wenn er während der Kontosperre nach dem ursprünglichen Kauf dasselbe oder ein anderes Abo, das du über die App anbietest, wieder ein Abo abschließt. In diesem Fall wird ein neues Kauftoken ausgegeben und der neue Wert 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, bei dem eine Kontosperre erfolgt und die wiederhergestellt wird, wenn der Nutzer die Zahlungsmethode korrigiert.

Abbildung 3: Zeitachse für ein Abo, das einer Kontosperre unterliegt und wiederhergestellt wird, bevor sie endet.

Ähnlich wie im vorherigen Beispiel zeigt Abbildung 4 eine Zeitachse für ein Abo, für das vor der Aktivierung der Kontosperre zuerst ein Kulanzzeitraum gilt und das Abo während der Wartephase wiederhergestellt wird.

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

Beachten Sie die folgenden Punkte:

  • Bevor eine Kontosperre für ein Abo wirksam wird, unternimmt Google Play weitere Versuche, die Zahlungsmethode für bis zu 48 Stunden zu belasten. Der Nutzer kann während dieses Zeitraums weiterhin die Abovorteile nutzen. Nach Ablauf dieses Wiederholungszeitraums wird die Kontosperre für das Abo aufgehoben und der Nutzer sollte keinen Zugriff mehr auf die Abovorteile haben.
  • Die Kontosperre wird direkt wirksam, wenn das Abo aus dem pausierten Zustand mit einer fehlgeschlagenen Zahlung 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 darauf haben. 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 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

Ein Nutzer kann ein Abo freiwillig über das Play-Abocenter kündigen oder es automatisch kündigen lassen, wenn es nach einer Kontosperre nicht wiederhergestellt wird. Entwickler können auch eine Kündigung mit purchases.subscriptions.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 entzogen werden.

Die Kündigung eines Abos ohne Ratenzahlung und Verlängerung des Abos löst eine SUBSCRIPTION_CANCELED-Benachrichtigung aus. Wenn du diese Benachrichtigung erhältst, ist für die von der Google Play Developer API zurückgegebene Aboressource das Feld subscriptionState 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 seine Berechtigung sofort verlieren. Das kann beispielsweise der Fall sein, 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,
      ...
    }
  ],
}

Bei Ratenabos wird bei einer vom Nutzer initiierten Kündigung eine SUBSCRIPTION_CANCELLATION_SCHEDULED-Benachrichtigung gesendet, wenn die Zahlungen für den Zusicherungszeitraum verbleiben. Die Kündigung steht noch aus und wird zum Ende des aktuellen Zusicherungszeitraums wirksam. Wenn Sie diese Benachrichtigung erhalten, ist das Feld „subscriptionState“ in der Aboressource, die von der Google Play Developer API zurückgegeben wurde, auf SUBSCRIPTION_STATE_ACTIVE gesetzt, da das Ratenabo bis zum Ende des Zusicherungszeitraums noch aktiv ist. Es ist jedoch ein leeres ausstehendes Abbruchobjekt vorhanden. Am Ende des Zusicherungszeitraums wird eine SUBSCRIPTION_CANCELED-Benachrichtigung gefolgt von einem SUBSCRIPTION_EXPIRED gesendet.

Die Aboressource für einen Kauf mit Ratenzahlung, 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 sehen Sie, warum das Abo gekündigt wurde, z. B. ob es vom Nutzer, vom System oder von Ihnen gekündigt wurde. Wenn das Abo vom Nutzer gekündigt wurde, findest du im Feld userInitiatedCancellation Informationen dazu, warum er es gekündigt hat. Dies kann als Grundlage für Kommunikationsstrategien dienen.

Wenn ein Abo gekündigt, aber noch nicht abgelaufen ist, wird es weiterhin von queryPurchasesAsync() zurückgegeben. Möglicherweise möchten Sie in Ihrer App eine Nachricht mit dem Hinweis anzeigen, dass sein Abo gekündigt wurde, und das Ablaufdatum angeben.

Widerrufe

Ein Abo kann aus verschiedenen Gründen widerrufen werden. Beispielsweise kann es sein, dass das Back-End das Abo mithilfe von purchases.subscriptions.revoke widerruft, oder der Kauf wird rückgebucht. Widerrufe 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 das Feld subscriptionState für die Aboressource, die von der Google Play Developer API zurückgegeben wird, 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 du die Berechtigung eines Nutzers verlängern möchtest. Sie können Nutzern beispielsweise im Rahmen einer Sonderaktion kostenlosen Zugang bieten, z. B. wenn Sie den Kauf eines Films eine Woche lang kostenlos anbieten, oder aus Kulanzgründen kostenlosen Zugang für Kunden. Du kannst die Methode purchases.subscriptions.defer der Play Developer API verwenden, um das nächste Rechnungsdatum für ein Abo mit automatischer Verlängerung vorzugeben. 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, es fallen aber keine Kosten an. 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 verzögertes Abo sieht in etwa so aus:

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

Pausierte Abos

Du kannst die absichtliche Abwanderung verringern, indem du Nutzern ermöglichst, ihr Abo zu pausieren. Wenn du die Funktion „Pause“ aktivierst, können Nutzer ihr Abo für einen Zeitraum zwischen einer Woche und drei Monaten pausieren, je nach wiederkehrendem Zeitraum.

Wiederholung von Abos Wöchentlich Monatlich Drei Monate Sechs 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
* Änderungen vorbehalten.

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. Am Ende der Pausierung wird das Abo fortgesetzt und Google versucht, es zu verlängern. Ist die Fortsetzung erfolgreich, wird das Abo wieder aktiviert. Wenn die Fortsetzung aufgrund eines Zahlungsproblems fehlschlägt, wechselt der Nutzer in den Kontosperre-Status, wie in den Abbildungen 5 und 6 gezeigt:

Abbildung 5. Ein Nutzer pausiert sein Abo und setzt es dann fort.
Abbildung 6. Ein Nutzer pausiert sein Abo und beginnt dann mit der Kontosperre.

Nutzer können ein Abo auch jederzeit während der Pausierung manuell fortsetzen, wie in Abbildung 6 dargestellt. Wenn ein Nutzer den Vorgang manuell fortsetzt, ändert sich das Abrechnungsdatum in das Datum der manuellen Fortsetzung.

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, gibt es die Methode queryPurchasesAsync() noch einmal zurück.

Achte auf RTDNs, um zu erkennen, wenn ein Nutzer sein Abo pausiert. Mit diesen Benachrichtigungen kannst du deine Nutzer in deiner App auch darüber informieren, dass sie ihr Abo pausiert haben und keinen Zugriff mehr darauf haben. Außerdem solltest du dem Nutzer die Möglichkeit geben, sein Abo jederzeit manuell fortzusetzen, indem du einen Deeplink zu Google Play verwendest.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED wird gesendet, wenn dein Nutzer eine Pause seines Abos einleitet. Zu diesem Zeitpunkt sollte der Nutzer 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 diesem Punkt SUBSCRIPTION_STATE_ACTIVE.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PAUSED wird gesendet, wenn die Pause wirksam wird. In diesem Fall sollte der Nutzer nicht mehr auf sein Abo zugreifen können, die Aboressource enthält autoRenewEnabled = true und das Feld subscriptionState ist auf SUBSCRIPTION_STATE_PAUSED gesetzt. Am Objekt PausedStateContext können Sie sehen, wann das Abo voraussichtlich wieder verlängert wird.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RENEWED wird gesendet, wenn das Abo am Ende der Pause automatisch fortgesetzt wird oder wenn der Nutzer es manuell fortsetzen möchte. Dies sollte wie unter Verlängerungen beschrieben behandelt werden.

Eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_ON_HOLD wird gesendet, wenn beim Versuch, das Abo nach einer Pause fortzusetzen, ein Zahlungsfehler aufgetreten ist. Dies sollte wie unter Kontosperre beschrieben behandelt werden.

Erneut abonnieren

Bei Basis-Abos mit automatischer Verlängerung wird im Google Play Store möglicherweise die Schaltfläche Erneut abonnieren angezeigt. Über diese Schaltfläche erhalten Nutzer wieder Zugriff auf ein Abo. Es kann verschiedene Gründe haben, z. B. wenn 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.

Auch wenn ein Abo gekündigt, aber noch nicht abgelaufen ist, hat der Nutzer weiterhin Abovorteile. Wenn der Nutzer auf „Wieder abonnieren“ tippt, wird die Kündigung rückgängig gemacht und das Abo verlängert. In der Google Play-Entwicklerdokumentation und in den APIs wird diese Aktion als Wiederherstellen bezeichnet.

Wenn ein Abo mit automatischer Verlängerung abgelaufen ist, kannst du Nutzern erlauben, dasselbe Basis-Abo zu erwerben. Diese Aktion wird in der Google Play-Entwicklerdokumentation und in den APIs als Wieder abonnieren bezeichnet. Du kannst 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() nutzt, um festzustellen, ob ein Nutzer Anspruch auf ein Abo hat, sollte sie automatisch Wiederherstellungen durchführen, da die Methode queryPurchasesAsync() weiterhin stornierte Käufe vor dem Ablaufdatum zurückgibt. Ein wiederhergestelltes Abo wird weiterhin so verlängert, als wäre es nicht gekündigt worden.

Wenn Ihre Anwendung den Abostatus mit einem Back-End synchronisiert, sollten Sie 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 mehr in deiner 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
      ...
    }
  ],
}

Nach Ablauf des Abos wieder abonnieren

Wenn ein Basis-Abo mit automatischer Verlängerung über die Google Play Console oder die API konfiguriert wurde, um die Funktion „Wieder abonnieren“ zu ermöglichen, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal kaufen.

Das sind neue Käufe. Google Play gibt ein ganz neues Kauftoken aus und dein Back-End empfängt ein RTDN vom Typ SUBSCRIPTION_PURCHASED. Der Kaufstatus für diese Art von Out-of-App-Kauf enthält keine linkedPurchaseToken, die in diesem Fall mit dem ursprünglichen Kauf verknüpft ist, da das ursprüngliche Abo vollständig abgelaufen ist. Dies sind neue Käufe, die Ihr Backend wie jeder andere Kauf verarbeiten und bestätigen muss.

Upgrades, Downgrades und ein neues Abo

Wenn ein Nutzer ein Upgrade oder Downgrade durchführt oder sich nach der Kündigung deiner App vor Ablauf des Abos anmeldet, verliert das alte Abo seine Gültigkeit und es wird ein neues Abo mit einem neuen Kauftoken erstellt.

Außerdem enthält die von der Google Play Developer API zurückgegebene Aboressource ein linkedPurchaseToken-Feld, das den alten Kauf angibt, für den der Nutzer ein Upgrade, Downgrade oder ein neues Abo abgeschlossen hat. Du kannst das Kauftoken in diesem Feld verwenden, um das alte Abo zu suchen und das vorhandene Nutzerkonto zu identifizieren, sodass du den neuen Kauf mit demselben Konto verknüpfen kannst.

Bevor Sie einem Nutzer in Ihrer App Upgrades, Downgrades oder erneute Abos anbieten können, müssen Sie das bestehende Abo bestätigen. Wenn die Bestätigung des vorhandenen Abos noch aussteht, wird jede Tarifänderung oder ein erneutes Abonnieren blockiert.

Wenn der Nutzer das Upgrade, das Downgrade oder die Verlängerung erfolgreich erwirbt, 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 zu Preisänderungen findest du Informationen zum Ändern der Preise für Abos mit automatischer Verlängerung und dazu, wie du Nutzer gegebenenfalls benachrichtigt.

Wenn Preisänderungen als Opt-in auf bestehende Abonnenten angewendet werden, erhältst du eine RTDN, wenn der Nutzer den neuen Preis bestätigt oder ablehnt.

Nutzerbestätigung einer Opt-in-Preisänderung 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 für den Opt-out-Preis oder bei 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 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 er automatisch abgemeldet und Sie erhalten eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_CANCELED. Verarbeite dieses Ereignis wie unter Stornierungen beschrieben.

Auf dieselbe Weise haben Nutzer auch die Möglichkeit, ihre Abos für eine Opt-out-Preiserhöhung zu kündigen.

Lebenszyklus von Prepaid-Tarifen verwalten

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 Aufladevorgänge vollständig verarbeiten, da der Nutzer jedes Mal den Kaufvorgang durchlaufen muss.

Aufgrund der kurzen Laufzeit des Prepaid-Tarifs ist es wichtig, den Kauf so schnell wie möglich zu bestätigen. Prepaid-Tarife mit einer Dauer von mindestens einer Woche 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 Plandauer bestätigt werden. Entwickler haben beispielsweise 1,5 Tage Zeit, den Kauf eines dreitägigen Prepaid-Tarifs zu bestätigen.

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

Beim Abschluss eines Prepaid-Tarifs wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_PURCHASED an deinen RTDN-Client gesendet, einschließlich jeder Aufladung. Rufen Sie die Methode purchases.subscriptionsv2.get auf, um den aktuellen Status des Prepaid-Tarifs zu prüfen.

Für Zusatzkäufe wird ein neues Kauftoken ausgegeben und du erhältst das vorherige Kauftoken im Feld linkedPurchaseToken als Teil des neuen Abokaufstatus. Das Kauftoken ist von der Aboregistrierung 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
      }
    }
  ]
}

Im Feld expiryTime sehen Sie, wann die Berechtigung endet. Bei Aufladekäufen verlängert sich der Berechtigungszeitraum, da sich diese angesammelt haben. Wenn der Nutzer also vor Ablauf der ursprünglichen Berechtigung aufstockt, wird die neue Uhrzeit zum vorherigen Ablaufdatum hinzugefügt.

Möglicherweise möchtest du in deiner App eine Nachricht mit dem Hinweis anzeigen, dass sein Prepaid-Abo durch eine Aufladung verlängert werden kann. Im Feld allowExtendAfterTime in der Aboressource siehst du, wann ein Nutzer ein 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 so lange warten, bis das Ablaufdatum erreicht ist.