Fazer upgrade do app para Android a partir de Firebase.com

Este documento ajuda você a fazer upgrade do seu aplicativo Firebase.com para o novo Console do Firebase e as novas APIs.

Quatro etapas devem ser executadas:

  1. Fazer upgrade do projeto para o novo Console do Firebase.
  2. Instalar o SDK do Firebase.
  3. Atualizar o código do banco de dados.
  4. Atualizar o código de autenticação.

Você pode fazer upgrade para o novo console firebase.google.com a qualquer momento. Seus aplicativos continuarão funcionando. Atualize seu código quando você estiver pronto para usar alguns dos novos recursos do Firebase no seu aplicativo.

Importar o projeto para o novo Console do Firebase

  • Acesse o Console do Firebase e localize seu projeto em "Seus projetos atuais no Firebase.com".
  • Clique em Importar no projeto em que quer fazer upgrade.
    • Caso seu projeto esteja em um plano pago do firebase.com, você precisará configurar o faturamento dele no novo console. Suas informações de faturamento não são migradas automaticamente.
    • Selecione ou crie uma conta de faturamento. Após a importação, essa conta será responsável por todas as cobranças do projeto.
  • Seu conteúdo no Realtime Database and Hosting é importado automática e instantaneamente para o Console do Firebase.
  • Seus dados de usuário são migrados automaticamente para o novo back-end de autenticação. Isso acontece em segundo plano, e seus usuários continuam a usar o aplicativo enquanto os dados são migrados. As inscrições e os logins dos usuários não são afetados. Enquanto o sistema migra as contas de usuário, você verá um ícone de carregamento na guia "Auth" do Console do Firebase.
  • Caso você tenha um código promocional para um aplicativo do Firebase.com, entre em contato conosco.

Instalar o SDK do Firebase

Não é necessário atualizar o código dos aplicativos imediatamente. O banco de dados e o código de autenticação existentes continuarão funcionando no seu projeto migrado. Porém, quando estiver pronto para usar alguns recursos novos do Firebase no seu aplicativo, você poderá Instalar o novo SDK do Firebase.

Observe que, ao iniciar o uso do novo SDK, o Google Analytics para Firebase será ativado automaticamente. Por padrão, os dados do Analytics aprimorarão outros recursos do Firebase e outros produtos do Google. Você pode controlar como os dados do Analytics são compartilhados nas suas configurações a qualquer momento. Saiba mais

Atualizar o código do banco de dados

Atualizar as dependências do Gradle

A maneira mais fácil de começar é alterar a dependência do Gradle:

ANTES

dependencies {
  compile 'com.firebase:firebase-client-android:x.x.x'
}
DEPOIS

dependencies {
  compile "com.google.firebase:firebase-database:16.0.6"
}

Corrigir as referências de classe

Seu aplicativo provavelmente terá agora uma série de erros de compilação por causa de classes renomeadas ou movidas. Você deve corrigir muitos deles com algumas substituições diretas:

Antes Depois
com.firebase.client com.google.firebase.database
FirebaseError DatabaseError
FirebaseException DatabaseException
Firebase.AuthStateListener FirebaseAuth.AuthStateListener
Firebase DatabaseReference

Se não consegue encontrar uma classe ou método, consulte a documentação de referência do banco de dados.

Configurar o Contexto do Android e ativar a Persistência off-line

No novo SDK, não é mais necessário chamar Firebase.setAndroidContext() para removê-lo do seu código.

Se o app usar a permanência de disco, agora você poderá ativá-la por meio do objeto FirebaseDatabase:

ANTES

Firebase.getDefaultConfig().setPersistenceEnabled(true);
DEPOIS

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Como no SDK 2.x, a ativação da persistência de disco precisa ser feita antes de outras chamadas ao banco de dados.

Receber uma referência do banco de dados

No novo SDK, as referências Firebase são substituídas por DatabaseReference, e a classe FirebaseDatabase é usada para obter uma referência inicial do seu banco de dados. Portanto, você pode ver a referência do banco de dados em seu código da seguinte forma:

ANTES

Firebase rootRef = new Firebase("https://<your-app>.firebaseio.com/");
DEPOIS

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

Observe que o URL do banco de dados é determinado automaticamente a partir do arquivo google-services.json que você baixou. Portanto, não será preciso especificá-lo. No entanto, se quiser especificá-lo, você pode (o que pode ser conveniente para fins de migração):

ANTES

Firebase ref = new Firebase("https://<your-app>.firebaseio.com/path/to/data");
DEPOIS

DatabaseReference ref = FirebaseDatabase.getInstance()
    .getReferenceFromUrl("https://<your-app>.firebaseio.com/path/to/data");

Atualizar objetos do modelo Java

Como acontece com o 2.x SDK, o banco de dados do Firebase converterá automaticamente objetos Java passados para DatabaseReference.setValue() no JSON e poderá ler JSON em objetos Java usando o DataSnapshot.getValue().

No novo SDK, ao ler o JSON em um objeto Java com DataSnapshot.getValue(), propriedades desconhecidas no JSON serão ignoradas por padrão. Assim, @JsonIgnoreExtraProperties(ignoreUnknown=true) não será mais preciso.

Para excluir campos/getters ao gravar um objeto Java para o JSON, a anotação agora é chamada de @Exclude em vez de @JsonIgnore.

