Abbonamento con componenti aggiuntivi

L'abbonamento con componenti aggiuntivi ti consente di raggruppare più prodotti in abbonamento che possono essere acquistati, fatturati e gestiti insieme. I tuoi abbonamenti ai cataloghi di prodotti esistenti possono essere offerti facilmente come componenti aggiuntivi senza alcuna specifica preliminare o configurazione aggiuntiva. Puoi lanciare un flusso di acquisto con più prodotti in abbonamento esistenti e venderli come componenti aggiuntivi.

Considerazioni

Tieni presente i seguenti punti quando utilizzi la funzionalità di abbonamento con componenti aggiuntivi:

  • L'abbonamento con componenti aggiuntivi è supportato solo per i piani base con rinnovo automatico.

  • Tutti gli articoli dell'acquisto devono avere lo stesso periodo di fatturazione ricorrente. Ad esempio, non puoi avere un abbonamento con fatturazione annuale con componenti aggiuntivi con fatturazione mensile.

  • Puoi avere un massimo di 50 articoli in un abbonamento con l'acquisto di componenti aggiuntivi.

  • Questa funzionalità non è disponibile nelle regioni dell'India (IN) e della Corea del Sud (KR).

Eseguire l'integrazione con la Libreria Fatturazione Play

Questa sezione descrive come integrare la funzionalità di abbonamento con componenti aggiuntivi con la Play Billing Library (PBL). Si presume che tu abbia familiarità con i passaggi iniziali di integrazione di PBL, ad esempio l'aggiunta della dipendenza PBL alla tua app, l'inizializzazione di BillingClient e la connessione a Google Play. Questa sezione si concentra sugli aspetti dell'integrazione PBL specifici dell'abbonamento con componenti aggiuntivi.

Avviare un flusso di acquisto

Per avviare un flusso di acquisto per un abbonamento con componenti aggiuntivi, svolgi i seguenti passaggi:

  1. Recupera tutti gli elementi dell'abbonamento utilizzando il metodo BillingClient.queryProductDetailsAsync.

  2. Imposta l'oggetto ProductDetailsParams per ogni elemento.

    L'elemento rappresentato dall'oggetto ProductDetailsParams specifica sia ProductDetails che indica l'elemento dell'abbonamento sia un offerToken che seleziona un abbonamento specifico base plan o offer.

  3. Specifica i dettagli dell'articolo nel metodo BillingFlowParams.Builder.setProductDetailsParamsList. La classe BillingFlowParams specifica i dettagli di un flusso di acquisto.

    Il seguente esempio mostra come avviare il flusso di fatturazione per un acquisto di un abbonamento con più articoli:

    Java

       BillingClient billingClient = ;
    
        // ProductDetails obtained from queryProductDetailsAsync().
        ProductDetailsParams productDetails1 = ...;
        ProductDetailsParams productDetails2 = ...;
        ArrayList productDetailsList = new ArrayList<>();
        productDetailsList.add(productDetails1);
        productDetailsList.add(productDetails2);
    
        BillingFlowParams billingFlowParams =
            BillingFlowParams.newBuilder()
               .setProductDetailsParamsList(productDetailsList)
               .build();
        billingClient.launchBillingFlow(billingFlowParams);

Regole applicabili agli articoli acquistati

  • Per garantire che le date di rinnovo dei componenti aggiuntivi siano in linea con quelle dell'articolo base, Google Play potrebbe inserire un addebito proporzionale dopo le fasi di prova o di prezzo introduttivo.
  • L'idoneità all'offerta verrà valutata separatamente per ogni articolo.

Elaborare gli acquisti

L'elaborazione dell'abbonamento con componenti aggiuntivi è la stessa dell'elaborazione degli acquisti di singoli articoli, come descritto in Integrare la Libreria Fatturazione Google Play nella tua app. L'unica differenza è che l'utente può ricevere più diritti con un unico acquisto. Un acquisto di un abbonamento con componenti aggiuntivi restituisce più elementi che possono essere recuperati utilizzando Purchase.getProducts() nella Libreria Fatturazione Google Play e poi l'elenco lineItems in purchases.subscriptionsv2.get dell'API Google Play Developer.

