Abolebenszyklus

Abo-Käufe können im Laufe ihres Lebenszyklus je nach vielen Faktoren, z. B. dem 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.

subs-auto-renew-state
Abbildung 1: Lebenszyklusstatus und Übergangsereignisse für Käufe von Abos mit automatischer Verlängerung.

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 zuverlässigste Quelle für die Abo-Verwaltung.

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:

  1. Fragen Sie den purchases.subscriptionsv2.get-Endpunkt 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. Kauf bestätigen
  4. Gewähren Sie dem Nutzer Zugriff auf die Inhalte. Das mit dem Kauf verknüpfte Nutzerkonto kann anhand des ExternalAccountIdentifiers-Objekts aus der Aboressource identifiziert werden, wenn zum Zeitpunkt des Kaufs IDs 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, die Kaufabwicklung in Ihrem Backend vorzunehmen, um die Sicherheit zu erhöhen.

Die Abo-Ressource 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 ohne Ratenzahlung mit automatischer Verlängerung wird bei der Verlängerung 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 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 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 in der Kulanzfrist befinden. Wenn Ihre App ausschließlich queryPurchasesAsync verwendet, um zu prüfen, ob ein Nutzer ein Abo hat, sollte Ihre App Kulanzzeiträume automatisch verarbeiten, da diese Abos über die Play Billing Library als aktiv angezeigt werden.

Wenn Sie den Abostatus mit Ihrem Backend synchronisieren, 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 expiryTime-Wert 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 Aboressource 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
      }
    }
  ],
}

Nutzer, die sich in der Kulanzfrist befinden, werden von Google Play darüber informiert, dass ihre Zahlung abgelehnt wurde. Sie werden aufgefordert, die Probleme mit ihrer Zahlungsmethode im Play Store zu beheben. Wenn ein Nutzer in einen Kulanzzeitraum eintritt, sollten Sie 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 Play-Nachricht 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 seine Zahlungsmethode korrigiert hat, wird das Abo mit dem ursprünglichen Verlängerungsdatum verlängert und Sie können die Verlängerung wie unter Verlängerungen beschrieben verarbeiten.

Wenn der Nutzer die Probleme mit seiner Zahlungsmethode nicht innerhalb des Kulanzzeitraums behebt, wird für das Abo eine Kontosperre aktiviert und er verliert den Anspruch auf die Inhalte.

Zugriff und Wiederherstellung während des Kulanzzeitraums

Abbildung 2 zeigt eine Zeitachse für ein Abo, das in einen Kulanzzeitraum eintritt und dann wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert. Nach Ablauf des Kulanzzeitraums sollte der Nutzer die Abovorteile verlieren und das Konto sollte gesperrt werden.

Abbildung 2. Zeitachse für ein Abo, das in einen Kulanzzeitraum eintritt und vor Ablauf wiederhergestellt wird.

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 verlängern, z. B. von 7 auf 14 Tage, erhalten Nutzer im Kulanzzeitraum einen längeren Zugriff auf die Vorteile des Abos.
  • Wenn Sie den Kulanzzeitraum verkürzen, werden die Abo-Vorteile von Nutzern, die sich bereits so lange im alten Kulanzzeitraum befinden, dass sie den neuen Kulanzzeitraum überschreiten, sofort widerrufen. Wenn Sie beispielsweise die Kulanzfrist von 14 Tagen auf 7 Tage verkürzen, werden Nutzern, die sich im Zeitraum vom 8. bis zum 14. Tag der alten Kulanzfrist befinden, die Abovorteile sofort entzogen.
  • Das Abo bleibt aktiv und Sie erhalten erst nach Ablauf des stillen Kulanzzeitraums eine RTDN.

Kulanzzeitraum für Stummschaltung

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. Dieser stille Kulanzzeitraum bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieses 24‑Stunden-Zeitraums bleibt das Abo im Status ACTIVE.

Am besten reagieren Sie auf Änderungen des Abostatus, indem Sie auf Entwicklerbenachrichtigungen in Echtzeit (Real-time Developer Notifications, RTDN) reagieren. Rufen Sie die Methode purchases.subscriptionsv2.get() zum Zeitpunkt des RTDN anstelle des Ablaufzeitpunkts auf, um einen genaueren Status des Abos zu erhalten.

