Migrar um app do Unity do Fabric Crashlytics para o Firebase Crashlytics

Neste guia rápido, descrevemos como migrar seu app atual do Unity do Fabric Crashlytics para o Firebase Crashlytics para que você possa ver todos os relatórios de falhas no Console do Firebase.

Antes de começar

Para este guia, presumimos que você tenha um app do Unity em funcionamento com o Fabric. Se não houver um app do Unity no Fabric, siga as instruções em Primeiros passos para usuários novos no Crashlytics.

  1. Faça login no Fabric e navegue até o fluxo de migração (ambos em inglês).

  2. Verifique se o campo Signed into Google as lista a Conta do Google associada ao seu projeto do Firebase. Se não listar, clique em Alternar contas para selecionar a conta correta.

  3. Clique em Get Started e em Start Linking.

  4. Arraste o app do Fabric adequado à esquerda para o projeto adequado do Firebase à direita.

    Observe que também é possível criar um novo projeto do Firebase.

  5. Clique em Link 1 app to Firebase.

Etapa 2: remover o Fabric

O Fabric adiciona GameObject ao cenário para inicializar o Crashlytics no jogo, bem como outros diretórios aos próprios SDKs.

Para garantir que não haja conflitos entre os plug-ins do Fabric Crashlytics e do Firebase Crashlytics, remova as seguintes pastas e arquivos do Fabric do seu projeto do Unity:

  • Em Recursos, exclua os seguintes arquivos:

    Assets/
       Editor Default Resources/
           FabricSettings.asset     <- DELETE
       Fabric/                      <- DELETE
       Plugins/
           Android/
               answers/             <- DELETE
               beta/                <- DELETE
               crashlytics/         <- DELETE
               crashlytics-wrapper/ <- DELETE
               fabric/              <- DELETE
               fabric-init/         <- DELETE
           iOS/
               Fabric/              <- DELETE
    
  • Na Janela de hierarquia, remova os seguintes GameObjects

    SampleScene
        Main Camera
        Directional Light
        Canvas
        EventSystem
        FabricInit                  <- DELETE
        CrashlyticsInit             <- DELETE
    
  • Remova todas as entradas do Fabric em Assets > Plugins > Android > AndroidManifest.xml.

    Por exemplo, uma chave conhecida a ser removida é: android:name="io.fabric.unity.android.FabricApplication"

    Pesquise e remova outras entradas do Fabric, se existirem.

Etapa 3: adicionar arquivos de configuração do Firebase

  1. Navegue até o Console do Firebase.

  2. No canto superior esquerdo, ao lado de Visão geral do projeto, clique em e selecione Configurações do projeto

  3. Para seus apps recém-vinculados, faça o download dos arquivos de configuração específicos do Firebase para cada app vinculado. Para um único projeto do Unity, é possível ter no máximo dois arquivos de configuração.

    • Para iOSGoogleService-Info.plist
    • Para Androidgoogle-services.json
  4. No projeto do Unity, abra a janela Projeto e mova os arquivos de configuração para a pasta Assets.