Modificare gli abbonamenti con i componenti aggiuntivi

Qualsiasi modifica all'abbonamento con componenti aggiuntivi comporta un upgrade o un downgrade. Per ulteriori informazioni, consulta la sezione relativa all'upgrade o al downgrade degli abbonamenti.

Per modificare o ripristinare un acquisto esistente di un abbonamento con componenti aggiuntivi nella tua app, devi chiamare l'API launchBillingFlow con parametri aggiuntivi e assicurarti di quanto segue:

  • Chiama sempre setOldPurchaseToken con il token di acquisto dell'abbonamento corrente.
  • Per eseguire l'upgrade, il downgrade o il crossgrade dell'elemento base, chiama setSubscriptionReplacementMode per specificare come deve essere gestita la modifica del piano tra gli elementi base del vecchio abbonamento e il nuovo acquisto dell'abbonamento con i componenti aggiuntivi. In caso contrario, non è necessario impostare questo parametro.
  • Quando l'elemento base non viene modificato, puoi comunque chiamare setSubscriptionReplacementMode per applicare un comportamento di ripartizione specifico. Per le regole applicabili in questo caso, consulta Abbonarsi di nuovo o cambiare piano all'interno dello stesso abbonamento.
  • I nuovi componenti aggiuntivi verranno applicati immediatamente con un addebito proporzionale per allineare la data di rinnovo successiva all'elemento di base dell'abbonamento.
  • I componenti aggiuntivi rimossi scadranno al termine dei rispettivi periodi di fatturazione in corso.
  • Quando avvii il flusso di fatturazione, devi specificare tutti gli elementi attivi dell'abbonamento con i componenti aggiuntivi, esclusi quelli da rimuovere, insieme a eventuali nuovi componenti aggiuntivi.

L'esempio seguente mostra come chiamare l'API launchBillingFlow quando modifichi un acquisto esistente di un abbonamento con componenti aggiuntivi:

Java

BillingClient billingClient = ;

int replacementMode =;

// ProductDetails obtained from queryProductDetailsAsync().
ProductDetailsParams productDetails1 = ...;
ProductDetailsParams productDetails2 = ...;
ProductDetailsParams productDetails3 = ...;

ArrayList newProductDetailsList = new ArrayList<>();
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);

BillingFlowParams billingFlowParams =
    BillingFlowParams.newBuilder()
        .setSubscriptionUpdateParams(
          SubscriptionUpdateParams.newBuilder()
              .setOldPurchaseToken(purchaseTokenOfExistingSubscription)
              // No need to set if change does not affect the base item.
             .setSubscriptionReplacementMode(replacementMode)
             .build())
        .setProductDetailsParamsList(productDetailsList)
        .build();

billingClient.launchBillingFlow(billingFlowParams);

Scenari di modifica dell'abbonamento

Nella tabella seguente sono elencati i vari scenari di modifica dell'abbonamento con componenti aggiuntivi e il comportamento corrispondente.

Elementi esistenti Elementi modificati Devi impostare la modalità di sostituzione? Comportamento
A (elemento base), B A (elemento base) No Per l'elemento B è prevista la rimozione differita.
A A (elemento base), B No L'articolo B viene aggiunto immediatamente con un addebito proporzionale.
A (elemento base), B A (elemento base), C No
  • Per B è prevista la rimozione differita.
  • C viene aggiunto immediatamente con un addebito proporzionale.
A (elemento base), B B (elemento di base) No Per A è stata pianificata una rimozione differita.
A (elemento base), B C (elemento base)
A (elemento base), B C (elemento base), B La sostituzione di A -> C dipende da setSubscriptionReplacementMode.
A (elemento base), B C (elemento base), D
  • La sostituzione di A -> C dipende da setSubscriptionReplacementMode.
  • Per B è prevista la rimozione differita.
  • D viene aggiunto immediatamente con un addebito proporzionale.

