Gli acquisti di abbonamenti possono essere sottoposti a diversi stati durante il loro ciclo di vita, a seconda di molti fattori, tra cui il comportamento di rinnovo automatico, le situazioni di rifiuto dei pagamenti e le azioni di gestione degli sviluppatori.
Gestire il ciclo di vita degli abbonamenti con rinnovo automatico
Quando lo stato dell'abbonamento di un utente cambia, il tuo server di backend riceve un messaggio SubscriptionNotification
Per aggiornare lo stato nel backend, chiama l'API purchases.subscriptionsv2.get
con il token di acquisto incluso nella notifica. Questo endpoint fornisce
lo stato più recente dell'abbonamento in base a un token di acquisto ed è considerato
la fonte attendibile per la gestione degli abbonamenti.
Il token di acquisto è valido a partire dall'iscrizione dell'abbonamento fino a 60 giorni dopo la scadenza. Dopo questa data, il token di acquisto non sarà più valido per chiamare l'API Google Play Developer.
Nuovi acquisti di abbonamenti con rinnovo automatico
Quando un utente acquista un abbonamento, al client RTDN viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PURCHASED
. Se ricevi questa notifica o registri un nuovo acquisto in-app tramite PurchasesUpdatedListener
o recuperi manualmente gli acquisti nel metodo onResume()
della tua app, devi elaborare il nuovo acquisto nel tuo backend sicuro. A tale scopo, proceda nel seguente modo:
- Esegui una query sull'endpoint
purchases.subscriptionsv2.get
per ottenere una risorsa dell'abbonamento che contenga lo stato dell'abbonamento più recente. - Assicurati che il valore del campo
subscriptionState
siaSUBSCRIPTION_STATE_ACTIVE
. - Verifica l'acquisto.
- Concedere all'utente l'accesso ai contenuti. L'account utente associato all'acquisto può essere identificato con l'oggetto
ExternalAccountIdentifiers
della risorsa di abbonamento se gli identificatori sono stati impostati al momento dell'acquisto utilizzandosetObfuscatedAccountId
esetObfuscatedProfileId
.
La Libreria Fatturazione Play include anche un metodo per confermare un abbonamento acknowledgePurchase()
e un metodo per verificare lo stato di accettazione isAcknowledged()
.
Tuttavia, per una maggiore sicurezza, ti consigliamo di gestire l'elaborazione degli acquisti nel backend.
La risorsa di abbonamento per i nuovi acquisti è simile al 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
Quando un abbonamento con rinnovo automatico viene rinnovato, viene inviata una notifica SUBSCRIPTION_RENEWED
. Assicurati che l'utente abbia ancora diritto all'abbonamento, quindi
aggiorna lo stato dell'abbonamento con il nuovo expiryTime
fornito nella
risorsa
abbonamento
restituita dall'API Google Play 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 il rinnovo dell'abbonamento.
Periodo di tolleranza
Il periodo di tolleranza è pensato per aiutarti a ridurre il tasso di abbandono involontario. Se il periodo di tolleranza è abilitato per un piano base con rinnovo automatico, l'acquisto di un abbonamento entra nel periodo di tolleranza in caso di problemi con il pagamento alla fine del ciclo di fatturazione. Durante questo periodo, l'utente dovrebbe comunque avere accesso al proprio abbonamento mentre Google Play prova a rinnovarlo ripetendo l'addebito periodicamente.
Il metodo queryPurchasesAsync()
continua a restituire gli acquisti che sono nel periodo di tolleranza. Se la tua app si basa esclusivamente su queryPurchasesAsync
per verificare se un utente ha diritto a un abbonamento, l'app dovrebbe gestire automaticamente i periodi di tolleranza, perché questi abbonamenti vengono mostrati come attivi nella Libreria Fatturazione Play.
La sincronizzazione dello stato degli abbonamenti con il tuo backend ti consente di essere maggiormente consapevole dei rifiuti di pagamento e di avere maggiore contesto per cercare di ridurre il tasso di abbandono involontario. Ascolta i messaggi di SubscriptionNotification
di tipo SUBSCRIPTION_IN_GRACE_PERIOD
per ricevere una notifica quando l'utente entra in un periodo di tolleranza. Mentre l'utente si trova in un periodo di tolleranza, la risorsa di abbonamento contiene autoRenewEnabled = true
. Google Play estende in modo dinamico il valore expiryTime
fino alla scadenza del periodo di tolleranza perché il diritto dovrebbe durare fino all'annullamento da parte dell'utente o fino al termine del periodo di tolleranza per la durata massima. Il valore del campo subscriptionState
durante questo periodo è
SUBSCRIPTION_STATE_IN_GRACE_PERIOD
. La risorsa di abbonamento è simile all'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 informa gli utenti in un periodo di tolleranza che il loro pagamento è stato rifiutato e li invita a 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 il metodo di pagamento nel caso in cui l'errore non fosse volontario. Un modo semplice per eseguire questa operazione è utilizzare l'API In-App Messaging. Se chiami questa API all'apertura della tua app, gli utenti vedranno un messaggio di Play in uno snackbar temporaneo che informa l'utente che il suo pagamento è stato rifiutato. Questo messaggio include anche un link diretto che consente all'utente di correggere il proprio metodo di pagamento su Google Play.
Non appena l'utente modifica il metodo di pagamento, l'abbonamento viene rinnovato con la data di rinnovo originale e potrai gestire il rinnovo come descritto nella sezione Rinnovi.
Se l'utente non modifica il metodo di pagamento durante il periodo di tolleranza, l'abbonamento entra in sospensione dell'account e perderà il diritto.
Accesso e recupero durante il periodo di tolleranza
La Figura 2 mostra le tempistiche di un abbonamento che entra in un periodo di tolleranza e poi viene recuperato quando l'utente modifica il metodo di pagamento. Al termine del periodo di tolleranza, l'utente dovrebbe perdere i vantaggi dell'abbonamento e entrare nella sospensione dell'account.