Etapa 4: adicionar o SDK do Firebase Crashlytics

  1. Faça o download do SDK para Unity do Firebase e descompacte o SDK em um local prático.

    O SDK para Unity do Firebase não é específico da plataforma.

  2. No seu projeto aberto do Unity, acesse Assets > Import Package > Custom Package.

  3. No SDK descompactado, selecione a opção para importar o SDK do Crashlytics (FirebaseCrashlytics.unitypackage). Verifique se você tem o FirebaseCrashlytics.unitypackage versão 6.15.0 ou posterior. Caso contrário, atualize a Versão do pacote de recursos. Isso é necessário para que seus relatórios de erros sejam exibidos no Console do Firebase.

    • Unity 5.x e anteriores usam o framework .NET 3.x. Portanto, importe dotnet3/FirebaseCrashlytics.unitypackage.

    • Unity 2017.x e posteriores permitem o uso do framework .NET 4.x. Se o projeto do Unity usar .o NET 4.x, importe dotnet4/FirebaseCrashlytics.unitypackage.

    Você também pode importar qualquer outro produto do Firebase compatível.

  4. Na janela Import Unity Package, clique em Import.

  5. Crie um novo script em C# e adicione-o a um GameObject na cena.

    1. Abra seu primeiro cenário e crie um GameObject em branco chamado CrashlyticsInitializer.

    2. Clique em Adicionar componente no Inspetor para o novo objeto.

    3. Selecione seu script CrashlyticsInit para adicioná-lo ao objeto CrashlyticsInitializer.

  6. Inicialize o Crashlytics no método Start do script:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // Import Firebase
    using Firebase;
    
    public class CrashlyticsInit : MonoBehaviour {
      // Use this for initialization
      void Start () {
          // Initialize Firebase
          Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
              var dependencyStatus = task.Result;
              if (dependencyStatus == Firebase.DependencyStatus.Available)
              {
                  // Create and hold a reference to your FirebaseApp,
                  // where app is a Firebase.FirebaseApp property of your application class.
                  // Crashlytics will use the DefaultInstance, as well;
                  // this ensures that Crashlytics is initialized.
                  Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
    
                  // Set a flag here for indicating that your project is ready to use Firebase.
              }
              else
              {
                  UnityEngine.Debug.LogError(System.String.Format(
                    "Could not resolve all Firebase dependencies: {0}",dependencyStatus));
                  // Firebase Unity SDK is not safe to use here.
              }
          });
      }
    
    // Update is called once per frame
    void Update()
      // ...
    }

Com o SDK adicionado e inicializado, o Crashlytics automaticamente passa a detectar e coletar relatórios de erros.

Etapa 5: inicializar o Firebase Crashlytics

  1. Crie um novo script em C# e adicione-o a um GameObject no cenário.

    1. Abra seu primeiro cenário e crie um GameObject em branco chamado CrashlyticsInitializer.

    2. Clique em Adicionar componente no Inspetor para o novo objeto.

    3. Selecione seu script CrashlyticsInit para adicioná-lo ao objeto CrashlyticsInitializer.

  2. Inicialize o Crashlytics no método Start do script:

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
    
      // Import Firebase
      using Firebase;
    
      public class CrashlyticsInit : MonoBehaviour {
          // Use this for initialization
          void Start () {
              // Initialize Firebase
              Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                  var dependencyStatus = task.Result;
                  if (dependencyStatus == Firebase.DependencyStatus.Available)
                  {
                      // Create and hold a reference to your FirebaseApp,
                      // where app is a Firebase.FirebaseApp property of your application class.
                      // Crashlytics will use the DefaultInstance, as well;
                      // this ensures that Crashlytics is initialized.
                      Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
    
                      // Set a flag here for indicating that your project is ready to use Firebase.
                  }
                  else
                  {
                      UnityEngine.Debug.LogError(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}",dependencyStatus));
                      // Firebase Unity SDK is not safe to use here.
                  }
              });
          }
    
        // Update is called once per frame
        void Update()
          // ...
      }

    Com o SDK adicionado e inicializado, o Crashlytics automaticamente passa a detectar e coletar relatórios de erros.

Etapa 6: substituir chamadas da API Fabric

Revise as seguintes alterações do SDK e faça as atualizações apropriadas no seu código:

O Fabric.Crashlytics agora é o Firebase.Crashlytics

Alteramos nosso namespace de Fabric para Firebase.

Fabric

using Fabric.Crashlytics;

Firebase

using Firebase.Crashlytics;

O RecordCustomException agora é LogException

Registre exceções não fatais personalizadas que foram capturadas e processadas.

Fabric

Crashlytics.RecordCustomException(string name, string reason, StackTrace stackTrace);
Crashlytics.RecordCustomException(string name, string reason, string stackTraceString);

Firebase

Crashlytics.LogException(Exception ex);

Motivo para a alteração

Essa função é usada com mais frequência para registrar uma instância de um Exception. Em vez de exigir que você extraia o "nome", "motivo" e "stackTrace" manualmente (o que resulta em código supérfluo), agora é possível fornecer a instância do Exception e o Firebase Crashlytics extrairá as informações necessárias.

Alternativa

