Abokäufe können im Laufe ihres Lebenszyklus mehrere verschiedene Status durchlaufen. Das hängt von vielen Faktoren ab, z. B. vom Verhalten bei der automatischen Verlängerung, von abgelehnten Zahlungen und von Verwaltungsaktionen des Entwicklers.
Lebenszyklus für Abos mit automatischer Verlängerung verarbeiten
Wenn sich der Abostatus eines Nutzers ändert, erhält dein Backend-Server eine SubscriptionNotification
-Nachricht.
Rufe die purchases.subscriptionsv2.get
API mit dem in der Benachrichtigung enthaltenen Kauftoken auf, um den Status in deinem Backend zu aktualisieren. Dieser Endpunkt gibt den aktuellen Abostatus für ein Kauftoken an und gilt als „Source of Truth“ für die Aboverwaltung.
Das Kauftoken ist ab 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.
Neue Käufe von Abos 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 Käufe manuell in der onResume()
-Methode Ihrer App abrufen, sollten Sie den neuen Kauf in Ihrem sicheren Backend verarbeiten. Gehen Sie hierzu folgendermaßen vor:
- Rufe den
purchases.subscriptionsv2.get
-Endpunkt ab, um eine Abo-Ressource abzurufen, die den aktuellen Abostatus enthält. - Der Wert des Felds
subscriptionState
mussSUBSCRIPTION_STATE_ACTIVE
sein. - Bestätige den Kauf.
- 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 mitsetObfuscatedAccountId
undsetObfuscatedProfileId
IDs 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 zu verarbeiten, 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 ohne Ratenzahlung und 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üfe, ob der Nutzer weiterhin berechtigt ist, das Abo zu nutzen, und aktualisiere den Abostatus mit der neuen expiryTime
, die in der Aboressource enthalten ist, die von der Google Play Developer API zurückgegeben wird. Die Aboressource sieht ungefähr 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, bis 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 noch in der Kulanzzeitraum befinden. Wenn Ihre App ausschließlich queryPurchasesAsync
verwendet, um zu prüfen, ob ein Nutzer berechtigt ist, ein Abo abzuschließen, sollte Ihre App Kulanzzeitraume 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 im Blick behalten und haben mehr Kontext, um den unfreiwilligen Wechsel von Nutzern zu reduzieren. Wenn du auf SubscriptionNotification
-Nachrichten vom Typ SUBSCRIPTION_IN_GRACE_PERIOD
lauschst, wirst du benachrichtigt, wenn der Nutzer in einen Kulanzzeitraum eintritt. Solange sich der Nutzer in einem Kulanzzeitraum befindet, enthält die Aboressource autoRenewEnabled = true
. Google Play verlängert den Wert expiryTime
dynamisch bis zum Ablauf des Kulanzzeitraums, da die Berechtigung so lange gelten soll, bis der Nutzer sie kündigt oder der Kulanzzeitraum seine 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 der Kulanzzeitraum befinden, dass ihre Zahlung abgelehnt wurde. Sie werden aufgefordert, die Probleme mit der Zahlungsmethode im Play Store zu beheben. Wenn ein Nutzer einen Kulanzzeitraum erreicht, sollten Sie ihn auch bitten, seine Zahlungsmethode zu korrigieren, falls der Fehler nicht beabsichtigt war. Eine einfache Möglichkeit dazu ist die Verwendung der In-App-Messaging API. Wenn Sie diese API aufrufen, während der Nutzer Ihre App öffnet, wird ihm in einer vorübergehenden Snackbar eine Google 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 zum ursprünglichen Verlängerungsdatum verlängert. Sie können die Verlängerung wie unter Verlängerungen beschrieben vornehmen.
Wenn der Nutzer die Probleme mit seiner Zahlungsmethode nicht innerhalb des Kulanzzeitraums behebt, wird für das Abo eine Kontosperre aktiviert und er verliert seine Berechtigung.
Zugriff und Wiederherstellung während des Kulanzzeitraums
Abbildung 2 zeigt einen Zeitplan 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 wird gesperrt.
Beachten Sie dabei Folgendes:
- Während eines Kulanzzeitraums sollte der Nutzer 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 Tagen auf 14 Tage, erhalten Nutzer, die sich in diesem Zeitraum befinden, länger Zugriff auf die Abovorteile.
- Wenn Sie die Kulanzzeitraum verkürzen, werden die Abovorteile für Nutzer, die sich bereits so weit im alten Kulanzzeitraum befinden, dass dieser den neuen Kulanzzeitraum übersteigt, sofort widerrufen. Wenn Sie beispielsweise die Kulanzzeitraum von 14 Tagen auf 7 Tage verkürzen, werden die Abovorteile für Nutzer, die sich zwischen dem 8. und dem 14. Tag des alten Kulanzzeitraums befinden, sofort widerrufen.
- Das Abo bleibt aktiv und du erhältst erst nach Ablauf der stillen Kulanzzeitraums eine Kulanzzeitraum-RTDN.
Kulanzzeitraum ohne Benachrichtigung
Sie können einen Kulanzzeitraum von 0 Tagen festlegen. Google Play wartet jedoch mindestens einen Tag, um genügend Zeit für Zahlungswiederholungen zu haben. Dieser stille Kulanzzeitraum bietet ein Sicherheitsnetz für die Zahlungsabwicklung. Während dieser 24 Stunden bleibt das Abo im Status ACTIVE
.
Am besten bleibst du über die Entwicklerbenachrichtigungen in Echtzeit (Real-Time Developer Notifications, RTDN) auf dem Laufenden und reagierst auf Änderungen des Abostatus. Rufe die Methode purchases.subscriptionsv2.get()
zum Zeitpunkt der RTDN statt zum Ablaufzeitpunkt auf, um einen genaueren Status des Abos zu erhalten.
Je nach Abostatus nach Ablauf der 24-stündigen Kulanzzeitraums sollten Sie eine der folgenden Benachrichtigungen erhalten:
SUBSCRIPTION_ON_HOLD
(falls aktiviert)SUBSCRIPTION_CANCELED
(falls storniert)SUBSCRIPTION_EXPIRED
(falls abgelaufen)SUBSCRIPTION_RENEWED
(bei erfolgreicher Verlängerung)
Du kannst die Methode subscriptionV2.get()
auch jederzeit nach dem 24-stündigen stillen Kulanzzeitraum aufrufen, um den aktuellen Status des Abos abzurufen.
Kontosperre
Wenn bei der Verlängerung eines Abos Zahlungsprobleme auftreten, beginnt nach Ablauf eines 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 alle Kündigungen, Wiederherstellungen oder Wiederkäufe deiner Abos nach Bedarf bearbeiten, da der Nutzer diese Änderungen auch vornehmen kann, während das Abo pausiert ist.
Du wirst über RTDNs benachrichtigt, wenn der Nutzer in den Zeitraum der Kontosperre eintritt. So kannst du ihn so schnell wie möglich darüber informieren, warum sein Zugriff auf das Abo ausgesetzt wurde. Eine einfache Möglichkeit dazu 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 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 anderen Oberflächen keinen Zugriff mehr haben. Sie können dem Nutzer eine Push-Benachrichtigung oder eine E-Mail senden, um ihn darüber zu informieren, dass sein Abo aufgrund der Ablehnung der Zahlung nicht mehr aktiv ist.
Das Abo wird während der Kontosperre nicht über die Methode queryPurchasesAsync()
zurückgegeben. Wenn Ihre App diese Methode verwendet, um vorhandene Käufe anzuzeigen, sollten Sie die Kontosperre standardmäßig unterstützen.
Wenn Sie Entwicklerbenachrichtigungen in Echtzeit aktiviert haben, erhalten Sie eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_ON_HOLD
, wenn ein Abo in die Kontosperre versetzt wird. Rufe die Methode purchases.subscriptionsv2.get
von deinem sicheren Backend-Server auf, um die neuen Aboinformationen abzurufen. Während der Kontosperre wird das Feld expiryTime
der Aboressource auf einen früheren 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,
...
}
],
}
Wenn Nutzer wieder auf ihr Abo zugreifen möchten, müssen sie ihre Zahlungsmethode korrigieren. Google Play informiert Nutzer, deren Konto gesperrt wurde, über die Ablehnung der Zahlung. Sie sollten sie auch bitten, ihre Zahlungsmethode zu korrigieren.
Nachdem der Nutzer seine Zahlungsmethode korrigiert hat, wird das Abo wieder in den aktiven Status versetzt. Du musst dann 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. Du erhältst eine RTDN vom Typ SUBSCRIPTION_RECOVERED
.
Bei Ratenabos können Zahlungen für jeden einzelnen Zahlungsversuch abgelehnt und wiederhergestellt werden.
Nach der Wiederherstellung gibt die Play Billing Library das Abo noch einmal über die Methode queryPurchasesAsync()
zurück. Wenn Sie mit dieser Methode feststellen, ob ein Nutzer berechtigt ist, ein Abo abzuschließen, sollte Ihre App die Wiederherstellung des Abos nach einer Kontosperre automatisch abwickeln.
Höre auf eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_RECOVERED
, um benachrichtigt zu werden, wenn ein Abo wiederhergestellt wurde und der Nutzer wieder Zugriff haben sollte. Wenn du nach Erhalt dieser Benachrichtigung eine Abfrage für ein Abo durchführst, 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 mit dem Typ SUBSCRIPTION_CANCELED
. Eine Anleitung zum Umgang mit einer Kündigung finden Sie unter Kündigungen. Wenn du nach einem Abo suchst, 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 nachdem du über die Kündigung während der Kontosperre benachrichtigt wurdest, erhältst du auch eine RTDN vom Typ SUBSCRIPTION_EXPIRED
, da die kostenpflichtige Berechtigung des Nutzers abgelaufen ist und das Abo durch die Kündigung gekündigt wurde.
Sie können diesen Ablauf wie gewohnt behandeln.
Der Nutzer kann den Zugriff wiedererlangen, indem er während der Kontosperre nach dem ursprünglichen Kauf dasselbe Abo oder ein anderes Abo kauft, das Sie über die App anbieten. In diesem Fall wird ein neues Kauftoken ausgegeben und der neue Wert wird als Teil eines SUBSCRIPTION_PURCHASED
-Ereignisses zurückgegeben, das diese neue Instanz darstellt.
Zugriff und Wiederherstellung bei Kontosperrung
Abbildung 3 zeigt einen Zeitplan für ein Abo, das in eine Kontosperre gerät und dann wiederhergestellt wird, wenn der Nutzer seine Zahlungsmethode korrigiert.
Ähnlich wie im vorherigen Beispiel zeigt Abbildung 4 einen Zeitplan für ein Abo, das zuerst in eine Kulanzzeitraumphase eintritt, bevor es in die Kontosperre übergeht, und dann während der Sperrung wiederhergestellt wird.
Beachten Sie dabei Folgendes:
- Bevor ein Abo auf die Kontosperre umgestellt wird, versucht Google Play bis zu 48 Stunden lang, die Zahlungsmethode zu belasten. Der Nutzer behält während dieser Zeit die Abovorteile. Nach Ablauf dieses Zeitraums wird das Abo auf Kontosperre gesetzt und der Nutzer sollte keinen Zugriff mehr auf die Abovorteile haben.
- Das Abo wird direkt in eine Kontosperre versetzt, wenn es nach einer Pause mit einem ungültigen Zahlungsmittel fortgesetzt wird.
- Wenn ein Abo nach einer Kontosperre reaktiviert 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 Sie diese Benachrichtigung erhalten, fragen Sie die Google Play Developer API ab, um die aktuelle Aboressource abzurufen.
Nachdem du bestätigt hast, dass subscriptionState
SUBSCRIPTION_STATE_EXPIRED
ist, entferne die Berechtigung und registriere den Kaufstatus in deinem Backend als ungültig. Die Aboressource sieht ungefähr 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 Play Abocenter kündigen oder sein Abo automatisch kündigen lassen, wenn er nach einer Kontosperrung nicht wiederhergestellt wird. Entwickler können eine Kündigung auch mit purchases.subscriptions.cancel
auslösen. Wenn ein Abo gekündigt wird, behält der Nutzer den Zugriff auf die Inhalte bis zum Ende des aktuellen Abrechnungszeitraums. Nach Ablauf des Abrechnungszeitraums sollte der Zugriff widerrufen werden.
Wenn Sie ein Abo ohne Ratenzahlung mit automatischer Verlängerung kündigen, wird eine SUBSCRIPTION_CANCELED
-Benachrichtigung ausgelöst. Wenn Sie diese Benachrichtigung erhalten, ist das Feld subscriptionState
in der Aboressource, die von der Google Play Developer API zurückgegeben wird, auf SUBSCRIPTION_STATE_CANCELED
gesetzt. 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 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 stornierten 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 für den Bindungszeitraum noch Zahlungen ausstehen. Die Kündigung steht aus und wird am Ende der aktuellen Bindungsfrist 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
festgelegt, da das Abo mit Ratenzahlung bis zum Ende des Bindungszeitraums aktiv ist.
Es ist jedoch ein leeres Objekt vom Typ „pendingCancellation“ vorhanden.
Sie erhalten eine SUBSCRIPTION_CANCELED
-Benachrichtigung, gefolgt von einer SUBSCRIPTION_EXPIRED
am Ende der Bindungsfrist.
Die Aboressource für einen Kauf eines Abos mit Ratenzahlung, dessen Kündigung ausstehend ist, 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
in 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, sehen Sie im Feld userInitiatedCancellation
den Grund dafür. Das kann bei der Entwicklung von Kommunikationsstrategien helfen.
Wenn ein Abo gekündigt wurde, aber noch nicht abgelaufen ist, wird es trotzdem von queryPurchasesAsync()
zurückgegeben.
Sie können in Ihrer App eine Nachricht anzeigen, in der der Nutzer darüber informiert wird, dass sein Abo gekündigt wurde, und ihm das Ablaufdatum nennen.
Widerrufe
Ein Abo kann aus verschiedenen Gründen widerrufen werden, z. B. wenn dein Backend das Abo mithilfe von purchases.subscriptionsv2.revoke
widerruft oder der Kauf rückgebucht wird. 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
in der Aboressource, die von der Google Play Developer API zurückgegeben wird, auf SUBSCRIPTION_STATE_EXPIRED
festgelegt.
Die Aboressource für einen widerrufenen Kauf sieht in etwa so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
Verschobene Abos
Es gibt verschiedene Gründe, warum Sie die Berechtigung eines Nutzers verlängern möchten. Du kannst Nutzern beispielsweise als besonderes Angebot kostenlosen Zugriff gewähren, z. B. eine Woche lang kostenlos nach dem Kauf eines Films oder aus Kulanzgründen. Mit der Methode purchases.subscriptions.defer
der Play Developer API können Sie das nächste Abrechnungsdatum für ein automatisch verlängertes Abo vorziehen. Dadurch wird eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_DEFERRED
gesendet. Während des Aufschubzeitraums hat der Nutzer ein Abo für deine Inhalte mit vollem Zugriff, es werden ihm aber keine Kosten in Rechnung gestellt. Das Verlängerungsdatum des Abos wird aktualisiert, sodass es dem neuen Datum entspricht.
Bei Prepaid-Tarifen können Sie mit der Defer Billing API den Ablaufzeitpunkt verschieben.
Die Aboressource für ein in der Zukunft beginnendes 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.
Abowiederholung | Wöchentlich | Monatlich | 3 Monate | 6 Monate | Jährlich |
---|---|---|---|---|---|
Verfügbare Pausenlänge* | 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 |
– |
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 keinen 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 Fortsetzung aufgrund eines Zahlungsproblems fehlschlägt, wird das Konto des Nutzers gesperrt (siehe Abbildungen 5 und 6):
Ein Nutzer kann ein Abo auch jederzeit während der Pausierung manuell fortsetzen, wie in Abbildung 6 dargestellt. Wenn ein Nutzer die Mitgliedschaft manuell fortsetzt, ändert sich das Abrechnungsdatum in das Datum der manuellen Fortsetzung.
Wenn das Abo eines Nutzers pausiert ist, gibt die Play Billing Library das Abo nicht über die Methode queryPurchasesAsync()
zurück. Wenn das Abo fortgesetzt wird, gibt die Methode queryPurchasesAsync()
es wieder zurück.
Achte auf RTDNs, um zu erfahren, wenn ein Nutzer sein Abo pausiert. Mit diesen Benachrichtigungen können Sie Nutzer in Ihrer App auch darüber informieren, dass sie ihr Abo pausiert haben und keinen Zugriff darauf haben. Sie sollten Nutzern auch die Möglichkeit geben, ihr Abo jederzeit manuell über einen Deeplink zu Google Play fortzusetzen.
Eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
wird gesendet, wenn der Nutzer sein Abo pausiert. Der Nutzer sollte bis zum nächsten Verlängerungsdatum Zugriff auf sein Abo haben. Die Aboressource enthält autoRenewEnabled = true
. Der Wert des Felds subscriptionState
ist in diesem Fall SUBSCRIPTION_STATE_ACTIVE
.
Wenn die Pause in Kraft tritt, wird eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_PAUSED
gesendet. In diesem Fall sollte der Nutzer keinen Zugriff mehr auf sein Abo haben. Die Aboressource enthält autoRenewEnabled = true
und das Feld subscriptionState
ist auf SUBSCRIPTION_STATE_PAUSED
gesetzt. Im Objekt PausedStateContext
sehen Sie, wann das Abo voraussichtlich wieder verlängert wird.
Eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_RENEWED
wird gesendet, wenn das Abo entweder automatisch am Ende der Pausierungsdauer fortgesetzt wird oder der Nutzer die Fortführung manuell ausgewählt hat. Gehe dabei wie unter Verlängerungen beschrieben vor.
Eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_ON_HOLD
wird gesendet, wenn beim Versuch, das Abo nach der Pause fortzusetzen, ein Zahlungsfehler aufgetreten ist.
Gehen Sie wie unter Kontosperre beschrieben vor.
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.
Die Schaltfläche ist immer mit Resubscribe (Wieder abonnieren) gekennzeichnet. Ihre Funktion hängt jedoch vom Abostatus ab.
Wenn ein Abo gekündigt, aber noch nicht abgelaufen ist, hat der Nutzer weiterhin ein Abo und erhält die Abovorteile. Wenn der Nutzer auf „Jetzt wieder abonnieren“ tippt, wird die Kündigung rückgängig gemacht und das Abo wird fortgesetzt. 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 zu kaufen. Diese Aktion wird in der Play Developer-Dokumentation und in APIs als resubscribe (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 die Methode queryPurchasesAsync()
verwendet, um zu ermitteln, 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 wie gewohnt verlängert, als wäre es nicht gekündigt worden.
Wenn deine App den Abostatus mit einem Backend 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, festhalten, dass das Abo jetzt zur Verlängerung festgelegt ist, und keine Wiederherstellungsmeldungen 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 ein Abo abschließen
Wenn ein Basis-Abo mit automatischer Verlängerung über die Google Play Console oder API so konfiguriert ist, dass die Option „Erneut abonnieren“ aktiviert ist, können Nutzer ein abgelaufenes Abo im Google Play Store noch einmal kaufen.
Das sind neue Käufe. Google Play stellt ein brandneues Kauftoken aus und Ihr Backend empfängt eine RTDN vom 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 wie jeder andere Kauf von deinem Backend verarbeitet und bestätigt werden müssen.
Upgrades, Downgrades und Neuabonnieren
Wenn ein Nutzer ein Upgrade oder Downgrade ausführt oder sich nach der Kündigung in Ihrer App neu registriert, bevor das Abo abläuft, wird das alte Abo ungültig und ein neues Abo mit einem neuen Kauftoken erstellt.
Außerdem enthält die Abo-Ressource, die von der Google Play Developer API zurückgegeben wird, ein linkedPurchaseToken
-Feld, das den alten Kauf angibt, von dem aus der Nutzer ein Upgrade, Downgrade oder eine erneute Aboaktivierung durchgeführt hat. Mit dem Kauftoken in diesem Feld kannst du das alte Abo aufrufen und das vorhandene Nutzerkonto ermitteln, damit du den neuen Kauf demselben Konto zuordnen kannst.
Bevor Sie Nutzern in Ihrer App Optionen für ein Upgrade, Downgrade oder eine erneute Aboregistrierung anbieten, müssen Sie das bestehende Abo bestätigen. Tarifänderungen oder Neuabschlüsse sind blockiert, solange die Bestätigung für das bestehende Abo noch aussteht.
Wenn der Nutzer ein Upgrade oder Downgrade kauft oder ein neues Abo abschließt, handelt es sich um einen neuen Kauf, den du bestätigen musst. Wir empfehlen, die Google Play Developer API zu verwenden. Die Aboressource sieht ungefähr so aus:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Preisänderungen
Im Leitfaden zu Best Practices für Preisänderungen erfahren Sie, wie Sie die Preise für automatisch verlängernde Abos ändern und Nutzer bei Bedarf benachrichtigen.
Wenn Preisänderungen für bestehende Abonnenten als Opt-in angewendet werden, erhalten Sie eine RTDN, wenn der Nutzer eine Aktion ausführt, um den neuen Preis zu bestätigen oder abzulehnen.
Nutzerbestätigung einer Preisänderung mit Opt-in verarbeiten
Wenn ein Nutzer der Preiserhöhung zustimmt, erhalten Sie eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
. Bei einer Preissenkung bei Deaktivierung oder bei einer erneuten Preiserhöhung des Abos erhalten Sie 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 die Preiserhöhung nicht akzeptiert hat, bevor er sein Abo zum höheren Preis verlängern muss, wird sein Abo automatisch gekündigt und Sie erhalten eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_CANCELED
. Gehe mit diesem Ereignis wie unter Stornierungen beschrieben vor.
Nutzer können ihre Abos auch kündigen, wenn sie einer Preiserhöhung mit Opt-in widersprechen möchten.
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 die Laufzeit eines Prepaid-Tarifs möglicherweise kurz ist, ist es wichtig, den Kauf so schnell wie möglich zu bestätigen. Prepaid-Abos mit einer Laufzeit von mindestens einer Woche müssen innerhalb von 3 Tagen bestätigt werden. Bei Prepaid-Tarifen mit einer Laufzeit von weniger als einer Woche muss die Bestätigung innerhalb der Hälfte der Laufzeit erfolgen. Entwickler haben beispielsweise 1,5 Tage Zeit, den Kauf eines Prepaid-Tarifs für drei Tage zu bestätigen.
Eine SubscriptionNotification
-Nachricht vom Typ SUBSCRIPTION_PURCHASED
wird an deinen RTDN-Client gesendet, wenn ein Prepaid-Abo gekauft wird, einschließlich jedes Aufladevorgangs. Rufe die Methode purchases.subscriptionsv2.get
auf, um den aktuellen Abostatus des Prepaid-Tarifs zu prüfen.
Für Aufstockungen wird ein neues Kauftoken ausgestellt. Du erhältst das vorherige Kauftoken im Feld linkedPurchaseToken
als Teil des neuen Abokaufstatus. Das Kauftoken ist ab 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
}
}
]
}
Das Ablaufdatum der Berechtigung wird im Feld expiryTime
angezeigt. Durch Aufstockungskäufe verlängert sich die Gültigkeitsdauer, da sie sich summiert. Wenn der Nutzer also vor Ablauf seiner ursprünglichen Berechtigung aufstockt, wird die neue Zeit zusätzlich zum vorherigen Ablaufdatum hinzugefügt.
Sie können in Ihrer App eine Nachricht anzeigen, in der Nutzer darüber informiert werden, dass ihre Prepaid-Abos mit einem Aufladebetrag verlängert werden können. Wenn du wissen möchtest, wann ein Nutzer sein Guthaben aufstocken kann, sieh in der Aboressource im Feld allowExtendAfterTime
nach.
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 warten, bis das Ablaufdatum erreicht ist.