Gli acquisti di abbonamenti possono passare attraverso diversi stati durante il loro del ciclo di vita, in base a molti fattori, tra cui il comportamento del rinnovo automatico, situazioni di rifiuto e azioni di gestione degli sviluppatori.
Gestire il ciclo di vita per gli abbonamenti con rinnovo automatico
Quando lo stato dell'abbonamento di un utente cambia, il server di backend riceve un
SubscriptionNotification
messaggio
Per aggiornare lo stato nel backend, chiama il metodo
purchases.subscriptionsv2.get
con il token di acquisto incluso nella notifica. Questo endpoint fornisce
l'ultimo stato dell'abbonamento fornito con un token di acquisto ed è considerato
una fonte attendibile per la gestione degli abbonamenti.
Il token di acquisto è valido dalla registrazione dell'abbonamento fino a 60 giorni dopo la scadenza del periodo di conservazione. Dopo questa data, il token di acquisto non è più valido per l'utilizzo chiama l'API Google Play Developer.
Acquisti di nuovi abbonamenti con rinnovo automatico
Quando un utente acquista un abbonamento, viene visualizzato un messaggio SubscriptionNotification
con
il tipo SUBSCRIPTION_PURCHASED
viene inviato al client RTDN. Se ricevi
questa notifica o registri un nuovo acquisto in-app tramite
PurchasesUpdatedListener
o recuperando manualmente gli acquisti nel tuo
il metodo onResume()
dell'app, devi elaborare il nuovo acquisto in sicurezza
di un backend cloud. A tale scopo, procedi nel seguente modo:
- Esegui una query sul
purchases.subscriptionsv2.get
per ottenere un abbonamento risorsa che contiene lo stato dell'abbonamento più recente. - Assicurati che il valore dell'attributo
subscriptionState
èSUBSCRIPTION_STATE_ACTIVE
. - Verifica l'acquisto.
- Concedere all'utente l'accesso ai contenuti. L'account utente associato
l'acquisto può essere identificato
ExternalAccountIdentifiers
della risorsa di abbonamento se sono stati impostati identificatori al momento dell'acquisto con l'utilizzosetObfuscatedAccountId
esetObfuscatedProfileId
La Libreria Fatturazione Play include anche un metodo per confermare un abbonamento,
acknowledgePurchase()
,
e un metodo per controllare lo stato di conferma,
isAcknowledged()
.
Tuttavia, ti consigliamo di gestire l'elaborazione degli acquisti nel tuo backend per
una maggiore sicurezza.
La risorsa di abbonamento per i nuovi acquisti è simile alla seguente esempio:
{
"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
}
}
],
}
Rinnovare l'abbonamento
Per gli abbonamenti senza rate e con rinnovo automatico, SUBSCRIPTION_RENEWED
viene inviata una notifica al momento del rinnovo dell'abbonamento. Per la rata
sottoscrizioni, viene inviata una notifica SUBSCRIPTION_RENEWED
ogni volta che
l'abbonamento viene addebitato alla data di fatturazione. Assicurati che l'utente sia ancora
diritto all'abbonamento e poi aggiorna lo stato dell'abbonamento con il nuovo
expiryTime
specificati nell'abbonamento
risorsa restituita da Google Play
l'API Developer. La risorsa di abbonamento è simile all'esempio seguente:
{
"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
}
}
]
}
Non è necessario confermare i rinnovi dell'abbonamento.
Periodo di tolleranza
In caso di problemi di pagamento con il rinnovo di un abbonamento, Google invia una notifica utente e tenta periodicamente di rinnovare l'abbonamento per un po' di tempo prima la scadenza dell'abbonamento. Il periodo di recupero può essere costituito da un periodo di tolleranza seguito da un periodo di sospensione dell'account. Durante un periodo di tolleranza, l'utente deve continueranno ad avere accesso al proprio diritto di abbonamento.
La
queryPurchasesAsync()
continua a restituire acquisti che si trovano nel periodo di tolleranza. Se la tua app
si basa esclusivamente su queryPurchasesAsync
per verificare se un utente ha diritto a un
dell'abbonamento, la tua app dovrebbe gestire automaticamente i periodi di tolleranza,
questi abbonamenti vengono mostrati come attivi tramite la Libreria Fatturazione Play.
La sincronizzazione dello stato dell'abbonamento con il backend ti consente di
dei pagamenti rifiutati e ti fornisce maggiore contesto nel tentativo di ridurre i costi involontari
abbandono. Ascolta
SubscriptionNotification
messaggi
con il tipo SUBSCRIPTION_IN_GRACE_PERIOD
per ricevere una notifica quando l'utente inserisce una
un periodo di tolleranza. Mentre l'utente è in un periodo di tolleranza, l'abbonamento
risorsa
contiene autoRenewEnabled = true
. Google Play estende in modo dinamico la
expiryTime
valore fino alla scadenza del periodo di tolleranza a causa del diritto
dovrebbe durare fino all'annullamento da parte dell'utente o fino alla scadenza del periodo di tolleranza per la sua
lunghezza massima. Il valore del campo subscriptionState
durante questo periodo è
SUBSCRIPTION_STATE_IN_GRACE_PERIOD
. La risorsa di abbonamento è simile a
nell'esempio seguente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Google Play comunica agli utenti che si trovano in un periodo di tolleranza che il loro pagamento è stato rifiutato e chiede di risolvere i problemi relativi al metodo di pagamento nel Play Store. Quando un utente entra in un periodo di tolleranza, dovresti anche incoraggiarlo a correggere la il metodo di pagamento nel caso in cui l'errore sia stato involontario. Un modo semplice per farlo consiste nell'usare lo strumento In-App Messaging tramite Google Cloud. Se chiami questa API Quando l'utente apre la tua app, viene mostrato un messaggio di Play in un una snackbar che informa l'utente che il pagamento è stato rifiutato. Questo messaggio include anche un link diretto che consente all'utente di correggere il metodo di pagamento su Google Gioca.
Non appena l'utente sistema il metodo di pagamento, l'abbonamento si rinnova con il suo data di rinnovo originale e potrai gestirlo come descritto in Rinnovi.
Se l'utente non correggi il metodo di pagamento durante il periodo di tolleranza, comporta la sospensione dell'account e perde il diritto.
Accesso e recupero del periodo di tolleranza
La figura 2 mostra una cronologia per un abbonamento che entra in un periodo di tolleranza e e recupera quando l'utente corregge il proprio metodo di pagamento. Dopo il periodo di tolleranza alla scadenza, l'utente dovrebbe perdere i vantaggi dell'abbonamento e passare alla sospensione dell'account.
È importante ricordare i seguenti punti:
- Durante un periodo di tolleranza, l'utente deve mantenere l'accesso ai vantaggi dell'abbonamento.
- Quando un abbonamento viene ripristinato durante un periodo di tolleranza, la data di rinnovo viene non reimpostata.
- Se aumenti il periodo di tolleranza, ad esempio da 7 a 14 giorni, gli utenti che sono in un periodo di tolleranza per ottenere l'accesso esteso ai vantaggi dell'abbonamento.
- Se riduci il periodo di tolleranza, gli utenti che rientrano sufficientemente nel periodo di tolleranza precedente periodo di tolleranza per superare il nuovo periodo di tolleranza avranno i vantaggi dell'abbonamento revocata immediatamente. Ad esempio, se riduci il periodo di tolleranza da da 14 a 7 giorni, gli utenti che si trovano tra gli 8 e i 14 giorni del periodo di tolleranza precedente hanno i vantaggi dell'abbonamento verranno revocati immediatamente.
- L'abbonamento rimane in stato attivo e non riceverai un periodo di tolleranza periodo di tempo con RTDN fino al termine del periodo di tolleranza
Periodo di tolleranza silenziosa
Puoi impostare un periodo di tolleranza di 0 giorni, ma Google Play attenderà almeno 1 giorno per
garantire che ci sia tempo sufficiente per i nuovi tentativi di pagamento. Questo periodo di tolleranza silenzioso offre
rete di sicurezza per l'elaborazione dei pagamenti. Durante questo periodo di 24 ore,
rimane in
Stato ACTIVE
.
Il modo migliore per rimanere sincronizzato con le modifiche dello stato dell'abbonamento è
ascoltare e reagire alle notifiche in tempo reale per lo sviluppatore (RTDN). Chiama il
purchases.subscriptionsv2.get()
all'ora RTDN anziché alla data di scadenza per ottenere un metodo
lo stato dell'abbonamento.
A seconda dello stato dell'abbonamento dopo il periodo di tolleranza della modalità silenziosa di 24 ore dovresti ricevere una delle seguenti notifiche:
SUBSCRIPTION_ON_HOLD
(se abilitata)SUBSCRIPTION_CANCELED
(se annullato)SUBSCRIPTION_EXPIRED
(se scaduto)SUBSCRIPTION_RENEWED
(se il rinnovo è andato a buon fine)
Puoi anche chiamare il metodo subscriptionV2.get()
in qualsiasi momento dopo il tag
Periodo di tolleranza senza audio di 24 ore per conoscere lo stato più recente dell'abbonamento.
Sospensione dell'account
In caso di problemi di pagamento con il rinnovo di un abbonamento, dopo un periodo di tolleranza di Google Cloud, inizia un periodo di sospensione dell'account. Quando l'abbonamento comporta la sospensione dell'account, devi bloccare l'accesso all'abbonamento e il diritto di accesso.
Durante la sospensione dell'account, devi continuare a gestire eventuali cancellazioni, i ripristini o il riacquisto degli abbonamenti in base alle necessità. perché è possibile che l'utente apporti queste modifiche mentre l'abbonamento è in attesa.
Le RTDN ti inviano una notifica quando l'utente entra nel periodo di sospensione dell'account, in modo che tu possa il prima possibile il motivo per cui il loro accesso all'abbonamento è stato sospeso. Un modo semplice per farlo è utilizzare lo strumento In-App Messaging tramite Google Cloud. Chiamata a questa API quando l'utente apre l'app; gli verrà mostrato un messaggio in una snackbar temporanea per informarlo che il pagamento è stato rifiutato. Questo messaggio include anche Un link diretto che consente all'utente di correggere il metodo di pagamento su Google Play.
Se i tuoi utenti possono accedere ai contenuti dell'abbonamento al di fuori della tua app, potrebbero scoprire di non avere più accesso su altre piattaforme. Potresti voler inviare una notifica push o un'email all'utente per informarlo che L'abbonamento non è più attivo a causa del pagamento rifiutato.
L'abbonamento non viene restituito
queryPurchasesAsync()
durante la sospensione dell'account, quindi se la tua app si basa su questo metodo per visualizzare
acquisti esistenti, dovresti supportare la sospensione dell'account per impostazione predefinita.
Con lo sviluppatore in tempo reale
notifiche, ricevi un
SubscriptionNotification
messaggio
di tipo SUBSCRIPTION_ON_HOLD
quando un abbonamento avvia la sospensione dell'account. Chiama
il
purchases.subscriptionsv2.get
dal tuo server di backend sicuro per recuperare il nuovo abbonamento
informazioni. Durante la sospensione dell'account, il campo expiryTime
dell'abbonamento
risorsa
è impostato su un timestamp passato e il campo subscriptionState
è impostato su
SUBSCRIPTION_STATE_ON_HOLD
:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Per ripristinare l'accesso, gli utenti devono correggere il proprio metodo di pagamento. Google Play informa gli utenti nel dell'account in sospeso in merito al rifiuto dei pagamenti, nonché incoraggiarli a risolvere il problema il proprio metodo di pagamento.
Dopo che l'utente ha corretto il metodo di pagamento, l'abbonamento torna a essere attivo
ed è quindi necessario ripristinare l'accesso ai contenuti in abbonamento. In questo caso,
il token di acquisto è lo stesso di prima dell'inizio della sospensione dell'account
è in corso il recupero dello stesso acquisto e ricevi un RTDN di tipo
SUBSCRIPTION_RECOVERED
.
Per gli abbonamenti a rate, potrebbero verificarsi rifiuti e recuperi di pagamento per a qualsiasi tentativo di pagamento individuale.
Dopo il recupero, la Libreria Fatturazione Play restituisce nuovamente l'abbonamento tramite
il metodo queryPurchasesAsync()
. Se utilizzi questo metodo per determinare se
un utente ha diritto a un abbonamento, la tua app dovrebbe gestire automaticamente
dell'abbonamento in seguito alla sospensione dell'account.
Ascolta un
SubscriptionNotification
messaggio
con il tipo SUBSCRIPTION_RECOVERED
per ricevere una notifica quando un abbonamento viene
ripristinato e l'utente dovrebbe recuperare l'accesso. Se richiedi un abbonamento
dopo aver ricevuto questa notifica, il campo expiryTime
è impostato su un timestamp
in futuro e il campo subscriptionState
è impostato su
Di nuovo SUBSCRIPTION_STATE_ACTIVE
:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
Se l'utente non corregge il metodo di pagamento prima del termine della sospensione dell'account
punto, riceverai invece un RTDN di tipo SUBSCRIPTION_CANCELED
. Per
per istruzioni su come gestire un annullamento, consulta Annullamenti. Quando
query per un abbonamento che è stato annullato in questo modo, l'oggetto
Il campo expiryTime
è impostato su un timestamp precedente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Subito dopo aver ricevuto la notifica della cancellazione durante la sospensione dell'account,
riceverà anche un RTDN di tipo SUBSCRIPTION_EXPIRED
perché l'utente
per il diritto a pagamento e l'abbonamento è stato abbandonato con l'annullamento.
Puoi gestire questa scadenza come faresti normalmente.
L'utente può riacquistare l'accesso acquistando lo stesso piano di abbonamento o qualsiasi
piano che offri tramite l'app durante il periodo di sospensione dell'account da
l'acquisto originale. In questo caso, viene emesso un nuovo token di acquisto e
viene restituito un nuovo valore nell'ambito di un evento SUBSCRIPTION_PURCHASED
che
rappresenta questa nuova istanza.
Accesso e recupero dalla sospensione dell'account
La figura 3 mostra la cronologia per un abbonamento che prevede la sospensione dell'account e e recupera quando l'utente corregge il proprio metodo di pagamento.
Come nell'esempio precedente, la Figura 4 mostra la cronologia di un abbonamento che entra in un periodo di tolleranza prima di entrare nella sospensione dell'account e infine il recupero durante l'attesa.
È importante ricordare i seguenti punti:
- Prima che un abbonamento venga sospeso, Google Play aggiunge tenta di addebitare l'importo sul metodo di pagamento per un massimo di 48 ore. L'utente mantiene vantaggi dell'abbonamento durante questo periodo. Una volta trascorso questo periodo, l'abbonamento entra in sospensione dell'account e l'utente dovrebbe perdere accesso ai vantaggi dell'abbonamento.
- L'abbonamento entra in sospensione dell'account direttamente quando il tuo account viene ripristinato da uno stato di pausa con una forma di pagamento non andata a buon fine.
- Quando un abbonamento recupera dopo la sospensione dell'account, la data di rinnovo viene reimpostata.
Scadenze
Alla scadenza di un abbonamento, l'utente non può più accedere all'abbonamento. R
SubscriptionNotification
messaggio di tipo SUBSCRIPTION_EXPIRED
è stato inviato
in quel caso. Quando ricevi questa notifica, invia una richiesta allo sviluppatore Google Play
API per ottenere l'abbonamento più recente
risorsa.
Dopo aver confermato che subscriptionState
è SUBSCRIPTION_STATE_EXPIRED
,
rimuovi il diritto e registra lo stato di acquisto come non valido nel tuo
di un backend cloud. La risorsa di abbonamento è simile all'esempio seguente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
Annullamenti
Un utente può annullare volontariamente un abbonamento dal Centro abbonamenti di Google Play
o l'abbonamento viene annullato automaticamente nel caso in cui non lo recuperi dopo
l'account è sospeso. Gli sviluppatori possono anche attivare
annulla con
purchases.subscriptions.cancel
Quando un abbonamento viene annullato, l'utente mantiene l'accesso ai contenuti fino a quando
alla fine del ciclo di fatturazione corrente. Al termine del ciclo di fatturazione, l'accesso
potrebbe essere revocato.
L'annullamento di un abbonamento senza rate e con rinnovo automatico attiva
Notifica SUBSCRIPTION_CANCELED
. Quando
ricevi questa notifica, la
risorsa
restituito dall'API Google Play Developer ha il campo subscriptionState
impostato su SUBSCRIPTION_STATE_CANCELED
e il campo expiryTime
contiene il
Data in cui l'utente deve perdere l'accesso all'abbonamento. Se la data è in
nel passato, l'utente dovrebbe perdere immediatamente tale diritto. Questo potrebbe accadere,
ad esempio se un utente annulla un abbonamento mentre è connesso al tuo account.
in sospeso a causa di un rifiuto del pagamento.
La risorsa dell'abbonamento per un acquisto annullato è simile alla seguente: esempio:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
Per gli abbonamenti a rate, un SUBSCRIPTION_CANCELLATION_SCHEDULED
viene inviata una notifica in seguito a un annullamento avviato dall'utente quando il pagamento rimane
per il periodo di impegno. L'annullamento è in attesa ed avrà effetto in data
alla fine del periodo di impegno corrente. Quando ricevi questa notifica,
risorsa di abbonamento restituita dall'API Google Play Developer ha
il campo subscriptionState impostato su SUBSCRIPTION_STATE_ACTIVE
perché
l'abbonamento a rate è ancora attivo fino al termine del periodo di impegno.
Tuttavia, è presente un oggetto pendingAnnullation vuoto.
Viene inviata una notifica SUBSCRIPTION_CANCELED
seguita da un
SUBSCRIPTION_EXPIRED
al termine del periodo di impegno.
La risorsa di abbonamento per l'acquisto di un abbonamento a rate che è in attesa di annullamento è simile al seguente esempio:
{
"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": {}
...
}
}
}
],
}
Puoi esaminare il campo canceledStateContext
nella risorsa di abbonamento per
scoprire perché l'abbonamento è stato annullato (ad esempio, se l'abbonamento
è stato annullato dall'utente, dal sistema o da te). Se l'abbonamento era
annullato dall'utente, puoi guardare il campo userInitiatedCancellation
per
scoprire perché l'utente ha annullato l'abbonamento. Può essere utile per comunicare
strategie.
Quando un abbonamento viene annullato, ma non è ancora scaduto, viene
ancora restituito da
queryPurchasesAsync()
Potresti voler mostrare un messaggio nell'app per informare l'utente che la sua
abbonamento è stato annullato indicando la data di scadenza.
Revoche
Un abbonamento può essere revocato per diversi motivi, tra cui il backend
la revoca dell'abbonamento utilizzando
purchases.subscriptionsv2.revoke
o l'addebito dell'acquisto. In questo caso, revoca il ruolo
immediatamente. Un messaggio SubscriptionNotification
con tipo
In questo caso viene inviato SUBSCRIPTION_REVOKED
. Quando ricevi questo
notifica, la sottoscrizione
risorsa
restituito dall'API Google Play Developer ha il campo subscriptionState
impostato su SUBSCRIPTION_STATE_EXPIRED
.
La risorsa di abbonamento per un acquisto revocato è simile alla seguente: esempio:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
Sottoscrizioni differite
Esistono vari motivi per cui potrebbe essere utile estendere la copertura
e il diritto di accesso. Ad esempio, potresti voler offrire agli utenti l'accesso senza costi come speciale
promozione, ad esempio offrire una settimana senza costi per l'acquisto di un film o offrire senza costi
l'accesso ai clienti come un gesto di reputazione. Puoi utilizzare lo
purchases.subscriptions.defer
dell'API Play Developer per avanzare alla data di fatturazione successiva per un
abbonamento con rinnovo automatico. Quando esegui questa operazione, SubscriptionNotification
viene inviato un messaggio di tipo SUBSCRIPTION_DEFERRED
. Durante il periodo di differimento,
l'utente viene iscritto ai tuoi contenuti con accesso completo, ma non riceve alcun addebito. La
la data di rinnovo dell'abbonamento viene aggiornata alla nuova data.
Per i piani prepagati, puoi utilizzare l'API Defer billing per posticipare la scadenza nel tempo.
La risorsa di sottoscrizione per una sottoscrizione differita è simile alla nell'esempio seguente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
Abbonamenti in pausa
Puoi ridurre il tasso di abbandono volontario consentendo agli utenti di mettere in pausa l'abbonamento. Quando attivi la funzionalità di sospensione, gli utenti possono scegliere di mettere in pausa il proprio abbonamento per un periodo di tempo compreso tra una settimana e tre mesi, a seconda del in un periodo ricorrente.
Ricorrenza degli abbonamenti | Settimanale | Mensile | 3 mesi | 6 mesi | Annuale |
---|---|---|---|---|---|
Periodi di pausa disponibili* | 1 settimana 2 settimane 3 settimane 4 settimane |
1 mese 2 mesi 3 mesi |
1 mese 2 mesi 3 mesi |
1 mese 2 mesi 3 mesi |
N/D |
La sospensione di un abbonamento ha effetto solo al termine dell'attuale periodo di fatturazione. Mentre l'abbonamento è in pausa, l'utente non ha accesso ai e non pagano il prezzo di rinnovo. Al termine della pausa periodo, l'abbonamento riprende e Google tenta di rinnovarlo. Se la ripresa dell'abbonamento va a buon fine, l'abbonamento torna di nuovo attivo. Se il ripristino non riesce a causa di un problema di pagamento, l'utente inserisce lo stato di sospensione dell'account come mostrato nelle figure 5 e 6:
di Gemini Advanced.Un utente può anche scegliere di ripristinare manualmente un abbonamento in qualsiasi momento durante il un periodo di pausa, come mostrato nella figura 6. Quando un utente ripristina manualmente la fatturazione, modifiche apportate alla data di ripristino manuale.
Quando l'abbonamento di un utente viene sospeso, la Libreria Fatturazione Play non restituisce
l'abbonamento tramite
queryPurchasesAsync()
. Se l'abbonamento viene ripristinato, viene usato il metodo queryPurchasesAsync()
e lo restituisce di nuovo.
Ascolta gli RTDN per sapere quando un utente sospende l'abbonamento. Questi le notifiche ti consentono anche di informare gli utenti nella tua app che hanno ha messo in pausa il proprio abbonamento e non vi ha accesso. Devi anche fornire un in modo che l'utente possa ripristinare manualmente l'abbonamento in qualsiasi momento, utilizzando un link diretto a Google Play.
Un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
viene inviato quando l'utente avvia
di mettere in pausa l'abbonamento. Al momento, l'utente deve mantenere l'accesso a
l'abbonamento fino alla successiva data di rinnovo e l'abbonamento
risorsa
contiene autoRenewEnabled = true
. Il valore del campo subscriptionState
è SUBSCRIPTION_STATE_ACTIVE
in questo punto.
Viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PAUSED
quando
la pausa entra in vigore. In questo caso, l'utente dovrebbe perdere l'accesso ai propri
e la risorsa di abbonamento contiene autoRenewEnabled = true
,
e il campo subscriptionState
è impostato su SUBSCRIPTION_STATE_PAUSED
. Puoi
per vedere quando è previsto il rinnovo previsto dell'abbonamento controllando il
PausedStateContext
.
Se viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_RENEWED
l'abbonamento viene ripristinato automaticamente al termine del periodo di pausa
o se l'utente ha scelto di ripristinare manualmente l'abbonamento. Questo aspetto dovrebbe essere gestito
come descritto in Rinnovi.
Se viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_ON_HOLD
si è verificato un errore di pagamento durante il tentativo di ripristinare l'abbonamento dopo la pausa.
Questa operazione va gestita come descritto nella sezione Sospensione dell'account.
Riabbonati
Per i piani base degli abbonamenti con rinnovo automatico, sul Google Play Store potrebbe essere visualizzata una Pulsante Riabbonati. Questo pulsante consente agli utenti di recuperare l'accesso a un abbonamento. Potrebbe non essere visualizzato per vari motivi, ad esempio quando un abbonamento è scaduto molto tempo fa.
Anche se il pulsante è sempre etichettato come Riabbonati, la sua funzionalità dipende in base allo stato dell'abbonamento.
Mentre un abbonamento viene annullato ma non è ancora scaduto, l'utente continua a essere si è abbonato e riceve i vantaggi dell'abbonamento. Se l'utente tocca Riabbonati, l'annullamento viene annullato e l'abbonamento continua a rinnovarsi. Questa azione è nota come ripristino nella documentazione per gli sviluppatori e nelle API di Google Play.
Se un abbonamento con rinnovo automatico è scaduto, puoi consentire agli utenti di acquistare. lo stesso piano base di abbonamento. Questa azione è nota come riabbonati in documentazione e API per gli sviluppatori di Google Play. Puoi configurare questa opzione per ogni piano base in Play Console o utilizzando l'API.
Ripristina prima della scadenza
Se la tua app si basa esclusivamente sulle
queryPurchasesAsync()
per stabilire se un utente ha diritto a un abbonamento, la tua app
deve gestire automaticamente i ripristini perché queryPurchasesAsync()
continua a restituire acquisti annullati prima delle date di scadenza. R
l'abbonamento ripristinato continuerà a rinnovarsi come se non fosse stato annullato.
Se la tua app sincronizza lo stato dell'abbonamento con un backend, dovresti ascoltare
per un SubscriptionNotification
di tipo SUBSCRIPTION_RESTARTED
. Dopo aver ricevuto l'RTDN,
la tua app può rispondere alla notifica, registra che l'abbonamento è ora
impostata su Rinnova e interrompi la visualizzazione dei messaggi di ripristino nella tua app. La
di sottoscrizione è simile all'esempio seguente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
Riabbonati dopo la scadenza
Se viene configurato un piano base con rinnovo automatico usando Google Play Console o l'API per consentire la funzionalità Riabbonati, gli utenti possono acquistare di nuovo un abbonamento scaduto nel Google Play Store.
Si tratta di nuovi acquisti. Google Play emette un nuovo token di acquisto e
riceve un RTDN di tipo SUBSCRIPTION_PURCHASED
. Lo stato dell'acquisto
per questo tipo di acquisto fuori app non include un linkedPurchaseToken
associati all'acquisto originale in questo caso, perché l'offerta
è scaduto completamente. Si tratta di nuovi acquisti che il backend deve
l'elaborazione e l'accettazione come per qualsiasi altro acquisto.
Upgrade, downgrade e riabbonati
Quando un utente esegue l'upgrade, il downgrade o si registra dopo dall'app prima della scadenza dell'abbonamento, il vecchio viene invalidato e viene creato un nuovo abbonamento con un nuovo token di acquisto.
Inoltre, l'abbonamento
risorsa
restituito dall'API Google Play Developer contiene un valore linkedPurchaseToken
che indica il vecchio acquisto da cui l'utente ha eseguito l'upgrade, il downgrade
o a rinnovare l'abbonamento. Puoi utilizzare il token di acquisto in questo campo per cercare il vecchio
abbonamento e identificare l'account utente esistente in modo da poter associare
il nuovo acquisto con lo stesso account.
Prima di offrire opzioni di upgrade, downgrade o riabbonati a un utente della tua app, devi confermare l'abbonamento esistente. Cambia il piano o riabbonati viene bloccato se l'abbonamento esistente è ancora in attesa di accettazione.
Se l'utente acquista correttamente l'upgrade, il downgrade o si riabbona, si tratta di un nuovo acquisto che devi confermare. Metodo consigliato a tale scopo devi utilizzare l'API Google Play Developer. La risorsa di abbonamento è simile all'esempio seguente:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Modifiche dei prezzi
Consulta la guida alle best practice per la modifica del prezzo per scoprire di più sulla modifica dei prezzi dell'abbonamento con rinnovo automatico e su come inviare notifiche agli utenti quando opportuno.
Quando le variazioni di prezzo vengono applicate agli abbonati esistenti come attivazione, ha ricevuto un RTDN se l'utente interviene per confermare o rifiutare il nuovo prezzo.
Gestire la conferma da parte dell'utente di una variazione di prezzo per l'attivazione
Quando un utente accetta l'aumento di prezzo del tuo abbonamento, ricevi un
SubscriptionNotification
messaggio
con il tipo SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
. Con prezzo tacito
diminuire o al momento del rinnovo dell'aumento di prezzo dell'abbonamento, riceverai
SubscriptionNotification
messaggio di tipo SUBSCRIPTION_RENEWED
. Coccolati
come per qualsiasi altro rinnovo.
Gestire i casi in cui non viene accettato un aumento esplicito di prezzo
Se un utente non ha accettato l'aumento di prezzo attivato prima di dover rinnovare l'abbonamento
al prezzo più alto, l'iscrizione viene annullata automaticamente e ricevi
SubscriptionNotification
messaggio
con il tipo SUBSCRIPTION_CANCELED
. Gestisci questo evento come descritto in
Annullamenti.
Gli utenti possono anche annullare i propri abbonamenti con un aumento tacito di prezzo seguendo lo stesso meccanismo.
Gestire il ciclo di vita per i piani prepagati
Come per gli abbonamenti con rinnovo automatico, devi confermare i piani prepagati dopo ogni nuovo acquisto. Nel caso di piani prepagati, è necessario innanzitutto elaborare sia l'acquisto iniziale sia le eventuali ricariche, in quanto l'utente deve durante il flusso di acquisto.
Considerata la potenziale durata dei piani prepagati brevi, è importante conferma l'acquisto il prima possibile. Piani prepagati della durata di una settimana o più devono essere confermati entro 3 giorni. Piani prepagati con un durata inferiore a una settimana deve essere confermata entro metà del piano durata massima. Ad esempio, gli sviluppatori hanno 1,5 giorni di tempo per confermare l'acquisto di un piano prepagato di tre giorni.
Un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PURCHASED
viene inviato al tuo client RTDN ogni volta che
viene acquistato un abbonamento con piano prepagato, include ogni ricarica. Chiama il
purchases.subscriptionsv2.get
per controllare lo stato dell'abbonamento del piano prepagato più recente.
Viene emesso un nuovo token di acquisto per gli acquisti di ricarica e ricevi i
il token di acquisto precedente nel campo linkedPurchaseToken
nell'ambito del nuovo
di acquisto dell'abbonamento. Il token di acquisto è valido dall'abbonamento
fino a 60 giorni dopo la scadenza. Dopo questa data, il token di acquisto
non più valido per chiamare l'API Google Play Developer.
La risorsa di abbonamento per l'acquisto di un piano prepagato è simile alla nell'esempio seguente:
{
"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
}
}
]
}
Puoi vedere quando termina il diritto nel campo expiryTime
. Ricarica
gli acquisti aumentano il tempo del diritto accumulandolo. Ciò significa che se
l'utente ricarica prima che scada il diritto originale, viene aggiunto il nuovo orario
in aggiunta alla data di scadenza precedente.
Potresti voler mostrare un messaggio nell'app per informare l'utente che la sua
gli abbonamenti prepagati possono essere estesi con una ricarica. Per sapere quando un utente verrà
controlla il campo allowExtendAfterTime
nell'abbonamento
risorsa.
I piani prepagati non si rinnovano automaticamente, quindi non possono essere annullati. Se un utente vuole annullare un piano prepagato, può lasciarlo raggiungere la data di scadenza.