Notifiche in tempo reale per lo sviluppatore

Il campo subscriptionId non è fornito in RTDN per gli acquisti di abbonamenti con componenti aggiuntivi, che contengono diritti per più articoli. In alternativa, puoi utilizzare le API Google Play Developer per effettuare l'acquisto e vedere i diritti degli articoli associati.

Variazioni di prezzo per gli abbonati esistenti

La modifica dei prezzi degli abbonamenti per gli abbonati esistenti di un abbonamento con acquisto di componenti aggiuntivi è simile alla modifica dei prezzi degli abbonamenti a singoli articoli descritta in Modificare i prezzi degli abbonamenti. Tuttavia, esistono alcune limitazioni e differenze funzionali, come descritto in questa sezione.

Terminare una coorte di prezzi precedenti

Il termine di una coorte precedente influisce anche sull'abbonamento con acquisti di componenti aggiuntivi. Si applicano le seguenti regole:

  • Tutti gli aumenti di prezzo per le attivazioni in sospeso devono avere lo stesso periodo di rinnovo con il nuovo prezzo. Se un articolo di un abbonamento con acquisto di componenti aggiuntivi ha un aumento di prezzo ad attivazione che non è ancora stato confermato dall'utente, qualsiasi nuovo aumento di prezzo ad attivazione per altri articoli dell'acquisto verrà ignorato, a meno che non comporti lo stesso periodo di rinnovo dell'applicazione del nuovo prezzo dell'aumento di prezzo esistente in stato OUTSTANDING. Una volta confermato l'aumento di prezzo da parte dell'utente, verranno registrate eventuali modifiche di prezzo più recenti. Inoltre, gli utenti possono accettare tutti gli aumenti di prezzo espliciti non confermati contemporaneamente.

    Esempio:

    • Prendiamo in considerazione un abbonamento con componenti aggiuntivi (elementi A e B) che si rinnova il 7 di ogni mese.
    • Per l'articolo A è in corso la migrazione del prezzo da 7 a 10 $ e si prevede che l'aumento del prezzo sarà applicabile il 7 luglio.
    • Il 2 giugno inizierà una nuova migrazione dei prezzi da 5 a 6 $ per l'articolo B. Poiché l'aumento di prezzo per attivazione inizia 37 giorni dopo la migrazione, l'aumento di prezzo più precoce per l'articolo B sarà il 7 agosto.

    In questo scenario, finché l'utente non accetta la variazione di prezzo per l'articolo A (finché non è nello stato CONFIRMED), la variazione di prezzo per l'articolo B non viene registrata per questo acquisto di abbonamento e SubscriptionPurchaseV2 non restituisce i dettagli della variazione di prezzo per l'articolo B. Dopo che l'utente ha confermato la variazione di prezzo dell'articolo A, inizia la variazione di prezzo dell'articolo B. L'utente riceve l'aumento di prezzo per l'attivazione dell'articolo B solo dopo aver accettato l'aumento di prezzo per l'attivazione dell'articolo A.

  • L'email di Google Play contiene un elenco di tutti gli articoli con aumenti o diminuzioni di prezzo che entreranno in vigore nello stesso giorno.

Annullare l'abbonamento con i componenti aggiuntivi

Gli utenti possono annullare l'intero acquisto di un abbonamento con componenti aggiuntivi nel Centro abbonamenti Google Play, mentre tu puoi annullare l'intero acquisto di un abbonamento con componenti aggiuntivi solo utilizzando l'API Google Play Developer.

Quando un acquisto di un abbonamento viene annullato senza essere revocato, nessuno degli elementi dell'acquisto verrà rinnovato automaticamente, ma l'utente continuerà ad avere accesso agli elementi a cui ha diritto fino al termine dei periodi di fatturazione corrispondenti.

Revocare e rimborsare gli abbonamenti con componenti aggiuntivi

