Utilizzare la Libreria Fatturazione Google Play con Unity

Il plug-in di fatturazione di 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 inoltre 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 descritti in ciascuna delle sezioni collegate:

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

Attiva il livello di astrazione IAP di Unity

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 di 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: Attivare il servizio IAP di Unity.

Scarica e importa il plug-in

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

  1. Scarica la versione più recente dei plug-in di Google Play per Unity dalla pagina delle release del repository su GitHub.
  2. Nella barra dei menu di Unity, fai clic su 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 il pacchetto Unity), lascia selezionati tutti gli asset e fai clic su Importa.

Dopo l'importazione del pacchetto, viene aggiunta una nuova cartella denominata GooglePlayPlugins (nella directory principale della cartella Asset) agli asset del progetto. Questa cartella contiene tutti gli asset della libreria di fatturazione di Google Play per il plug-in.

Configura le impostazioni di compilazione

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

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

  2. Nella finestra Impostazioni di compilazione per la fatturazione di Google Play, fai clic su Correggi. In questo modo il conflitto viene risolto e i file IAP di Unity in conflitto vengono spostati in una directory di backup. Dopo aver fatto clic su Correggi, il pulsante diventa Ripristina e puoi fare clic su questo pulsante per ripristinare i file originali in conflitto.

Attiva il plug-in

Per attivare il plug-in, sostituisci l'implementazione di Google Play di Unity IAP con il plug-in di fatturazione di Google Play. Ad esempio, quando utilizzi lo script Unity IAP Purchaser, devi modificare il valore StandardPurchaseModule passato al generatore di acquisti in-app 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 Purchaser per più piattaforme, devi aggiungere un controllo della piattaforma per assicurarti che Unity continui a utilizzare la propria soluzione di acquisti in-app 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 Android oltre al Google Play Store, devi sostituire l'implementazione predefinita di Unity IAP 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 tuo gioco

Il plug-in di fatturazione di Google Play espande i servizi di IAP di Unity, quindi puoi utilizzare le stesse API di Unity per gestire i flussi di lavoro di acquisto comuni. Tieni presente che sono state apportate alcune modifiche minori al comportamento dell'API a causa delle 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 "Creare uno script di acquisto" del tutorial su Unity IAP per un esempio di come implementare flussi di acquisto di base.

La Libreria Fatturazione Google Play include anche alcune funzionalità uniche del Google Play Store. Puoi accedere a queste funzionalità tramite un'interfaccia estesa. Nel remainder di questa sezione viene descritto 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 transazioni in attesa o acquisti in attesa, in cui gli utenti possono creare un acquisto e completarlo in un secondo momento utilizzando i contanti in negozio.

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

A questo punto, implementa un 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.
    });

Trasmettere ID account offuscati a Google Play

Puoi trasmettere a Google Play ID account utente offuscati per facilitare il rilevamento di abusi, 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 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);

Trasmettere gli ID profilo offuscati a Google Play

Puoi passare un ID profilo offuscato a Google Play per facilitare il rilevamento delle attività fraudolente, 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 consente di identificare univocamente un singolo utente in più profili che ha all'interno di un'unica app. Dopo aver inviato un ID profilo offuscato a Google Play, puoi recuperarlo in un'apposita ricevuta di acquisto.

Per passare un ID profilo offuscato, utilizza il generatore 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 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 di fatturazione di Google Play, la maggior parte delle API si comporta come l'implementazione IAP standard di Unity per altri store. Tuttavia, in alcuni casi le API si comporteranno 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 saperne di più sulle alternative, consulta la pagina relativa al payload sviluppatore.

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

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

Tuttavia, qualsiasi payload passato non verrà applicato (non verrà visualizzato 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 di fatturazione di 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 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 proporzionamento:

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

Puoi racchiudere questa chiamata di metodo con un controllo della piattaforma o in un blocco catch quando viene rilevato GooglePlayStoreUnsupportedException.

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