È importante ricordare i seguenti punti:
- Durante il periodo di tolleranza, l'utente deve mantenere l'accesso ai vantaggi dell'abbonamento.
- Quando un abbonamento viene recuperato durante un periodo di tolleranza, la data di rinnovo non viene reimpostata.
- Se prolunghi il periodo di tolleranza, ad esempio da 7 a 14 giorni, gli utenti che stanno usufruendo di un periodo di tolleranza ottengono l'accesso esteso ai vantaggi dell'abbonamento.
- Se riduci il periodo di tolleranza, i vantaggi dell'abbonamento vengono revocati immediatamente per gli utenti che sono arrivati nel vecchio periodo di tolleranza per superare quello nuovo. Ad esempio, se riduci il periodo di tolleranza da 14 a 7 giorni, i vantaggi dell'abbonamento vengono revocati immediatamente agli utenti che rientrano tra i 8 e i 14 giorni del periodo di tolleranza precedente.
Sospensione dell'account
La sospensione dell'account è una funzionalità che riduce il tasso di abbandono involontario a causa di un pagamento rifiutato. Lo stato di sospensione dell'abbonamento dell'account inizia quando la forma di pagamento di un utente non va a buon fine al momento del rinnovo automatico e qualsiasi periodo di tolleranza associato è terminato senza risoluzione del pagamento. Quando un abbonamento diventa sospeso, devi bloccare l'accesso ai tuoi contenuti o servizi. Il periodo di sospensione dell'account dura fino a 30 giorni.
Durante la sospensione dell'account, devi continuare a gestire eventuali annullare, ripristino o riacquisto degli abbonamenti in base alle necessità, perché l'utente può apportare queste modifiche mentre l'abbonamento è sospeso.
Gli RTDN ti inviano una notifica quando l'utente entra nel periodo di sospensione dell'account, in modo che tu possa comunicare il prima possibile il motivo della sospensione del suo accesso all'abbonamento. Un modo semplice per farlo è utilizzare l'API In-App Messaging. La chiamata a questa API all'apertura dell'app mostrerà all'utente un messaggio in una snackbar temporanea che lo informa 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 in abbonamento al di fuori della tua app, potrebbero scoprire di aver perso l'accesso su diverse piattaforme. Potresti inviare una notifica push o un'email all'utente per informarlo che il suo abbonamento non è più attivo a causa di un pagamento rifiutato.
Il metodo queryPurchasesAsync()
non restituisce l'abbonamento durante la sospensione dell'account, quindi se la tua app si basa su questo metodo per visualizzare gli acquisti esistenti, dovresti supportare la sospensione dell'account per impostazione predefinita.
Con le notifiche in tempo reale per lo sviluppatore, ricevi un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_ON_HOLD
quando un abbonamento diventa sospeso. Chiama il metodo purchases.subscriptionsv2.get
dal tuo server di backend sicuro per recuperare le informazioni sul nuovo abbonamento. Durante il periodo di sospensione dell'account, il campo expiryTime
della risorsa
abbonamento
è 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 metodo di pagamento. Google Play informa gli utenti che hanno sospeso l'account il loro pagamento rifiutato e che dovresti anche invitarli a modificare il metodo di pagamento.
Dopo che l'utente ha corretto il metodo di pagamento, l'abbonamento torna a essere attivo
e devi ripristinare l'accesso ai contenuti in questione. In questo caso, il token di acquisto è uguale a prima dell'inizio della sospensione dell'account perché lo stesso acquisto è in fase di recupero e ricevi un RTDN di tipo SUBSCRIPTION_RECOVERED
.
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 il recupero dell'abbonamento dopo la sospensione dell'account.
Ascolta un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_RECOVERED
da inviare quando viene ripristinato un abbonamento e l'utente dovrebbe riottenere l'accesso. Se esegui una query per un abbonamento dopo aver ricevuto questa notifica, il campo expiryTime
viene impostato su un timestamp futuro e il campo subscriptionState
viene impostato di nuovo su 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 del periodo di sospensione dell'account, riceverai invece un RTDN di tipo SUBSCRIPTION_CANCELED
. Per istruzioni sulla gestione di un annullamento, consulta la sezione Annullamenti. Quando esegui una query su un abbonamento che è stato annullato in questo modo, il campo restituito expiryTime
è impostato su un timestamp passato:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Subito dopo la notifica dell'annullamento durante il periodo di sospensione dell'account, riceverai anche un RTDN di tipo SUBSCRIPTION_EXPIRED
perché l'utente non ha più il diritto a pagamento e l'abbonamento è scaduto dopo l'annullamento.
Puoi gestire questa scadenza come faresti normalmente.
L'utente può riottenere l'accesso riacquistando lo stesso piano di abbonamento o qualsiasi altro piano che offri tramite l'app durante il periodo di sospensione dell'account dopo l'acquisto originale. In questo caso viene emesso un nuovo token di acquisto e il nuovo valore viene restituito come parte di un evento SUBSCRIPTION_PURCHASED
che rappresenta questa nuova istanza.
Accesso alla sospensione dell'account e recupero
La Figura 3 mostra le tempistiche di un abbonamento che entra in sospensione dell'account e poi recupera quando l'utente modifica il metodo di pagamento.

