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 in Unity.

Configurare il plug-in Fatturazione Google Play

Per impostare il plug-in, completa la procedura in ognuna di queste sezioni collegate:

  1. Abilita 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 abilitare questo livello di astrazione prima di scaricare e importare il plug-in. Per abilitare il livello di astrazione IAP di Unity:

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

Scarica e importa il plug-in

Il plug-in viene fornito 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 Google Play per Unity dalla pagina delle release su GitHub del repository.
  2. Nella barra dei menu 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 Importa pacchetto Unity, lascia selezionati tutti gli asset e fai clic su Importa.

Dopo l'importazione del pacchetto, agli asset del progetto viene aggiunta 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 conflitti e non riesce a creare 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 progetto. Per risolvere questi conflitti, segui questi passaggi:

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

  2. Nella finestra Impostazioni build di fatturazione di Play, fai clic su Correggi. In questo modo, 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, su cui 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 per l'acquisto di Unity IAP, devi modificare il valore StandardPurchaseModule trasmesso allo strumento per la creazione di 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 per gli acquirenti 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 tuo gioco su altri store Android diversi da Google Play Store, devi sostituire l'implementazione IAP Unity predefinita solo se 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());
}

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

Il plug-in Fatturazione Google Play estende i servizi IAP Unity, pertanto puoi utilizzare le stesse API Unity per gestire i flussi di lavoro di acquisto più comuni. Tieni presente che sono state apportate piccole modifiche al comportamento delle 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 relativa alla creazione di uno script di acquisto nel tutorial per Unity IAP per un esempio di come implementare i flussi di acquisto di base.

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

Abilita acquisti differiti

Google Play supporta gli acquisti differiti, denominati 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 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.
    });

Trasferire gli ID account offuscati a Google Play

Puoi passare ID account utente offuscati a Google Play per facilitare il rilevamento di abusi, 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 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 attività fraudolente, ad esempio per rilevare se molti dispositivi effettuano acquisti sullo stesso account in un breve periodo di tempo. Questa procedura è 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 in più profili presenti all'interno di una singola app. Dopo aver inviato un ID profilo offuscato a Google Play, puoi recuperare l'ID 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);

Conferma 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 avranno un comportamento diverso. Questa sezione descrive queste differenze di comportamento.

Payload sviluppatore non supportato

Google Play ha deprecato il payload per gli sviluppatori e lo sostituirà con alternative più significative e contestuali. Per questo motivo, il payload per sviluppatori non è supportato. Per maggiori 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 verranno applicati (non verranno visualizzati nella ricevuta finale).

SubscriptionManager non è supportato

Unity IAP offre 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 dei tuoi abbonamenti. Se il gioco chiama questi metodi, viene generato un valore 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à 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 viene rilevato GooglePlayStoreUnsupportedException.

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