Je nach Abostatus 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 Methode subscriptionV2.get() auch jederzeit nach dem 24‑stündigen Kulanzzeitraum 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 Nachricht angezeigt, dass seine Zahlung abgelehnt wurde. Diese E‑Mail enthält auch einen Deeplink, über den der Nutzer seine Zahlungsmethode bei Google Play aktualisieren 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 eine 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 wieder Zugriff zu erhalten, müssen Nutzer ihre Zahlungsmethode korrigieren. Google Play informiert Nutzer mit gesperrtem Konto über die abgelehnte Zahlung. Sie sollten sie ebenfalls auffordern, ihre Zahlungsmethode zu aktualisieren.

Nachdem der Nutzer seine 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. Sie erhalten eine RTDN mit dem Typ SUBSCRIPTION_RECOVERED.

Bei Ratenabos können Zahlungsablehnungen und ‑wiederherstellungen bei jedem einzelnen Zahlungsversuch auftreten.

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 mit dem 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 vergangenen Zeitstempel gesetzt:

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

Unmittelbar nachdem Sie über die Kündigung während der Kontosperrung 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.

Kontosperre – Zugriff und Wiederherstellung

Abbildung 3 zeigt eine Zeitachse für ein Abo, das in den Kontosperrungsstatus wechselt und dann wieder aktiviert wird, wenn der Nutzer seine Zahlungsmethode korrigiert.

Abbildung 3. Zeitachse für ein Abo, für das eine Kontosperre gilt und das reaktiviert wird, bevor es endet.

Abbildung 4 zeigt wie im vorherigen Beispiel einen Zeitachsendiagramm für ein Abo, das zuerst in eine Kulanzfrist und dann in den Status „Konto gesperrt“ wechselt und sich dann wieder erholt, während das Konto gesperrt ist.

Abbildung 4: Zeitachse für ein Abo, das in einen Kulanzzeitraum und dann in eine Kontosperre eintritt und schließlich vor Ablauf der Kontosperre wiederhergestellt wird.

Beachten Sie die folgenden Punkte:

  • Bevor ein Abo in den Kontosperrungsstatus wechselt, versucht Google Play bis zu 48 Stunden lang, die Zahlungsmethode zu belasten. Der Nutzer behält während dieses Zeitraums die Abovorteile. Nach Ablauf dieses Zeitraums wird das Abo gesperrt und der Nutzer sollte den Zugriff auf die Vorteile des Abos verlieren.
  • Das Abo wird direkt gesperrt, wenn es nach einer Pause mit einem ungültigen Zahlungsmittel fortgesetzt 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 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 im Abocenter von Google Play freiwillig kündigen oder sein Abo wird automatisch gekündigt, wenn er nach einer Kontosperrung 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 mit automatischer Verlängerung kündigen, das nicht in Raten bezahlt wird, wird eine SUBSCRIPTION_CANCELED-Benachrichtigung 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 die Berechtigung sofort verlieren. Das kann beispielsweise passieren, wenn ein Nutzer ein Abo kündigt, während sein Konto aufgrund einer abgelehnten Zahlung 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 Abos mit Ratenzahlung wird bei einer vom Nutzer initiierten Kündigung eine SUBSCRIPTION_CANCELLATION_SCHEDULED-Benachrichtigung gesendet, wenn Zahlungen für den Mindestzeitraum ausstehen. Die Kündigung steht aus und wird am Ende des aktuellen Mindestlaufzeit wirksam. Wenn Sie diese Benachrichtigung erhalten, ist das Feld „subscriptionState“ der Aboressource, die von der Google Play Developer API zurückgegeben wird, auf SUBSCRIPTION_STATE_ACTIVE gesetzt, da das Abo mit Ratenzahlung bis zum Ende des Mindestzeitraums aktiv ist. Es ist jedoch ein leeres pendingCancellation-Objekt vorhanden. Eine SUBSCRIPTION_CANCELED-Benachrichtigung wird gesendet, gefolgt von einer SUBSCRIPTION_EXPIRED am Ende des Zusicherungszeitraums.

