Usar a Biblioteca Google Play Faturamento com o Unity

O plug-in do Google Play Faturamento inclui os serviços e recursos integrados do Unity para compras no app, chamados de Unity IAP, com o objetivo de fornecer ao seu jogo os recursos mais recentes da Biblioteca Play Faturamento. Este guia explica como configurar seu projeto para usar o plug-in. Ele também descreve como implementar recursos da Biblioteca Google Play Faturamento no seu jogo no Unity.

Configurar o plug-in do Google Play Faturamento

Para configurar o plug-in, siga as etapas de cada uma destas seções vinculadas:

  1. Ative a camada de abstração do Unity IAP.
  2. Faça o download e importe o plug-in.
  3. Defina as configurações de build do plug-in.
  4. Ative o plug-in.

Ative a camada de abstração do Unity IAP

O plug-in do Google Play Faturamento é compilado em uma camada de abstração incluída no Unity IAP. Portanto, é necessário ativar essa camada de abstração antes de fazer o download e importar o plug-in. Para ativar a camada de abstração do Unity IAP, faça o seguinte:

  1. Siga todas as etapas deste tutorial do Unity: Configurar seu projeto para serviços do Unity (link em inglês).
  2. Siga todas as etapas deste tutorial do Unity: Ativar o serviço Unity IAP (link em inglês).

Fazer o download e importar o plug-in

O plug-in é enviado como um pacote do Unity no formato .unitypackage. Para fazer o download e importar o plug-in, siga estas etapas:

  1. Faça o download da versão mais recente dos plug-ins do Google Play para Unity na página de versões do repositório no GitHub (link em inglês).
  2. Na barra de menus do Unity, clique em Assets > Import Package > Custom Package.

  3. Encontre o local em que o download do arquivo .unitypackage foi feito e selecione-o.

  4. Na caixa de diálogo Import Unity Package, selecione todos os recursos e clique em Import.

Depois que o pacote é importado, uma nova pasta, chamada GooglePlayPlugins, (na raiz da pasta "Assets") é adicionada aos recursos do projeto. Ela contém todos os recursos da Biblioteca Google Play Faturamento para o plug-in.

Definir as configurações de build

Como o plug-in inclui o Unity IAP, o Unity encontrará conflitos e não criará um APK do Android se algumas dependências mais antigas conflitantes no Unity IAP não forem removidas do build. O plug-in oferece uma forma automática de remover as bibliotecas conflitantes do projeto. Para resolver esses conflitos, siga estas etapas:

  1. Na barra de menus do Unity, selecione Google > Play Billing > Build Settings.

  2. Na janela "Play Faturamento Build Settings", clique em Fix. Isso resolve o conflito e move os arquivos do Unity IAP conflitantes para um diretório de backup. Depois de clicar em Fix, o botão mudará para Restore. Você pode clicar nesse botão para restaurar os arquivos conflitantes originais.

Ativar o plug-in

Para ativar o plug-in, substitua a implementação do Unity IAP do Google Play pelo plug-in do Google Play Faturamento. Por exemplo, ao usar o Script Purchaser do Unity IAP, é necessário mudar o StandardPurchaseModule transmitido ao builder de compra no app e usar Google.Play.Billing.GooglePlayStoreModule:

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

Caso seu jogo use o mesmo Script Purchaser para várias plataformas, adicione uma verificação de plataforma para garantir que o Unity continue a usar a própria solução de compra no app para outras plataformas:

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

Caso você publique seu jogo em outras app stores para Android além da Google Play Store, substitua a implementação padrão do Unity IAP apenas ao selecionar a 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());
}

Implementar recursos da Biblioteca Google Play Faturamento no seu jogo

O plug-in do Google Play Faturamento inclui os serviços do Unity IAP, então você pode usar as mesmas APIs do Unity para gerenciar fluxos de compras comuns. Há algumas pequenas mudanças do comportamento da API devido às diferenças entre a Biblioteca Google Play Faturamento e a implementação padrão de compra no app do Unity para outras app stores. Caso as APIs do Unity IAP sejam novidade para você, consulte a seção "Making a Purchase Script" no tutorial do Unity IAP (link em inglês) para ver um exemplo de como implementar fluxos de compra básicos.