Analogamente all'esempio precedente, la Figura 4 mostra la sequenza temporale di un abbonamento che inizialmente entra in un periodo di tolleranza prima che l'account venga sospeso, per poi recuperare quando questo è in sospeso.

È importante ricordare i seguenti punti:
- Prima che un abbonamento entri in sospensione dell'account, Google Play tenta di addebitare l'importo sul metodo di pagamento per un massimo di 48 ore. Durante questo periodo, l'utente manterrà i vantaggi dell'abbonamento. Una volta trascorso questo periodo di nuovo tentativo, l'abbonamento entra in sospensione e l'utente dovrebbe perdere l'accesso ai vantaggi dell'abbonamento.
- L'abbonamento entra in sospensione dell'account direttamente quando viene ripristinato da uno stato di pausa con una forma di pagamento non riuscita.
- Quando un abbonamento viene ripristinato dopo la sospensione dell'account, la data di rinnovo viene reimpostata.
Scadenze
Alla scadenza di un abbonamento, l'utente non dovrebbe più accedervi. In questo caso, viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_EXPIRED
. Quando ricevi questa notifica, esegui una query all'API Google Play Developer
per ottenere la risorsa
abbonamento più recente.
Dopo aver confermato che subscriptionState
è SUBSCRIPTION_STATE_EXPIRED
, rimuovi il diritto e registra lo stato di acquisto come non valido nel backend. 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 Google Play
oppure far annullare automaticamente l'abbonamento se non lo recupera dopo
la sospensione dell'account. Gli sviluppatori possono anche attivare
l'annullamento con
purchases.subscriptions.cancel
Quando un abbonamento viene annullato, l'utente mantiene l'accesso ai contenuti fino
alla fine del ciclo di fatturazione corrente. Al termine del ciclo di fatturazione, l'accesso deve essere revocato.
Quando annulli un abbonamento viene attivata una notifica di SUBSCRIPTION_CANCELED
. Quando ricevi questa notifica, il campo subscriptionState
è impostato su SUBSCRIPTION_STATE_CANCELED
per la risorsa dell'abbonamento restituita dall'API Google Play Developer, mentre il campo expiryTime
contiene la data in cui l'utente deve perdere l'accesso all'abbonamento. Se questa data è nel passato, l'utente dovrebbe perdere immediatamente il diritto. Questo può accadere, ad esempio, se un utente annulla un abbonamento mentre è sospeso l'account a causa di un pagamento rifiutato.
La risorsa di abbonamento relativa a un acquisto annullato è simile al seguente esempio:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
Puoi controllare 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 è stato annullato dall'utente, puoi consultare il campo userInitiatedCancellation
per scoprire perché l'utente ha annullato l'abbonamento. Queste informazioni possono contribuire
a definire le strategie di comunicazione.
Quando un abbonamento è stato annullato, ma non è ancora scaduto, viene comunque restituito da queryPurchasesAsync()
.
Potresti voler visualizzare nell'app un messaggio che informa l'utente che il suo abbonamento è stato annullato e indica la data di scadenza.
Revoca
Un abbonamento può essere revocato per diversi motivi, tra cui la revoca dell'abbonamento da parte del backend utilizzando purchases.subscriptions.revoke
o l'addebito dell'acquisto. In questo caso, revoca immediatamente il diritto
dell'utente. In questo caso, viene inviato un messaggio SubscriptionNotification
di tipo
SUBSCRIPTION_REVOKED
. Quando ricevi questa notifica, il campo subscriptionState
è impostato su SUBSCRIPTION_STATE_EXPIRED
per la risorsa dell'abbonamento restituita dall'API Google Play Developer.
La risorsa di abbonamento per un acquisto revocato è simile al seguente esempio:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
Abbonamenti differiti
Esistono vari motivi per cui potresti voler estendere il diritto di un utente. Ad esempio, potresti voler offrire agli utenti l'accesso senza costi come promozione speciale, ad esempio dare una settimana senza costi per l'acquisto di un film o concedere l'accesso senza costi ai clienti come gesto di avviamento. Puoi usare il metodo purchases.subscriptions.defer
dell'API Play Developer per anticipare la prossima data di fatturazione per un abbonamento con rinnovo automatico. Quando esegui questa operazione, viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_DEFERRED
. Durante il periodo di differimento, l'utente è iscritto ai tuoi contenuti con accesso completo, ma non riceve alcun addebito. La
data di rinnovo dell'abbonamento viene aggiornata in base alla nuova data.
Per i piani prepagati, puoi utilizzare l'API Differisci fatturazione per posticipare la scadenza.
La risorsa di abbonamento per un abbonamento differito è simile all'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 il loro abbonamento. Quando abiliti la funzionalità di pausa, gli utenti possono scegliere di mettere in pausa l'abbonamento per un periodo di tempo compreso tra una settimana e tre mesi, a seconda del periodo ricorrente.
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 all'abbonamento e non paga il prezzo di rinnovo. Al termine del periodo di pausa, l'abbonamento viene ripristinato e Google tenta di rinnovarlo. Se il ripristino ha esito positivo, l'abbonamento diventa di nuovo attivo. Se il ripristino dell'account non va a buon fine a causa di un problema di pagamento, l'utente entra nello stato di sospensione dell'account come mostrato nelle figure 5 e 6:


