Ciclo di vita dell'abbonamento

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

Figura 1. Stati del ciclo di vita ed eventi di transizione per acquisti di abbonamenti con rinnovo automatico.

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:

  1. Esegui una query sul purchases.subscriptionsv2.get per ottenere un abbonamento risorsa che contiene lo stato dell'abbonamento più recente.
  2. Assicurati che il valore dell'attributo subscriptionState è SUBSCRIPTION_STATE_ACTIVE.
  3. Verifica l'acquisto.
  4. 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'utilizzo setObfuscatedAccountId e setObfuscatedProfileId
di Gemini Advanced.

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.

Figura 2. Sequenza temporale di un abbonamento che entra in un periodo di tolleranza e recupera prima che finisca.

È 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.

Figura 3. Cronologia di un abbonamento che inserisce un la sospensione dell'account e il recupero prima che termini.

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.

Figura 4. Sequenza temporale di un abbonamento che entra in un periodo di tolleranza periodo di tempo, attiva la sospensione dell'account e infine recupera prima che l'account termina il blocco.

È 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
*Offerta soggetta a modifiche in qualsiasi momento.

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:

Figura 5. Un utente mette in pausa e poi riprende abbonamento.
di Gemini Advanced.
Figura 6. Un utente sospende l'abbonamento e poi accede sospensione dell'account.

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.

Figura 7. Account > Abbonamenti della App Google Play Store che mostra un abbonamento annullato con Pulsante Riabbonati.

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.

Figura 8. Stati del ciclo di vita ed eventi di transizione per acquisti di abbonamenti.

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.