Di seguito sono riportate alcune linee guida per la revoca e il rimborso degli abbonamenti:

  • Utilizza Play Console per emettere un rimborso basato sull'importo per un ordine specifico senza revocare l'accesso all'abbonamento.

  • Chiama il numero orders.refund per rimborsare completamente pagamenti specifici dell'abbonamento effettuati dall'utente senza revocare l'accesso all'abbonamento.

  • Chiama il numero purchases.subscriptionsv2.revoke per revocare immediatamente l'accesso a tutti gli elementi dell'abbonamento. Con questa API puoi:

    • Revocare l'accesso a tutti gli articoli e fornire un rimborso proporzionale.

    • Quando revochi un abbonamento con componenti aggiuntivi utilizzando i rimborsi proporzionali, verrà emesso un rimborso per l'ultimo ordine di ogni articolo con un importo proporzionale in base al tempo rimanente fino al prossimo rinnovo.

    • Revoca l'accesso per tutti gli articoli e fornisci un FullRefund.

    • Ritirare l'accesso a un singolo articolo con rimborso totale dell'articolo.

Revocare un singolo elemento di un abbonamento con componenti aggiuntivi

Per revocare i singoli elementi di un abbonamento con componenti aggiuntivi senza revocare l'intero acquisto, chiama purchases.subscriptionsv2.revoke con il campo ItemBasedRefund impostato in RevocationContext. Il productId dell'articolo che deve essere revocato e rimborsato può essere impostato nel campo ItemBasedRefund.

Il campo ItemBasedRefund può essere impostato per gli acquisti con uno o più elementi dell'abbonamento con rinnovo automatico.

  • Se dopo la revoca dell'articolo specificato in ItemBasedRefund rimangono ancora articoli attivi nell'acquisto dell'abbonamento, verrà revocato solo l'articolo e verrà rimborsato per intero senza interrompere lo stato dell'abbonamento.
  • Se non rimangono articoli attivi nell'acquisto dell'abbonamento dopo la revoca dell'articolo specificato in ItemBasedRefund, l'articolo viene revocato, rimborsato per intero e l'abbonamento viene annullato.

Considerazioni

  • Quando utilizzi ItemBasedRefund, puoi revocare un solo elemento alla volta. La richiesta può essere chiamata più volte se è necessario revocare diversi elementi.
  • Quando l'acquisto dell'abbonamento è in uno degli stati di pagamento rifiutato o se l'articolo specificato in ItemBasedRefund non è di tua proprietà o è scaduto, il rifiuto dell'articolo è bloccato.
  • Il rifiuto degli articoli non è supportato nell'abbonamento prepagato.

Scadenza dell'articolo durante il rifiuto del pagamento

Per un acquisto di un abbonamento con componenti aggiuntivi, per alcuni rinnovi potrebbe essere necessario estendere solo un sottoinsieme di diritti per gli articoli, senza influire sugli articoli con una data di scadenza futura.

Indipendentemente dagli articoli coinvolti in un rinnovo, se il pagamento del rinnovo viene rifiutato, l'acquisto dell'abbonamento complessivo entrerà in un periodo di tolleranza e l'account verrà bloccato come descritto nella documentazione seguente.

Selezione del periodo di recupero

Poiché il periodo di tolleranza stesso concede ancora il diritto dell'utente, al momento dell'acquisto di un abbonamento con componenti aggiuntivi, il pagamento del rinnovo viene rifiutato, viene selezionato l'articolo con il periodo di tolleranza minimo tra tutti gli articoli attivi e per questo rinnovo vengono applicati il periodo di tolleranza e il periodo di blocco dell'account come periodo di recupero.

Gli elementi attivi includono gli elementi attivi al momento dell'acquisto di un abbonamento con componenti aggiuntivi poco prima del tentativo di rinnovo, esclude gli elementi appena aggiunti (che non avranno diritto fino al termine del recupero) ed esclude gli elementi che non sono più attivi a causa di rimozione o disattivazione.

Viene applicata l'impostazione di sospensione dell'account dell'elemento con il periodo di tolleranza minimo selezionato. Se sono presenti più elementi con il periodo di tolleranza minimo, ma periodi di blocco dell'account diversi, viene applicato il periodo di blocco dell'account più lungo.

