Utilizzare la Libreria Fatturazione Google Play con Unity

Il plug-in Fatturazione Google Play estende i servizi e gli asset integrati di Unity per gli acquisti in-app, chiamati Unity IAP, per offrire al tuo gioco tutte le funzionalità più recenti della Libreria Fatturazione Google Play. Questa guida spiega come configurare il progetto per l'utilizzo del plug-in. Questa guida descrive inoltre come implementare le funzionalità di Libreria Fatturazione Google Play nel tuo gioco su Unity.

Configurare il plug-in Fatturazione Google Play

Per configurare il plug-in, completa i passaggi in ognuna di queste sezioni collegate:

  1. Abilita il livello dell'astrazione IAP di Unity.
  2. Scarica e importa il plug-in.
  3. Configura le impostazioni di build del plug-in.
  4. Attiva il plug-in.

Attiva il livello di astrazione IAP di Unity

Il plug-in di fatturazione Google Play è basato su un livello di astrazione incluso in Unity IAP, quindi devi abilitare questo livello di astrazione prima di scaricare e importare il plug-in. Per abilitare il livello di astrazione IAP di Unity, segui questi passaggi:

  1. Completa tutti i passaggi nel seguente tutorial Unity: Configurare un progetto per i servizi Unity.
  2. Completa tutti i passaggi nel tutorial Unity seguente: Abilitare il servizio Unity IAP.

Scarica e importa il plug-in

Il plug-in viene spedito come pacchetto Unity nel formato .unitypackage. Per scaricare e importare il plug-in, procedi nel seguente modo:

  1. Scarica la release più recente dei plug-in di Google Play per Unity dalla pagina delle release su GitHub del repository.
  2. Nella barra dei menu di Unity, fai clic su Asset > Importa pacchetto > Pacchetto personalizzato.

  3. Individua dove hai scaricato il file .unitypackage e selezionalo.

  4. Nella finestra di dialogo Importa pacchetto Unity, lascia selezionati tutti gli asset e fai clic su Importa.

Dopo l'importazione del pacchetto, viene aggiunta agli asset del progetto una nuova cartella denominata GooglePlayPlugin (nella directory principale della cartella Risorse). Questa cartella contiene tutti gli asset della Libreria Fatturazione Google Play per il plug-in.

Configura le impostazioni della build

Poiché il plug-in estende Unity IAP, Unity incontra dei conflitti e non crea un APK Android, a meno che alcune dipendenze sovrapposte meno recenti in Unity IAP non vengano rimosse dalla build. Il plug-in fornisce un modo automatico per rimuovere le librerie in conflitto dal tuo progetto. Per risolvere questi conflitti, procedi nel seguente modo:

  1. Nella barra dei menu di Unity, seleziona Google > Fatturazione Play > Impostazioni build.

  2. Nella finestra Impostazioni build di fatturazione di Play, fai clic su Correggi. Il conflitto viene risolto e i file IAP Unity in conflitto vengono spostati in una directory di backup. Dopo aver fatto clic su Correggi, il pulsante diventa Ripristina. Puoi fare clic per ripristinare i file originali in conflitto.

Attiva il plug-in

Per attivare il plug-in, sostituisci l'implementazione di Unity IAP di Google Play con il plug-in Fatturazione Google Play. Ad esempio, quando utilizzi lo Script dell'acquirente Unity IAP, devi modificare il valore StandardPurchaseModule trasmesso allo strumento per la creazione di app IAP per utilizzare Google.Play.Billing.GooglePlayStoreModule:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

Se il tuo gioco utilizza lo stesso script dell'acquirente per più piattaforme, devi aggiungere un controllo della piattaforma per assicurarti che Unity continui a utilizzare la propria soluzione IAP per altre piattaforme:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Se pubblichi il gioco su altri store Android oltre che su Google Play Store, devi sostituire l'implementazione predefinita di Unity IAP solo se selezioni Google Play Store:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Implementa le funzionalità della Libreria Fatturazione Google Play nel tuo gioco

Il plug-in Fatturazione Google Play estende i servizi Unity IAP, così puoi utilizzare le stesse API Unity per gestire i flussi di lavoro di acquisto più comuni. Tieni presente che sono state apportate alcune modifiche di minore entità al comportamento dell'API dovute alle differenze tra la Libreria Fatturazione Google Play e l'implementazione IAP standard di Unity per altri store. Se non hai mai utilizzato le API Unity IAP, consulta la sezione relativa alla creazione di uno script di acquisto nel tutorial di Unity IAP per vedere un esempio di come implementare i flussi di acquisto di base.