Un utente può anche scegliere di ripristinare manualmente un abbonamento in qualsiasi momento durante il periodo di pausa, come mostrato nella Figura 6. Quando un utente ripristina manualmente, la data di fatturazione passa alla data di ripristino manuale.
Quando l'abbonamento di un utente viene sospeso, la Libreria Fatturazione Play non restituisce
l'abbonamento tramite il
metodo
queryPurchasesAsync()
. Se l'abbonamento viene ripristinato, il metodo queryPurchasesAsync()
lo restituirà di nuovo.
Ascolta gli RTDN quando un utente mette in pausa l'abbonamento. Queste notifiche ti consentono anche di notificare agli utenti nella tua app che hanno messo in pausa l'abbonamento e non possono accedervi. Dovresti inoltre fornire all'utente la possibilità di 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
una pausa dell'abbonamento. A questo punto, l'utente deve mantenere l'accesso
al proprio abbonamento fino alla data di rinnovo successiva e la risorsa
abbonamento
contiene autoRenewEnabled = true
. A questo punto, il valore del campo subscriptionState
è SUBSCRIPTION_STATE_ACTIVE
.
Un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PAUSED
viene inviato quando
entra in pausa. In questo caso, l'utente dovrebbe perdere l'accesso al proprio abbonamento e la risorsa di abbonamento contiene autoRenewEnabled = true
e il campo subscriptionState
è impostato su SUBSCRIPTION_STATE_PAUSED
. Puoi vedere quando è previsto il rinnovo dell'abbonamento controllando l'oggetto PausedStateContext
.
Un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_RENEWED
viene inviato se
l'abbonamento viene ripristinato automaticamente al termine del periodo di pausa
o se l'utente ha scelto di ripristinare manualmente l'abbonamento. Questa operazione va gestita come descritto nella sezione Rinnovi.
Viene inviato un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_ON_HOLD
se si è verificato un errore di pagamento durante il tentativo di ripristinare l'abbonamento dopo la pausa.
Questa operazione deve essere gestita come descritto nella sezione Sospensione dell'account.
Riabbonati
Per i piani base dell'abbonamento con rinnovo automatico, sul Google Play Store potrebbe essere visualizzato un pulsante Riabbonati. Questo pulsante consente agli utenti di recuperare l'accesso a un abbonamento. Potrebbe non essere visualizzato per vari motivi, ad esempio quando una sottoscrizione è scaduta molto tempo fa.

