Solução de problemas e Perguntas frequentes sobre Unity e Firebase

Esta página oferece dicas e solução de problemas para problemas específicos do Unity que você pode encontrar ao usar o Firebase.

Tem outros desafios ou não vê seu problema descrito abaixo? Certifique-se de verificar as perguntas frequentes principais do Firebase para obter mais perguntas frequentes sobre o Firebase ou específicas do produto.

Compatibilidade com .NET ao usar o Unity 2017.xe posterior

O Firebase oferece suporte ao .NET 4.x como uma opção de compilação experimental no Unity 2017 e versões posteriores. Os plug-ins do Firebase usam componentes do Parse SDK para fornecer algumas classes do .NET 4.x em versões anteriores do .NET.

Portanto, o SDK do Firebase Unity versão 5.4.0 e posterior fornece plug-ins compatíveis com .NET 3.x ou .NET 4.x nos diretórios dotnet3 e dotnet4 do SDK do Firebase Unity.

Se você importar um plug-in do Firebase incompatível com a versão .NET habilitada em seu projeto, verá erros de compilação de alguns tipos no .NET Framework implementados pelo Parse SDK.

Para resolver o erro de compilação, se você estiver usando o .NET 3.x:

  1. Remova ou desative as seguintes DLLs para todas as plataformas:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. Habilite as seguintes DLLs para todas as plataformas:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Para resolver o erro de compilação, se você estiver usando o .NET 4.x:

  1. Remova ou desative as seguintes DLLs para todas as plataformas:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. Habilite as seguintes DLLs para todas as plataformas:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

Se você importar outro plug-in do Firebase:

  • Em seu projeto Unity, navegue até Ativos > Resolvedor do Play Services > Manipulador de versão > Atualizar para habilitar as DLLs corretas para seu projeto.

Compilação do Unity 2017.1 IL2CPP em projetos .NET 4.x

O Firebase oferece suporte ao .NET 4.x como uma opção de compilação experimental no Unity 2017 e versões posteriores. Os plug-ins do Firebase usam componentes do Parse SDK para fornecer algumas classes do .NET 4.x em versões anteriores do .NET.

