Solução de problemas e perguntas frequentes para Unity e Firebase

Esta página oferece dicas e solução de 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 principais Perguntas frequentes do Firebase para obter mais perguntas frequentes sobre o Firebase ou específicas do produto.

Compatibilidade .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 posterior. Os plug-ins do Firebase usam componentes do Parse SDK para fornecer algumas classes .NET 4.x em versões anteriores do .NET.

Portanto, o Firebase Unity SDK 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 Firebase Unity SDK.

Se você importar um plug-in do Firebase que é incompatível com a versão .NET habilitada em seu projeto, verá erros de compilação de alguns tipos na estrutura .NET que são 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 do Unity, navegue até Assets > Play Services Resolver > Version Handler > Update 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 posterior. Os plug-ins do Firebase usam componentes do Parse SDK para fornecer algumas classes .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 os tipos Parse (por exemplo, implementação Parse de System.Threading.Tasks.Task ) para a estrutura .NET. Infelizmente, o IL2CPP (um transpilador que converte C# em C++) fornecido no Unity 2017.1.x não processa corretamente as 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>

No momento, não há solução alternativa disponível para erros de compilação .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 na área de trabalho.

Não há solução alternativa para esse problema, portanto, você deve usar uma versão diferente do Unity, por exemplo, a 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 do editor do Firebase gera Assets/Plugins/Android/Firebase/res/values/google-services.xml como um recurso do Android a ser empacotado em um Compilação 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 um 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 . Verifique se ele contém AndroidManifest.xml , project.properties e res/values/google-services.xml .

Um problema com o single dex ao criar o aplicativo Android

Ao criar um aplicativo Android, você pode encontrar uma falha de compilação relacionada a ter um único arquivo dex. A mensagem de erro é semelhante à seguinte, se 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 é limitado a referência a 65.536 métodos. A compilação falhará se o número total de métodos de todas as bibliotecas do Android em seu projeto exceder esse limite.

O Unity introduziu o Minification 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 o multidex . Existem várias maneiras de conseguir isso no Unity:

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

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

Suporte e remoção de açúcar do Java 8 para compilações do 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 eliminação de açúcar 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ê pode 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 as versõ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 do 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 o sistema de compilação.
    2. Ative Custom Gradle Template em Player Settings .
    3. Adicione as seguintes linhas a mainTemplate.gradle (ou build.gradle nível do módulo se estiver exportando um projeto para o Android Studio):

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

Consulte também Solução de problemas do Android - falhas de compilação de redução de açúcar .

Problemas ao compilar 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 o 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 para atualizar as versões dos SDKs do Firebase Unity depende de como eles foram importados inicialmente. Aqui estão os dois métodos de importação alternativos:

  • Importando arquivos .unitypackage no diretório Assets/ do seu projeto
  • Importando usando o Unity Package Manager (UPM)
    • Essa é 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/ .

Em seu projeto do 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).