Anche se il pulsante è sempre etichettato Riabbonati, la sua funzionalità dipende dallo stato dell'abbonamento.
Mentre un abbonamento è stato annullato ma non è ancora scaduto, l'utente è ancora abbonato e riceve i relativi vantaggi. Se l'utente tocca Riabbonati, l'annullamento viene di fatto annullato e l'abbonamento continua a essere rinnovato. Questa azione è nota come ripristino nella documentazione per gli sviluppatori e nelle API di Google Play.
Dopo la scadenza di un abbonamento con rinnovo automatico, puoi consentire agli utenti di acquistare lo stesso piano base dell'abbonamento. Questa azione è nota nella sezione Riabbonati nella documentazione e nelle 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 sul metodo queryPurchasesAsync()
per determinare se un utente ha diritto a un abbonamento, l'app deve gestire automaticamente i ripristini perché il metodo queryPurchasesAsync()
continua a restituire gli acquisti annullati prima delle relative date di scadenza. Un abbonamento ripristinato continua a essere rinnovato come se non fosse stato annullato.
Se l'app sincronizza lo stato dell'abbonamento con un backend, devi rimanere in ascolto di un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_RESTARTED
. Dopo aver ricevuto questo RTDN, l'app può rispondere alla notifica, registrare che l'abbonamento è ora impostato per il rinnovo e interrompere la visualizzazione dei messaggi di ripristino nell'app. La risorsa dell'abbonamento è 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 un piano base con rinnovo automatico viene configurato utilizzando Google Play Console o l'API per consentire la funzionalità Riabbonati, gli utenti possono riacquistare un abbonamento scaduto nel Google Play Store.
Si tratta di nuovi acquisti. Google Play emette un nuovo token di acquisto e il tuo
backend riceve un RTDN di tipo SUBSCRIPTION_PURCHASED
. In questo caso, lo stato di acquisto di questo tipo di acquisto out-of-app non include un linkedPurchaseToken
associato all'acquisto originale, perché l'abbonamento originale è scaduto completamente. Si tratta di nuovi acquisti che il tuo backend deve elaborare e confermare come qualsiasi altro acquisto.
Eseguire l'upgrade, eseguire il downgrade e riabbonarsi
Quando un utente esegue l'upgrade, il downgrade o si registra dopo l'annullamento dall'app prima della scadenza dell'abbonamento, l'abbonamento precedente viene invalidato e viene creato un nuovo abbonamento con un nuovo token di acquisto.
Inoltre, la risorsa
abbonamento
restituita dall'API Google Play Developer contiene un campo linkedPurchaseToken
che indica l'acquisto precedente da cui l'utente ha eseguito l'upgrade, il downgrade
o ha sottoscritto di nuovo 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 allo stesso account.
Prima di offrire opzioni di upgrade, downgrade o riabbonati a un utente nella tua app, devi confermare l'abbonamento esistente. Qualsiasi modifica al piano o nuovo abbonamento viene bloccato se l'abbonamento esistente è ancora in attesa di accettazione.
Se l'utente acquista correttamente l'upgrade, il downgrade o riabbonarsi, si tratta di un nuovo acquisto che devi confermare. Il metodo consigliato per eseguire questa operazione è 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 ai prezzi
Consulta la guida alle best practice per la variazione di prezzo per scoprire di più su come modificare i prezzi degli abbonamenti con rinnovo automatico e inviare notifiche agli utenti quando opportuno.
Quando le variazioni di prezzo vengono applicate agli abbonati esistenti tramite attivazione, riceverai un RTDN se l'utente interviene per confermare o rifiutare il nuovo prezzo.
Gestire la conferma da parte degli utenti di una variazione di prezzo di attivazione
Quando un utente accetta l'aumento di prezzo dell'abbonamento, ricevi un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
. In caso di riduzione del prezzo per la disattivazione o al rinnovo dell'aumento del prezzo dell'abbonamento, ricevi un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_RENEWED
. Tratta questa notifica come qualsiasi altro rinnovo.
Gestire i casi in cui non è accettato un aumento di prezzo a seguito dell'attivazione
Se un utente non ha accettato l'aumento di prezzo di attivazione prima di dover rinnovare al prezzo più alto, l'iscrizione viene annullata automaticamente e ricevi un messaggio SubscriptionNotification
di tipo SUBSCRIPTION_CANCELED
. Gestisci questo evento come descritto nella sezione
Annullamenti.
Gli utenti possono anche annullare i propri abbonamenti per un aumento del prezzo a disattivazione seguendo lo stesso meccanismo.
Gestire il ciclo di vita dei piani prepagati
Come per gli abbonamenti con rinnovo automatico, devi confermare i piani prepagati dopo ogni nuovo acquisto. Nel caso dei piani prepagati, è necessario elaborare completamente sia l'acquisto iniziale che le eventuali ricariche, in quanto l'utente deve seguire ogni volta il flusso di acquisto.
Data la possibilità che i piani prepagati di breve durata siano di breve durata, è importante confermare l'acquisto il prima possibile. I piani prepagati con una durata di una settimana o più devono essere confermati entro 3 giorni. I piani prepagati con una durata inferiore a una settimana devono essere confermati entro metà della durata del piano. 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 client RTDN ogni volta che viene acquistato un abbonamento a un piano prepagato, incluse ogni ricarica. Chiama il metodo purchases.subscriptionsv2.get
per verificare lo stato dell'abbonamento con piano prepagato più recente.
Per gli acquisti di ricarica viene emesso un nuovo token di acquisto, mentre tu ricevi il token di acquisto precedente nel campo linkedPurchaseToken
nell'ambito dello stato di acquisto del nuovo abbonamento.
La risorsa di abbonamento per l'acquisto di un piano prepagato è simile al 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_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
. Gli acquisti di ricarica aumentano il tempo del diritto accumulandolo. Ciò significa che se
l'utente esegue la ricarica prima del termine del diritto originale, la nuova data/ora viene aggiunta
alla data di scadenza precedente.
Potresti voler visualizzare un messaggio nell'app per informare l'utente che i suoi abbonamenti prepagati possono essere estesi con una ricarica. Per sapere quando un utente potrà effettuare la ricarica, controlla il campo allowExtendAfterTime
nella risorsa abbonamento.
I piani prepagati non si rinnovano automaticamente, quindi non possono essere annullati. Se un utente vuole annullare un piano prepagato, può lasciarne la data di scadenza.