Libreria Fatturazione Google Play include inoltre alcune funzionalità esclusive di Google Play Store. Puoi accedere a queste funzionalità tramite un'interfaccia estesa. Il resto di questa sezione descrive come implementare queste funzionalità uniche di Libreria Fatturazione Google Play nel tuo gioco.

Attivare gli acquisti differiti

Google Play supporta gli acquisti differiti, chiamati anche transazioni in attesa o acquisti in attesa, in cui gli utenti possono creare un acquisto e completarlo in un secondo momento utilizzando i contanti nei negozi.

Per abilitare gli acquisti differiti, utilizza il tuo builder IAP per modificare la configurazione del modulo chiamando il metodo EnableDeferredPurchase():

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

In seguito, implementa il callback per gli acquisti differiti utilizzando le estensioni del Play Store:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Passare ID account offuscati a Google Play

Puoi passare ID account utente offuscati a Google Play per facilitare il rilevamento di comportamenti illeciti, ad esempio per rilevare se molti dispositivi effettuano acquisti sullo stesso account in un breve periodo di tempo.

Per passare un ID account offuscato, chiama il metodo SetObfuscatedAccountId() dall'API Extensions:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Passare ID profilo offuscati a Google Play

Puoi passare un ID profilo offuscato a Google Play per facilitare il rilevamento di attività fraudolente, ad esempio per rilevare se molti dispositivi effettuano acquisti sullo stesso account in un breve periodo di tempo. Questa operazione è simile al trasmissione di un ID account utente offuscato. In entrambi i casi l'ID rappresenta un singolo utente, ma l'ID profilo ti consente di identificare in modo univoco un singolo utente su più profili all'interno di una singola app. Dopo aver inviato un ID profilo offuscato a Google Play, puoi recuperarlo in un secondo momento in una ricevuta di acquisto.

Per passare un ID profilo offuscato, utilizza il tuo builder IAP per modificare la configurazione del modulo chiamando il metodo SetObfuscatedProfileId():

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Confermare le variazioni di prezzo degli abbonamenti

Google Play ti consente di modificare il prezzo di un abbonamento attivo. Gli utenti del tuo gioco devono confermare qualsiasi variazione di prezzo prima che la modifica venga applicata. Per chiedere agli utenti di confermare una variazione di prezzo per il loro abbonamento, chiama il metodo ConfirmSubscriptionPriceChange():

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Modifiche al comportamento dell'API Unity

Quando utilizzi il plug-in Fatturazione Google Play, la maggior parte delle API si comporta allo stesso modo dell'implementazione IAP standard di Unity per altri store. Tuttavia, in alcuni casi le API si comportano in modo diverso. Questa sezione descrive queste differenze di comportamento.

Il payload sviluppatore non è supportato

Google Play ha deprecato il payload per gli sviluppatori, che verrà sostituito con alternative più significative e contestuali. Per questo motivo, il payload dello sviluppatore non è supportato. Per ulteriori informazioni sulle alternative, consulta la pagina relativa al payload per sviluppatori.

Puoi continuare a utilizzare le stesse interfacce definite dall'implementazione IAP standard di Unity per altri store, tra cui IStoreController. Quando avvii un acquisto, puoi comunque utilizzare IStoreController e chiamare il metodo InitiatePurchase():

public void InitiatePurchase(Purchasing.Product product, string payload);

Tuttavia, gli eventuali payload trasmessi non avranno effetto (non verranno visualizzati nella ricevuta finale).

SubscriptionManager non è supportato

Unity IAP fornisce la classe SubscriptionManager per la gestione degli abbonamenti. Poiché l'implementazione IAP standard di Unity di questa classe utilizza il payload dello sviluppatore, questa classe non è supportata. Puoi comunque creare questa classe, ma potresti ricevere dati inaffidabili quando utilizzi uno dei metodi getter della classe.

UpdateSubscription presenta piccole modifiche all'API

Il plug-in Fatturazione Google Play non supporta l'utilizzo dei metodi SubscriptionManager.UpdateSubscription() e SubscriptionManager.UpdateSubscriptionInGooglePlayStore() per eseguire l'upgrade e il downgrade degli abbonamenti. Se il gioco chiama questi metodi, viene generato un valore GooglePlayStoreUnsupportedException.

Libreria Fatturazione Google Play fornisce un'API alternativa da utilizzare al posto di questi metodi. Per eseguire l'upgrade o il downgrade di un abbonamento, chiama il metodo UpdateSubscription() utilizzando la modalità di ripartizione proporzionale:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

Puoi eseguire il wrapping di questa chiamata al metodo con un controllo della piattaforma o in un blocco catch quando GooglePlayStoreUnsupportedException viene rilevato.

Per ulteriori informazioni ed esempi su come utilizzare la modalità di ripartizione proporzionale, consulta Impostare la modalità di ripartizione.