Die Aboressource für einen Kauf eines Ratenabo, dessen Kündigung aussteht, sieht 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 nachlesen, 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. Du kannst Nutzer mit einer Nachricht in deiner App darüber informieren, dass ihr Abo gekündigt wurde, und ihnen das Ablaufdatum mitteilen.

Widerrufe

Ein Abo kann aus verschiedenen Gründen widerrufen werden, z. B. wenn das Abo in Ihrem Backend mit purchases.subscriptionsv2.revoke widerrufen wird oder wenn 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, hat die Aboressource, die von der Google Play Developer API zurückgegeben wird, 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,
      ...
    }
  ]
}

Verzögerte Abos

Es gibt eine Reihe von Gründen, warum Sie die Berechtigung eines Nutzers verlängern möchten. So könntest du Nutzern z. B. im Rahmen eines Sonderangebots kostenlosen Zugriff gewähren, etwa eine Woche lang kostenlosen Zugriff beim Kauf eines Films oder als Kulanzleistung. Mit der Methode purchases.subscriptions.defer aus der Play Developer API können Sie das nächste Abrechnungsdatum für ein Abo mit automatischer Verlängerung vorziehen. In diesem Fall wird eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_DEFERRED gesendet. Während des Aufschubzeitraums hat der Nutzer ein Abo für Ihre 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.

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
* Änderungen jederzeit 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 auch 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):

Abbildung 5. Ein Nutzer pausiert sein Abo und setzt es dann fort.
Abbildung 6. Ein Nutzer pausiert sein Abo und das Konto wird dann gesperrt.

Ein Nutzer kann ein Abo auch jederzeit während des Pausenzeitraums manuell reaktivieren, 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. Wenn das Abo fortgesetzt wird, wird es von der Methode queryPurchasesAsync() zurückgegeben.

Achten Sie 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 sollten Sie 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 zu diesem Zeitpunkt 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_RENEWED wird gesendet, wenn das Abo entweder automatisch am Ende des Pausierungszeitraums oder manuell durch den Nutzer reaktiviert wird. Dies sollte wie unter Verlängerungen beschrieben behandelt werden.

Eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_ON_HOLD wird gesendet, wenn beim Versuch, das Abo nach einer Pause fortzusetzen, ein Zahlungsfehler aufgetreten ist. Das sollte wie unter Einbehaltung von Zahlungen 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 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.

Abbildung 7. Abschnitt „Konto“ > „Abos“ in der Google Play Store App mit einem gekündigten Abo und der Schaltfläche Neu abonnieren.

Die Schaltfläche ist immer mit Nochmal abonnieren 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 Wiederherstellen bezeichnet.

Nachdem ein Abo mit automatischer Verlängerung abgelaufen ist, können Sie Nutzern erlauben, dasselbe Basis-Abo noch einmal zu kaufen. In der Play-Entwicklerdokumentation und in den 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 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 stornierte 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 Abostatus 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 ähnlich wie im folgenden Beispiel aus:

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

Nach Ablauf der Registrierung neu abonnieren

Wenn ein Basis-Abo mit automatischer Verlängerung über die Google Play Console oder API so konfiguriert ist, dass es erneut abgeschlossen werden kann, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal kaufen.

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 Kauf außerhalb der App 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. Das sind neue Käufe, die von Ihrem Backend wie jeder andere Kauf verarbeitet und bestätigt werden müssen.

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 Kauftoken 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 das Abo reaktiviert hat. Mit dem Kauf-Token in diesem Feld können Sie das alte Abo und das vorhandene Nutzerkonto suchen, damit Sie den neuen Kauf mit demselben Konto verknüpfen können.

Bevor Sie einem Nutzer in Ihrer App Optionen für Upgrades, Downgrades oder erneute Abos anbieten, müssen Sie das bestehende Abo bestätigen. Ein Tarifwechsel oder eine erneute Anmeldung ist blockiert, wenn die Bestätigung des bestehenden Abos noch aussteht.

Wenn der Nutzer das Upgrade, Downgrade oder die erneute Anmeldung erfolgreich kauft, handelt es sich um einen neuen Kauf, den Sie bestätigen müssen. Die empfohlene Methode dafür ist die Google Play Developer API. Die Aboressource sieht 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

