Lembrete: seu app precisa oferecer compatibilidade com a restauração e suspensão de conta até 1º de novembro de 2020. A pausa e a reativação de assinaturas também serão ativadas por padrão, a menos que você desative essa opção explicitamente. Saiba mais (em inglês).

Usar a biblioteca do 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 aplicativo, chamados de Unity IAP, para fornecer ao seu jogo os recursos mais recentes da biblioteca do Google Play Faturamento. Este guia explica como configurar seu projeto para usar o plug-in. Este guia também descreve como implementar recursos da Biblioteca de 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 compilação 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).

Faça o download e importe o plug-in.

As etapas a serem seguidas variam, dependendo da versão do Unity que está sendo usada:

Para as versões 5.6 a 2018.3 do Unity

Para essas versões do Unity, 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 for importado, uma nova pasta chamada GooglePlayPlugins (na raiz da pasta "Assets") será adicionada aos recursos do projeto. Essa pasta contém todos os recursos da Biblioteca de Faturamento para o plug-in.

Para as versões 2018.4 e mais recentes do Unity

Para essas versões do Unity, o plug-in é distribuído pelo Game Package Registry for Unity. Para fazer o download e instalar o plug-in, siga estas etapas:

  1. Faça o download da versão mais recente do Game Package Registry for Unity.

  2. Importe o arquivo .unitypackage selecionando a opção de menu do ambiente de desenvolvimento integrado do Unity Assets > Import package > Custom Package e importando todos os itens.

  3. Quando solicitado, clique em Add Selected Registries para concordar com os Termos de Serviço das APIs do Google e ativar o Game Package Registry for Unity.

  4. Abra Window > Package Manager para ver a lista de pacotes.

  5. Se a janela do Package Manager tiver um botão de atualização, clique nele para carregar os pacotes.

  6. Na lista de pacotes, selecione o pacote do Google Play Faturamento e clique em Install.

Definir as configurações de compilação

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 Faturamento > 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 do Google Play Faturamento no seu jogo

O plug-in do Google Play Faturamento inclui os serviços do Unity IAP para que seja possível usar as mesmas APIs do Unity para gerenciar fluxos de compras comuns. Existem algumas pequenas mudanças do comportamento da API devido às diferenças entre a Biblioteca de Faturamento e a implementação padrão de compra no app do Unity para outras app stores. Se as APIs do Unity IAP são novidades para você, consulte a seção "Como fazer um script de compra" no tutorial do Unity IAP (link em inglês) para ver um exemplo de como implementar fluxos de compra básicos.

A Biblioteca de Faturamento também inclui alguns recursos exclusivos da Google Play Store. É possível acessar esses recursos por meio de uma interface estendida. O restante desta seção descreve como implementar esses recursos exclusivos da Biblioteca de 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 de tempo. 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ê poderá 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 IStoreControllor. Ao iniciar uma compra, ainda é possível usar IStoreControllor 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 (link em inglês) para o gerenciamento de 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 é compatível com o uso dos métodos SubscriptionManager.UpdateSubscription() e SubscriptionManager.UpdateSubscriptionInGooglePlayStore() para fazer upgrade ou downgrade das suas assinaturas. Se o jogo chamar esses métodos, um GooglePlayStoreUnsupportedException será emitido.

A Biblioteca de 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 GooglePlayStoreUnsupportedeException for capturado.

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