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:
Recupera tutti gli elementi dell'abbonamento utilizzando il metodo
BillingClient.queryProductDetailsAsync
.Imposta l'oggetto
ProductDetailsParams
per ogni elemento.L'elemento rappresentato dall'oggetto
ProductDetailsParams
specifica siaProductDetails
che indica l'elemento dell'abbonamento sia unofferToken
che seleziona un abbonamento specificobase plan
ooffer
.Specifica i dettagli dell'articolo nel metodo
BillingFlowParams.Builder.setProductDetailsParamsList
. La classeBillingFlowParams
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 = ...; ArrayListnewProductDetailsList = 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 |
|
A (elemento base), B | B (elemento di base) | No | Per A è stata pianificata una rimozione differita. |
A (elemento base), B | C (elemento base) | Sì |
|
A (elemento base), B | C (elemento base), B | Sì | La sostituzione di A -> C dipende da
setSubscriptionReplacementMode . |
A (elemento base), B | C (elemento base), D | Sì |
|
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.