Periodo di tolleranza

Quando il pagamento del rinnovo dell'abbonamento viene rifiutato, l'acquisto dell'abbonamento entrerà nello stato di periodo di tolleranza. Durante il periodo di tolleranza, l'utente continuerà ad avere accesso a tutti gli elementi attivi del periodo di rinnovo precedente. Al termine del periodo di tolleranza, se il metodo di pagamento non è stato corretto, l'intero acquisto dell'abbonamento viene sospeso nell'account. Se altri articoli raggiungono la data di rinnovo durante il periodo di tolleranza, verrà avviato un nuovo tentativo di addebito per questi articoli una volta che l'abbonamento sarà stato ripristinato dopo il rifiuto del pagamento.

Sospensione dell'account

Mentre l'acquisto dell'abbonamento è in sospeso nell'account, l'accesso a tutti gli elementi dell'abbonamento viene sospeso fino al recupero del pagamento.

Se l'abbonamento in sospeso viene recuperato, l'acquisto dell'abbonamento rimane invariato. Se l'abbonamento non viene recuperato, gli articoli con pagamento rifiutato scadranno e l'accesso agli altri articoli verrà ripreso per il resto dei periodi di fatturazione.

Esempio:

  • Un utente ha un abbonamento Il mio piano base che si rinnova il 1° di ogni mese. Il 15 agosto aggiunge un Piano aggiuntivo da 10 $al mese con una prova senza costi di sette giorni. Per nessuno degli elementi è stato impostato un periodo di tolleranza, ma entrambi hanno un periodo di sospensione dell'account di 30 giorni.

  • Il 22 agosto all'utente vengono addebitati 2,90 $ (10*9/31) per la ripartizione fino al 31 agosto, ma il metodo di pagamento dell'utente scade prima di questa data e l'abbonamento viene rifiutato il 22 agosto.

Quando l'abbonamento viene sospeso a causa del rifiuto del pagamento, l'utente non ha accesso a nessuno degli elementi dell'abbonamento con componenti aggiuntivi. Il tempo rimanente per gli elementi che non vengono rinnovati verrà restituito agli utenti quando l'abbonamento esce dalla sospensione dell'account, perché il pagamento è stato recuperato o annullato.

Nell'esempio precedente, un abbonamento viene messo in attesa nell'account il 22 agosto.

  • Se l'account viene recuperato il 25 agosto, prima della data di rinnovo più ampia il 1° settembre, lo stesso giorno l'utente recupera l'accesso sia a Base Plan sia a Add-on Plan. La prossima data di fatturazione è stata modificata in 4 settembre.

  • Se l'account non viene recuperato dopo 30 giorni, l'abbonamento viene annullato il 21 settembre e l'utente perde l'accesso al piano aggiuntivo e riprende l'accesso al mio piano base fino al 30 settembre.

In questo esempio, devi ottenere il valore expiryTime aggiornato per TUTTI gli articoli dell'abbonamento con componenti aggiuntivi, poiché alcuni articoli potrebbero riprendere il diritto dopo il periodo di tolleranza e la sospensione dell'account.

Report finanziari e riconciliazione

Utilizza il report Utili per riconciliare gli abbonamenti attivi con le transazioni su Play. Ogni elemento pubblicitario della transazione ha un ID ordine. Se gli acquisti rappresentano più articoli, i report Utili e Vendite stimate includeranno righe separate per ogni transazione, ad esempio addebito, commissione, imposta e rimborso, per ogni articolo coinvolto.

Per le dashboard in Play Console:

  • Le statistiche sulle entrate presentate nella sezione Report finanziari della console sono suddivise per elementi.

  • La gestione degli ordini riflette l'acquisto dell'abbonamento con componenti aggiuntivi e mostra elenchi dettagliati degli articoli acquistati. Dalla gestione degli ordini, puoi revocare, annullare o rimborsare completamente l'acquisto di un utente.