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 fornire al tuo gioco tutte le funzionalità più recenti della Libreria Fatturazione Google Play. Questa guida spiega come configurare il progetto per utilizzare il plug-in. Questa guida descrive anche come implementare le funzionalità della Libreria Fatturazione Google Play nel tuo gioco in Unity.

Configurare il plug-in Fatturazione Google Play

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

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

Attivare il livello di astrazione Unity IAP

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

  1. Completa tutti i passaggi del seguente tutorial di Unity: Configurare il progetto per i servizi Unity.
  2. Completa tutti i passaggi del seguente tutorial di Unity: Enable the Unity IAP service (Attivare il servizio Unity IAP).

Scaricare e importare il plug-in

Il plug-in viene fornito come pacchetto Unity in formato .unitypackage. Per scaricare e importare il plug-in:

  1. Scarica l'ultima release dei plug-in di Google Play per Unity dalla pagina delle release del repository su GitHub.
  2. Dalla barra dei menu di Unity, fai clic su Assets > Import Package > Custom Package (Asset > Importa pacchetto > Pacchetto personalizzato).

  3. Individua la posizione in cui hai scaricato il file .unitypackage e selezionalo.

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

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

Configurare le impostazioni di build

Poiché il plug-in estende Unity IAP, Unity riscontrerà conflitti e non riuscirà a creare un APK Android a meno che alcune dipendenze precedenti e sovrapposte in Unity IAP non vengano rimosse dalla build. Il plug-in fornisce un modo automatico per rimuovere le librerie in conflitto dal progetto. Per risolvere questi conflitti:

  1. Dalla barra dei menu di Unity, seleziona Google > Play Billing > Build Settings (Google > Fatturazione Play > Impostazioni di build).

  2. Nella finestra Play Billing Build Settings (Impostazioni di build di Fatturazione Play), fai clic su Fix (Correggi). In questo modo il conflitto viene risolto e i file Unity IAP in conflitto vengono spostati in una directory di backup. Dopo aver fatto clic su Fix (Correggi), il pulsante diventa Restore (Ripristina), su cui puoi fare clic per ripristinare i file originali in conflitto.

Attivare il plug-in

Per attivare il plug-in, sostituisci l'implementazione di Google Play di Unity con il plug-in Fatturazione Google Play. Ad esempio, quando utilizzi lo script acquirente Unity IAP, devi modificare StandardPurchaseModule passato al builder 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 le 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 tuo gioco su altri store di app per Android oltre al Google Play Store, devi sostituire l'implementazione Unity IAP predefinita solo quando selezioni il 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());
}

Implementare le funzionalità della Libreria Fatturazione Google Play nel gioco

Il plug-in Fatturazione Google Play estende i servizi Unity IAP, quindi puoi utilizzare le stesse API Unity per gestire i flussi di lavoro di acquisto comuni. Tieni presente che il comportamento dell'API presenta alcune modifiche minori a causa delle differenze tra la Libreria Fatturazione Google Play e l'implementazione IAP standard di Unity per altri store. Se non hai familiarità con le API Unity IAP, consulta la sezione "Making a Purchase Script" (Creare uno script di acquisto) nel tutorial di Unity IAP per un esempio di come implementare i flussi di acquisto di base.

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

Attivare gli acquisti differiti

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

Per attivare gli acquisti differiti, utilizza il 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();

Poi, implementa un callback degli 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 gli ID account offuscati a Google Play

Puoi passare gli ID account utente offuscati a Google Play per facilitare il rilevamento di comportamenti illeciti, ad esempio 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 delle estensioni:

// 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 gli ID profilo offuscati a Google Play

Puoi passare un ID profilo offuscato a Google Play per facilitare il rilevamento di frodi, ad esempio se molti dispositivi effettuano acquisti sullo stesso account in un breve periodo di tempo. È simile al passaggio 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 che ha 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 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 subscription. Gli utenti del tuo gioco devono confermare qualsiasi variazione di prezzo prima che possa essere 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 dello sviluppatore non è supportato

Google Play ha ritirato il payload dello sviluppatore e lo sta sostituendo 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 dello sviluppatore.

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

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

Tuttavia, qualsiasi payload che passi non avrà effetto (non verrà visualizzato nella ricevuta finale).

SubscriptionManager non è supportato

Unity IAP fornisce la SubscriptionManager classe 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 tuo gioco chiama questi metodi, viene generata un'eccezione GooglePlayStoreUnsupportedException.

La 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 racchiudere questa chiamata al metodo con un controllo della piattaforma o in un blocco catch quando viene rilevata GooglePlayStoreUnsupportedException.

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