Portanto, o SDK do Firebase Unity versão 5.4.0 e posterior fornece DLLs de encaminhamento de tipo que encaminham tipos de análise (por exemplo, implementação de análise de System.Threading.Tasks.Task ) para o .NET Framework. Infelizmente, o IL2CPP (um transpilador que converte C# em C++) fornecido no Unity 2017.1.x não processa corretamente DLLs de encaminhamento de tipo, o que resulta em erros de compilação semelhantes aos seguintes:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

Atualmente, não há solução alternativa disponível para erros de compilação do .NET 4.x IL2CPP no Unity 2017.1, portanto, você deve atualizar para o Unity 2017.2 ou posterior para usar o .NET 4.x em projetos compilados com IL2CPP.

Rede Unity 2017.2

O Firebase Realtime Database cria conexões de rede TLS usando a pilha de rede .NET. A funcionalidade TLS é interrompida no Unity 2017.2 ao usar o .NET 4.6, fazendo com que o plug-in do Realtime Database falhe nos editores e no desktop.

Não há solução alternativa para esse problema, portanto você deve usar uma versão diferente do Unity, por exemplo, versão 2017.1 ou 2017.3.

Arquivo de configuração do Firebase Android ausente no Unity 2020

Para oferecer suporte a versões do Unity que não têm a capacidade de personalizar a compilação do Gradle, a ferramenta de edição do Firebase gera Assets/Plugins/Android/Firebase/res/values/google-services.xml como um recurso do Android a ser empacotado em um Build do Android, para que o SDK do Firebase possa usá-lo para inicializar a instância padrão do FirebaseApp.

No Unity 2020, todos os recursos do Android devem estar em diretórios com o sufixo .androidlib . Se seu projeto estiver usando um SDK do Firebase que gera um diretório Assets/Plugins/Android/Firebase , renomeie-o para Assets/Plugins/Android/Firebase.androidlib . Certifique-se de que contém AndroidManifest.xml , project.properties e res/values/google-services.xml .

Um problema com dex único durante a criação de um aplicativo Android

Ao criar um aplicativo Android, você pode encontrar uma falha de compilação relacionada ao fato de ter um único arquivo dex. A mensagem de erro será semelhante à seguinte, se o seu projeto estiver configurado para usar o sistema de compilação Gradle.

Cannot fit requested classes in a single dex file.

Os arquivos Dalvik Executable ( .dex ) são usados ​​para armazenar um conjunto de definições de classe e seus dados adjuntos associados para aplicativos Android ( .apk ). Um único arquivo dex está limitado à referência a 65.536 métodos. A compilação falhará se o número total de métodos de todas as bibliotecas Android no seu projeto exceder esse limite.

O Unity introduziu a Minificação em 2017.2, que usa o Proguard (ou outras ferramentas em algumas versões do Unity) para remover o código não utilizado, o que pode reduzir o número total de métodos referenciados em um único arquivo dex. A opção pode ser encontrada em Configurações do Player > Android > Configurações de Publicação > Minify . As opções podem diferir em diferentes versões do Unity, portanto consulte a documentação oficial do Unity.

Se o número de métodos referenciados ainda exceder o limite, outra opção é habilitar multidex . Existem várias maneiras de conseguir isso no Unity:

  • Se Custom Gradle Template nas Player Settings estiver ativado, modifique mainTemplate.gradle .
  • Se você usar o Android Studio para criar o projeto exportado, modifique o arquivo build.gradle no nível do módulo.

Mais detalhes podem ser encontrados no guia do usuário do multidex .

Suporte e simplificação de Java 8 para compilações Android no Unity 2017 e Unity 2018 (Firebase Unity SDK 8.0.0 e superior)

Em maio de 2021 (Firebase BoM v28.0.0), o Firebase desativou a desugaring para todas as suas bibliotecas Android (consulte a nota de lançamento ). Ao criar um aplicativo Android com o SDK do Firebase Unity (8.0.0 e superior), você poderá ver o seguinte erro de compilação:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

Essa alteração afeta apenas compilações do Android no Unity 2017 e no Unity 2018. Versões mais recentes do Unity adicionam o bloco compileOptions por padrão nos arquivos de compilação Gradle. Para corrigir esse erro de compilação no Unity 2017 e no Unity 2018, siga um destes procedimentos:

  • Adicione um bloco compileOptions ao seu modelo Gradle:

    1. Use Gradle como sistema de compilação.
    2. Habilite Custom Gradle Template em Player Settings .
    3. Adicione as seguintes linhas a mainTemplate.gradle (ou nível de módulo build.gradle se estiver exportando um projeto para Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Alternativamente, aumente o minSdkVersion do seu projeto Android para 26 ou superior.

Consulte também Solução de problemas do Android - eliminação de falhas de compilação .

Problemas ao criar para iOS com Cocoapods

Ao compilar para iOS, a instalação do Cocoapod pode falhar com um erro sobre a localidade do idioma ou codificação UTF-8. Atualmente, existem várias maneiras diferentes de contornar o problema.

  • No terminal, execute pod install diretamente e abra o arquivo xcworkspace resultante.

  • Faça downgrade da versão do Cocoapods para 1.10.2. O problema existe apenas na versão 1.11 e mais recente.

  • Em seu ~/.bash_profile ou equivalente, adicione export LANG=en_US.UTF-8

Como atualizar a versão dos SDKs do Firebase Unity

O processo de atualização das versões dos SDKs do Firebase Unity depende de como eles foram importados inicialmente. Aqui estão os dois métodos alternativos de importação:

  • Importando arquivos .unitypackage no diretório Assets/ do seu projeto
  • Importando usando o Unity Package Manager (UPM)
    • Esta é a maneira recomendada de gerenciar pacotes no Unity 2018.4+.
    • Use este método para facilitar futuras atualizações de versão e limpar seu diretório Assets/ .

No seu projeto Unity, você deve usar apenas um método de importação para gerenciar todos os seus pacotes do Firebase. As instruções abaixo podem ser usadas não apenas para atualizar a versão de pacotes individuais, mas também, se necessário, para migrar o gerenciamento de pacotes para o UPM (o método de importação recomendado).