Se você estivesse usando esses parâmetros de outra forma além de extrair as informações de uma exceção diretamente, ainda seria possível alcançar o comportamento anterior ao criar sua própria subclasse de Exception com os metadados personalizados na descrição.

O método SetKeyValue agora é SetCustomKey

Defina qualquer par de chave-valor para enviar junto com o relatório de erros. Redefinir a mesma chave atualizará o valor.

Fabric

Crashlytics.SetKeyValue(string key, string value);

Firebase

Crashlytics.SetCustomKey(string key, string value);

Motivo para a alteração

Esse método foi renomeado para tornar o comportamento mais claro e melhorar a consistência com outras APIs do Firebase.

O método SetUserIdentifier agora é SetUserId

Defina um identificador de usuário para ajudar a entender qual foi afetado por uma falha.

Fabric

Crashlytics.SetUserIdentifier(string identifier);

Firebase

Crashlytics.SetUserId(string identifier);

Motivo para a alteração

Esse método foi renomeado para melhorar a consistência com outras APIs do Firebase. Como vantagem, ele é mais curto, e quem não ama ter que digitar alguns caracteres a menos?

Os métodos SetUserEmail e SetUserName foram removidos

Anteriormente, era possível definir um nome ou e-mail associado a uma falha usando métodos explícitos. Essas informações não serão mais explicitamente definidas.

Fabric

Crashlytics.SetUserEmail(string email);
Crashlytics.SetUserName(string name);

Motivo para a alteração

O Google se esforça para proteger os dados do cliente, e parte desse esforço é criar APIs que fazem o mesmo para ferramentas de desenvolvimento. Essas APIs específicas do usuário foram removidas para incentivar o uso de métodos gerados e sem identificação pessoal para saber qual usuário foi afetado por uma falha.

Alternativa

Para especificar qual usuário teve uma falha, o método preferencial é usar SetUserId. No entanto, se essa não for uma solução durável, a mesma funcionalidade poderá ser realizada usando SetCustomKey.

Os métodos Crash e ThrowNonFatal foram removidos

Anteriormente, o Crashlytics fornecia dois métodos de utilitário para lançar exceções para fins de teste. Eles não serão incluídos no Firebase Crashlytics.

Fabric

Crashlytics.Crash();
Crashlytics.ThrowNonFatal();

Motivo para a alteração

O Crashlytics para Unity é executado em muitos ambientes diferentes, e é possível que ocorram diversos tipos de falhas. Esses métodos não especificavam claramente se as falhas resultantes ocorreram no C# ou no SDK nativo específico da plataforma subjacente.

Alternativa

Etapa 7: criar seu projeto

Depois de exportar o projeto para iOS ou Android, verifique se o projeto foi exportado corretamente.

Se parecer que faltam arquivos depois de comparar seu projeto com as configurações de exportação de amostra abaixo, abra o Editor do Unity e execute o Resolvedor do Google Play Services.

iOS

Android

Execute o resolvedor (opcional)

Os resolvedores do Google Play Services garantem que seu projeto do Unity tenha as dependências apropriadas a fim de exportar seu app para iOS ou Android.

Para mais informações sobre o resolvedor, acesse o README do Resolvedor Jar do Unity.

iOS

O Resolver do iOS é executado automaticamente e aproveita o Cocoapods para colocar dependências do iOS no diretório Pods exportado.

  • Para fazer o download do Cocoapods para sua máquina:

    • Navegue para Recursos > Resolvedor do Play Services > Resolvedor do iOS > Instalar Cocoapods
  • Para ativar ou desativar a geração de podfiles (opcional):

    • Navegue para Recursos > Resolvedor do Play Services > Resolvedor do iOS > Configurações

Android

O resolvedor do Android é executado automaticamente e aproveita gradle para colocar as dependências do Android em Assets/Plugins/Android.

  • Para executar manualmente o resolvedor:

    • Navegue para Recursos > Resolvedor do Play Services > Resolvedor do Android > Resolvedor
  • Para ativar ou desativar a resolução automática, que fica ativada por padrão:

    • Navegue para Recursos > Resolvedor do Play Services > Resolvedor do Android > Configurações

A seguir