A Biblioteca Google Play Faturamento também inclui alguns recursos exclusivos da Google Play Store. É possível acessar esses recursos por uma interface estendida. O restante desta seção descreve como implementar esses recursos exclusivos da Biblioteca Google Play Faturamento no seu jogo.

Ativar compras adiadas

O Google Play é compatível com compras adiadas, também chamadas de transações pendentes ou compras pendentes. Nessas transações, os usuários podem criar uma compra e finalizá-la mais tarde em uma loja, usando dinheiro.

Para ativar as compras adiadas, use seu builder de compras no app para modificar a configuração do módulo chamando o método 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();

Em seguida, implemente um callback de compras adiadas usando as extensões da 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.
    });

Transmitir IDs ofuscados da conta para o Google Play

É possível transmitir IDs ofuscados de contas de usuários para o Google Play para facilitar a detecção de abusos, como, por exemplo, detectar se há muitos dispositivos realizando compras na mesma conta em um curto período de tempo.

Para transmitir um ID ofuscado da conta, chame o método SetObfuscatedAccountId() da API de extensões:

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

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

Transmitir IDs ofuscados de perfil para o Google Play

É possível transmitir um ID ofuscado de perfil para o Google Play para facilitar a detecção de fraudes, como, por exemplo, detectar se há muitos dispositivos realizando compras na mesma conta em um curto período. Esse recurso é semelhante a transmitir um ID ofuscado da conta de usuário. Em ambos os casos, o código representa um único usuário. Contudo, o código do perfil permite que você identifique um usuário específico entre vários perfis usados em um único app. Depois de enviar um ID ofuscado de perfil para o Google Play, você pode recuperá-lo mais tarde em um recibo de compra.

Para transmitir um ID ofuscado de perfil, use seu builder de compra no app para modificar a configuração do módulo chamando o método 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);

Confirmar mudanças de preço para assinaturas

O Google Play permite que você mude o preço de uma assinatura ativa. Os usuários do seu jogo precisam confirmar toda mudança de preço antes que ela entre em vigor. Para solicitar que os usuários confirmem uma mudança de preço de assinatura, chame o método 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.
    });

Mudanças no comportamento da API do Unity

Quando você usa o plug-in do Google Play Faturamento, a maioria das APIs se comporta da mesma forma que a implementação padrão de compra no app do Unity para outras app stores. No entanto, as APIs se comportam de forma diferente em alguns casos. Esta seção descreve essas diferenças de comportamento.

O payload do desenvolvedor não é compatível

O Google Play suspendeu o uso do payload do desenvolvedor. Ele está sendo substituído por alternativas mais significativas e contextuais. Por esse motivo, o payload do desenvolvedor não é compatível. Para ver mais informações sobre alternativas, consulte a página sobre Payload do desenvolvedor.

Você pode continuar usando as mesmas interfaces definidas pela implementação padrão de compra no app do Unity para outras app stores, incluindo IStoreController. Ao iniciar uma compra, ainda é possível usar IStoreController e chamar o método InitiatePurchase():

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

No entanto, nenhum payload transmitido terá efeito (não aparecerá no recibo final).

O SubscriptionManager não é compatível

O Unity IAP oferece a classe SubscriptionManager para gerenciar assinaturas. Como a implementação padrão de compra no app do Unity dessa classe usa o payload do desenvolvedor, ela não é compatível. Você ainda pode criar essa classe, mas é possível que você receba dados não confiáveis ao usar qualquer um dos métodos getter dela.

Pequenas mudanças de API em UpdateSubscription

O plug-in do Google Play Faturamento não oferece suporte ao uso dos métodos SubscriptionManager.UpdateSubscription() e SubscriptionManager.UpdateSubscriptionInGooglePlayStore() para fazer upgrade ou downgrade das suas assinaturas. Se o jogo chamar esses métodos, uma GooglePlayStoreUnsupportedException será gerada.

A Biblioteca Google Play Faturamento oferece uma API alternativa para usar no lugar desses métodos. Para fazer upgrade ou downgrade de uma assinatura, chame o método UpdateSubscription() usando o modo de cálculo proporcional:

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

Você pode unir essa chamada de método a uma verificação de plataforma ou a um bloco "catch" quando GooglePlayStoreUnsupportedException é capturado.

Para ver mais informações e exemplos de como usar o modo de cálculo proporcional, consulte Definir modo de cálculo proporcional.