Weitere Informationen zum Ändern von Preisen für sich automatisch verlängernde Abos und zum Benachrichtigen von Nutzern finden Sie im Leitfaden zu Best Practices für Preisänderungen.

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 jedes Element im Abo enthält.

Wenn Preisänderungen für bestehende Abonnenten als Opt-in angewendet werden, erhalten Sie eine RTDN, wenn der Nutzer den neuen Preis bestätigt oder ablehnt.

Bestätigung einer Opt-in-Preisänderung durch Nutzer verarbeiten

Wenn ein Nutzer Ihre Preiserhöhung für das Abo akzeptiert, erhalten Sie eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_PRICE_CHANGE_UPDATED.

Verlängerungen nach einer Preisänderung verarbeiten

Bei einer Preissenkung oder bei der Verlängerung einer Preiserhöhung des Abos erhalten Sie eine SubscriptionNotification-Nachricht vom Typ SUBSCRIPTION_RENEWED. Behandeln Sie diese Benachrichtigung wie jede andere Verlängerung.

Fälle bearbeiten, in denen eine Opt-in-Preiserhöhung nicht akzeptiert wird

Wenn ein Nutzer Ihrer Opt-in-Preiserhöhung nicht zugestimmt hat, bevor er das Abo zum höheren Preis verlängern muss, wird das Abo automatisch gekündigt und Sie erhalten eine SubscriptionNotification-Nachricht mit dem Typ SUBSCRIPTION_CANCELED. Gehen Sie bei diesem Ereignis wie unter Kündigungen beschrieben vor.

Nutzer können ihre Abos für eine Preiserhöhung mit Opt-out auch auf dieselbe Weise kündigen.

Aufgrund neuer Vorschriften in Südkorea müssen Abonnenten in Südkorea allen Preiserhöhungen zustimmen, die nach Ablauf des kostenlosen Testzeitraums oder des Einführungszeitraums erfolgen.

Damit Sie die Verordnung einhalten können, werden Nutzer in Südkorea von Google Play über die Einwilligungspflicht informiert. Außerdem wird die Einwilligung der Nutzer gespeichert. Abos werden für Nutzer, die vor dem Inkrafttreten des höheren Preises keine Einwilligung erteilen, automatisch gekündigt. Zusätzlich zu den Benachrichtigungen, die von Google Play gesendet werden, können Sie Ihren Nutzern auch benutzerdefinierte Benachrichtigungen zur Preiserhöhung senden und in Ihren Benachrichtigungen Links zu bestimmten Verwaltungsseiten 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. z. B. ein Abo, das von einem kostenlosen Testzeitraum zu einem regulären Preis wechselt.

Eine price change bezieht sich jedoch auf Preisaktualisierungen, die von Ihnen (dem Entwickler) für den Basis-Abo-Preis 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.

Da Prepaid-Abos unter Umständen nur kurz laufen, 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 Laufzeit bestätigt werden. Entwickler haben beispielsweise 1,5 Tage Zeit, den Kauf eines Prepaid-Tarifs mit einer Laufzeit von drei Tagen zu bestätigen.

Abbildung 8. Lifecycle-Status und Übergangsereignisse für Abo-Käufe.

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 zu prüfen.

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 Abo-Ressource 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 Aufladekäufe wird die Berechtigungsdauer verlängert. Wenn der Nutzer also Guthaben auflädt, bevor sein ursprünglicher Anspruch endet, wird die neue Zeit zum vorherigen Ablaufdatum hinzugefügt.

Du kannst in deiner App eine Nachricht 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-Abos zu unterstützen, die vom Nutzer verlängert werden und sich nicht automatisch 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. Nutzer dürfen jeweils nur ein nicht genutztes Guthaben haben.
  • [Neues Feld] SubscriptionState: Gibt den Status des Aboobjekts an. Bei Prepaid-Tarifen ist dieser Wert immer ACTIVE, PENDING oder CANCELED.
  • lineItems[0].expiryTime: Dieses Feld ist bei 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 subscriptionId aus früheren Versionen.