ANTES

@JsonIgnoreExtraProperties(ignoreUnknown=true)
public class ChatMessage {
   public String name;
   public String message;
   @JsonIgnore
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)
DEPOIS

public class ChatMessage {
   public String name;
   public String message;
   @Exclude
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)

Se houver uma propriedade extra em seu JSON que não está na classe Java, você verá este aviso nos arquivos de registro:

W/ClassMapper: No setter/field for ignoreThisProperty found on class com.firebase.migrationguide.ChatMessage

Para remover esse aviso, coloque uma anotação @IgnoreExtraProperties na sua classe. Se deseja que o banco de dados do Firebase se comporte como no 2.x SDK e lance uma exceção se houver propriedades desconhecidas, coloque uma anotação @ThrowOnExtraProperties na classe.

Atualizar o código de autenticação

A funcionalidade Firebase Authentication agora reside por trás da própria classe FirebaseAuth. Portanto, as operações de autenticação agora são feitas em uma instância FirebaseAuth, em vez de em uma referência do Firebase.

Atualizar as dependências do Gradle

Agora que a Authentication reside no próprio módulo, primeiro você precisa adicionar uma dependência ao seu build.gradle:

dependencies {
  compile 'com.google.firebase:firebase-auth:16.1.0'
}

Atualizar as importações

ANTES

import com.firebase.client.AuthData;
DEPOIS

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

Fazer login de um usuário como anônimo

Os métodos de autenticação funcionam de forma semelhante à anterior, mas agora estão no objeto FirebaseAuth com novos nomes, e AuthData é agora substituído por FirebaseUser. Por exemplo, veja a seguir como o login funciona anonimamente na API 2.x e na nova API:

ANTES

ref.authAnonymously(new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
DEPOIS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInAnonymously().addOnFailureListener(new OnFailureListener() {
   public void onFailure(Throwable throwable) {
       throw new RuntimeException(throwable);
   }
});

Fazer login de um usuário com um token personalizado

A autenticação com tokens personalizados pelo cliente também funciona de forma semelhante à anterior. Este é um exemplo de como o login com um token personalizado funciona tanto na API 2.x como na nova:

ANTES

ref.authWithCustomToken(AUTH_TOKEN, new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
DEPOIS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInWithCustomToken(AUTH_TOKEN)
        .addOnCompleteListener(this, new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
            }
        });

Os tokens personalizados gerados por você têm um novo formato. Use os SDKs Admin do Firebase para Node.js e Java caso queira criar tokens personalizados compatíveis com a API nova. Se preferir, você poderá criar tokens personalizados usando uma biblioteca JWT de terceiros.

Os SDKs de administrador do Firebase geram tokens personalizados que expiram depois de uma hora, diferentemente das bibliotecas de ajuda da API 2.x que, por padrão, geram tokens que expiram após 24 horas.

Fazer login de usuário com um provedor de rede social

Para provedores de redes sociais, como Google, Facebook ou Twitter, as alterações são um pouco maiores.

O fluxo para os provedores de redes sociais é o mesmo de antes: primeiro você recebe as credenciais do usuário do provedor para depois usá-las para autenticar com o Firebase:

ANTES

ref.authWithOAuthToken(provider, token, authResultHandler);
DEPOIS

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)

Para ver mais informações, consulte a documentação sobre como usar a autenticação do Facebook com o Firebase e como usar a autenticação do Google com o Firebase.

A autenticação do Twitter é um pouco diferente:

ANTES

Map options = new HashMap<>();
options.put("oauth_token", oauth_token);
options.put("oauth_token_secret", oauth_token_secret);
options.put("user_id", user_id);
ref.authWithOAuthToken(token.provider, options, authResultHandler);
DEPOIS

AuthCredential credential = TwitterAuthProvider.getCredential(token, secret);
mAuth.signInWithCredential(credential)

Para mais informações, consulte Autenticar usando o Twitter

Fazer logout de um usuário

ANTES

ref.unauth()
DEPOIS

FirebaseAuth.getInstance().signOut();

Monitorar estado da autenticação

ANTES

ref.addAuthStateListener(new Firebase.AuthStateListener() {
   @Override
   public void onAuthStateChanged(final AuthData authData) {
       if (authData != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + authData.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});
DEPOIS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
   @Override
   public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
       final FirebaseUser user = firebaseAuth.getCurrentUser();
       if (user != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});

Migrar logins existentes

Se os usuários fizeram login no seu aplicativo com um SDK legado, você precisará de um código para mantê-los conectados com o novo SDK. Do contrário, eles terão que fazer login novamente. Consulte uma amostra de código aberto para fazer isso no repositório Firebase Auth Migration Helpers do GitHub.

Atualizar o novo modelo de redefinição de senha

Se o aplicativo permitir que usuários façam login com autenticação de e-mail e senha, você provavelmente dará a estes usuários a opção de redefinir senha.

Depois do upgrade para o SDK novo, esses e-mails de redefinição de senha usam os novos modelos especificados no Console do Firebase. Atualize-os conforme as necessidades do seu aplicativo.

Atualizar as bibliotecas do Firebase

Se você usa uma das bibliotecas abaixo, será preciso fazer upgrade para a versão mais recente.

Biblioteca Versão aceita Recurso
GeoFire 1.2.x GitHub

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.