Persistência Com Firebase Android - Parte 1

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Persistência Com Firebase Android - Parte 1

Persistência Com Firebase Android - Parte 1

Vinícius Thiengo
(22292) (42)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloTest-Driven Development: Teste e Design no Mundo Real
CategoriaEngenharia de Software
Autor(es)Mauricio Aniche
EditoraCasa do Código
Edição1
Ano2012
Páginas194
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Neste artigo vamos dar início a série: APIs Firebase para o desenvolvimento acelerado de aplicativos Android.

Mas antes de continuar...

... não deixe de se inscrever 📩 na lista de emails do Blog para ter acesso aos conteúdos exclusivos sobre desenvolvimento Android.

Continuando...

Firebase é uma plataforma Web que nos permite salvar os dados de nossas aplicações na base de dados NoSQL provida por eles.

O Firebase é de tecnologia proprietária e tem uma conta iniciante que é gratuita.

A grande vantagem de seu uso está na velocidade provida pela entidade NoSQL, mesmo quando com dados em massa.

E a facilidade de uso da biblioteca no código Android. Como poucas linhas de código já possível, por exemplo, realizar todo o processo de cadastro e autenticação de um novo usuário de nosso aplicativo.

O Firebase é sem sombra de dúvidas uma excelente opção para aqueles que utilizavam a base de dados no Parse.com (empresa que fechou as portas).

Como indicado no vídeo no final desse post, ler a documentação do Firebase é essencial ainda mais quando é pequena e como muitos exemplos.

Atenção principal na página de "Structuring Data", onde é apresentado como se deve estruturar uma base de dados NoSQL no Firebase, algo diferente quando operando base de dados no modelo relacional.

No decorrer do post vamos construindo o código dessa primeira parte da série, onde trabalharemos o cadastro e login de um novo usuário em nosso aplicativo de chat.

O primeiro passo é criar uma conta no Firebase entrando na área de sign up: https://www.firebase.com/signup/.

O segundo passo é criar um projeto no dashboard do Firebase, clique no retângulo cercado de borda tracejada, insira o nome do aplicativo e logo depois clique em "CREATE NEW APP":

Criando um novo app no dashboard Firebase

O terceiro passo é escolher um tipo de provider de autenticação que será utilizado em nosso aplicativo.

Podemos escolher entre:

Para acessar essa área de providers clique em "Login & Auth" no menu lateral esquerdo.

Logo depois clique na aba "Email & Password" e em seguida clique no checkbox "Enable Email & Password Authentication":

Definindo no dashboard o método de login com as APIs Firebase de autenticação

O quarto passo é configurar o Gradle, mais especificamente o build.gradle (Module: app), em "dependencies" adicione o compile abaixo:

...
compile 'com.firebase:firebase-client-android:2.5.1+'
...

 

Feito isso o próximo passo é colocar a permissão de Internet no AndroidManifest.xml:

...
<uses-permission android:name="android.permission.INTERNET" />
...

 

Nosso próximo passo é criarmos uma CustomApplication que será responsável por iniciar o contexto no Firebase:

public class CustomApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
Firebase.setAndroidContext( this );
}
}

 

Volte no AndroidManifest.xml e coloque o atributo android:name=".CustomApplication" na tag <application> como abaixo:

...
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".CustomApplication">
...

 

Agora, no domínio do problema de nosso projeto temos um package /util que contém uma classe que implementa o padrão "Class Library", nessa classe temos os métodos não comuns a uma especifica classe de nosso.

Nela vamos acrescentar o método que permite acessarmos uma instancia do Firebase sempre que necessário.

Note que o código completo está nesse projeto no GitHub: https://github.com/viniciusthiengo/nosso-chate.

Segue código das inserções de método e variável na ClasseLibrary:

...
private static Firebase firebase;
public static Firebase getFirebase(){

if( firebase == null ){

firebase = new Firebase( "https://nosso-chat-fb.firebaseio.com" );
}

return( firebase );
}
...

 

Depois desses passo de configuração vamos para a classe SignUpActivity.

Devemos iniciar o Firebase e logo depois, assim que o usuário solicitar o envio dos dados pelo clique no botão de envio, enviar os dados ao server Firebase e então aguardar o retorno de:

  • Sucesso, o usuário foi salvo na base Firebase;
  • ou Fail, o usuário não pôde ser salvo.

Neste último caso vamos utilizar um Snackbar para printar o problema.

Área de cadastro de usuário do aplicativo Android de exemplo

Segue código de inicialização no onCreate():

...
protected void onCreate( Bundle savedInstanceState ){
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_sign_up );
Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
setSupportActionBar( toolbar );

firebase = LibraryClass.getFirebase();
initViews();
}
...

 

Logo depois o código do método saveUser().

Método esse que é invocado dentro do método sendSignUpData(), esse é último é chamado depois que houve o clique no botão "Cadastrar".

Segue saveUser() code:

...
private void saveUser(){

firebase.createUser(
user.getEmail(),
user.getPassword(),
new Firebase.ValueResultHandler<Map<String, Object>>(){

@Override
public void onSuccess( Map<String, Object> stringObjectMap ){

user.setId( stringObjectMap.get( "uid" ).toString() );
user.saveDB();
firebase.unauth();

showToast( "Conta criada com sucesso!" );
closeProgressBar();
finish();
}

@Override
public void onError( FirebaseError firebaseError ){

showSnackbar( firebaseError.getMessage() );
closeProgressBar();
}
}
);
}
...

 

Note que caso tudo tenha sido um sucesso, temos ainda que salvar o nome do usuário no Firebase, pois o processo de cadastro somente aceita o email e senha.

O id único é retornado no stringObjectMap.

Esse id único é na verdade único para cada usuário no provider que está sendo utilizado, na mudança de provider (Facebook login, por exemplo) o id será também alterado.

Segue implementação do método saveDB() de User:

...
public void saveDB(){

Firebase firebase = LibraryClass.getFirebase();
firebase = firebase.child( "users" ).child( getId() );

setPassword( null );
setId( null );
firebase.setValue( this );
}
...

 

Quando realizamos a chamada firebase.child("users").child( getId() ) estamos na verdade informando que queremos acessar a base Firebase atualmente conectada.

Logo depois acessar o nó "users" e em seguida acessar o nó representado pela String retornada da chamada getId().

Note que caso nenhum dos nós exista em nossa base de dados Firebase todos serão então criados.

Estamos falando em nós e não em tabelas e colunas, pois a base sendo utilizada é uma NoSQL, que tem o modelo de persistência diferente que o do mais convencional modelo relacional.

Em nosso caso o Firebase utiliza JSON para persistir e trabalhar os dados, por isso também utilizamos o termo "nó".

O uso do método setValue() é crítico, pois os dados que não estão configurados nele, mesmo que já salvos no Firebase no caminho de nós indicados, esses dados não configurados são removidos do Firebase.

As outras opções de persistência do Firebase vamos ver em um próximo artigo.

Para podermos utilizar o objeto da classe User como parâmetro de entrada em setValue() temos primeiro que nos certificarmos de que a classe tem métodos getters para as variáveis de instância que devem ter os valores salvos no Firebase e também garantir a existência de um construtor vazio, como o abaixo:

...
public User(){}
...

 

A base de dados, quando utilizada, ficará com uma estrutura similar a apresentada abaixo (via Firebase Dashboard):

Firebase Database no dashboard Web Firebase

Voltando ao método saveUser() que está na SignUpActivity, caso dê tudo certo e o usuário seja salvo, próximo ao final do processamento é chamado o método unauth() de Firebase.

A ideia ai é desconectar o usuário, pois ele apenas realizou o cadastro, terá de realizar o login ainda.

Caso não faça isso o aplicativo deixará o usuário conectado, a desvantagem vem se seu sistema tiver um processo de verificação de email para comprovar que é o usuário proprietário do email mesmo.

Como essa confirmação é parte de um processo de segurança, mesmo que ainda não implementado no aplicativo de exemplo, vamos seguir o fluxo desse script, desconectando o usuário para obrigá-lo a logar novamente.

Como informado anteriormente, o código completo está no GitHub em: https://github.com/viniciusthiengo/nosso-chate.

Note que em SignUpActivity a variável "firebase" é uma variável de instância.

Note também que a utilização da superclasse CommonActivity é necessária para evitar duplicação de código em LoginActivity e SignUpActivity.

O próximo passo é a configuração da LoginActivity.

Começamos iniciando a variável de instância "firebase", dentro do método onCreate(), como fizemos em SignUpActivity:

...
@Override
protected void onCreate( Bundle savedInstanceState ){
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_login );

firebase = LibraryClass.getFirebase();
initViews();
verifyUserLogged();
}
...

 

Note a presença do método verifyUserLogged().

Esse método é responsável por verificar, antes de apresentar a tela de login, se o usuário já estava logado no aplicativo.

Caso sim, esse método deve também chamar a atividade que é apresentada somente para usuários logados. Em nosso caso é a MainActivity.

Logo o próximo passo é desenvolver o código desse método:

...
private void verifyUserLogged(){

if( firebase.getAuth() != null ){

callMainActivity();
}
else{

initUser();

if( !user.getTokenSP(this).isEmpty() ){

firebase.authWithPassword(
"password",
user.getTokenSP( this ),
new Firebase.AuthResultHandler(){

@Override
public void onAuthenticated( AuthData authData ){

user.saveTokenSP( LoginActivity.this, authData.getToken() );
callMainActivity();
}

@Override
public void onAuthenticationError( FirebaseError firebaseError ){}
}
);
}
}
}
...

 

Primeiro verificamos se getAuth() tem algum dado diferente de null, segundo a documentação do Firebase, se o valor retornado desse método for diferente de null então o usuário já está conectado.

Caso essa condicional falhe, ainda temos de verificar via token se o usuário pode ser considerado ou não conectado.

O termo "password" na verdade identifica o tipo de provider que estamos utilizando junto a autenticação dos usuários e consequentemente na geração dos tokens.

Os outros providers são: Facebook, Google, Twitter, ...

O método getTokenSP() de User está na verdade delegando o trabalho de busca de token para o método getSP() de nossa LibraryClass.

Segue implementação em User:

...
public String getTokenSP( Context context ){

String token = LibraryClass.getSP( context, TOKEN );

return( token );
}
...

 

Então a implementação em LibraryClass:

...
static public String getSP( Context context, String key ){

SharedPreferences sp = context.getSharedPreferences( PREF, Context.MODE_PRIVATE );
String token = sp.getString( key, "" );

return( token );
}
...

 

Essa delegação via classe User dá mais intenção ao código, mesmo que tenha uma chamada a mais ao verdadeiro processamento. Fica mais fácil de entender o código do que chamar LibraryClass.getSP() diretamente.

Voltando ao método verifyUserLogged(), em onAuthenticated() é salvo o token na sequência de métodos chamados.

Classe User:

...
public void saveTokenSP( Context context, String token ){

LibraryClass.saveSP( context, TOKEN, token );
}
...

 

Classe LibraryClass:

...
static public void saveSP(
Context context,
String key,
String value ){

SharedPreferences sp = context.getSharedPreferences( PREF, Context.MODE_PRIVATE );
sp.edit().putString( key, value ).apply();
}
...

 

Logo depois é chamado o método callMainActivity() que faz o que o nome indica, chama a MainActivity caso o usuário esteja realmente conectado.

Esse método também chama o finish() para remover a LoginActivity da pilha de atividades:

...
private void callMainActivity(){

Intent intent = new Intent( this, MainActivity.class );
startActivity( intent );

finish();
}
...

 

O próximo passo é implementar o código do método verifyLogin().

Esse método é chamado dentro do método sendLoginData() que é acionado com o clique no botão de login do aplicativo.

Segue área de login:

Tela de login do aplicativo Firebase Android de exemplo

E código do método sendLoginData():

...
public void sendLoginData( View view ){

openProgressBar();
initUser();
verifyLogin();
}
...

 

Note que esse método somente passivo de ser acionado caso o usuário não esteja já conectado, desse forma a página de login normal será apresentada a ele.

Segue código do método verifyLogin():

...
private void verifyLogin(){

firebase.authWithPassword(
user.getEmail(),
user.getPassword(),
new Firebase.AuthResultHandler(){

@Override
public void onAuthenticated( AuthData authData ){

user.saveTokenSP( LoginActivity.this, authData.getToken() );
closeProgressBar();
callMainActivity();
}

@Override
public void onAuthenticationError( FirebaseError firebaseError ){

showSnackbar( firebaseError.getMessage() );
closeProgressBar();
}
}
);
}
...

 

Bem similar ao código de verificação de token, porém dessa vez enviamos o email e senha para verificação no Firebase.

Note que se dessa vez algo dê errado, um Snackbar é utilizado para alertar o usuário.

Com o login dando certo devemos ser redirecionados a MainActivity.

Nessa atividade, neste primeiro artigo, apenas vamos permitir o logout do aplicativo, chamando em seguida a LoginActivity.

A interface de MainActivity é como se segue:

Tela da atividade principal do aplicativo Firebase Android de exemplo

O que nos resta é colocarmos uma ação no botão de Logout.

Esse botão tem um método logout() vinculado ao listener de clique dele.

Segue código do método:

...
public void logout(View view){
Firebase firebase = LibraryClass.getFirebase();
firebase.unauth();

Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
finish();
}
...

 

A chamada firebase.unauth() já é conhecida sua, estamos realizando o logout nessa chamada.

Com isso terminamos a implementação de nosso cadastro e login no aplicativo Android Nosso Chat.

Antes de partir para a vídeo aula e para a conclusão...

Não deixe de se inscrever na 📩 lista de emails do Blog para receber em primeira mão conteúdos Android exclusivos.

Se inscreva também no canal do Blog em: YouTube Thiengo.

Vídeo

A seguir o vídeo onde é apresentada, passo a passo, a construção do aplicativo Android de exemplo com o conjunto de APIs Firebase:

Como já informado algumas vezes neste artigo, o código completo do projeto Android de exemplo pode ser encontrado no seguinte repositório GitHub:

Não deixe de acessar o repositório e de ler todas as dicas presentes nele. Dicas importantes para a implementação do projeto de exemplo em seu próprio ambiente de desenvolvimento Android.

Conclusão

Principalmente a API de persistência do Firebase, mais precisamente a API Database.

Principalmente está API vai vir para literalmente sacudir o mercado de aplicativos com conteúdos compartilhados.

O que quero dizer é que:

Construir uma rede social, por exemplo, será algo muito mais simples.

Pois a crítica tarefa de gerência de banco de dados remoto será transferida para os servidores do Firbease Database e para todos os profissionais e sistemas deles.

Desta forma, nós desenvolvedores teremos que somente consumir API.

Obviamente que haverá um custo para isso, mas tudo indica que o "custo benefício" será excelente para desenvolvedores Android e para desenvolvedores das outras demais plataformas que são atendidas pelo Firebase.

Lembrando que este é o primeiro artigo da série sobre o conjunto de APIs Firebase em aplicativos Android.

Note que na pressa o "chate" saiu com "e" mesmo.

Então é isso.

Não deixe de se inscrever na 📩 lista de emails do Blog para receber todos os conteúdos de desenvolvimento de maneira gratuita e em primeira mão.

Lembrando que a versão em PDF dos artigos é entregue somente para os inscritos na lista de e-mails.

Surgindo dúvidas, pode deixar abaixo nos comentários que logo eu lhe respondo.

Abraço.

Fonte

Documentação Firebase Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Edicão de Imagem no Android Com Adobe Creative SDKEdicão de Imagem no Android Com Adobe Creative SDKAndroid
Padrões de Implementação - Um Catálogo de Padrões Indispensável Para o Dia a Dia do ProgramadorPadrões de Implementação - Um Catálogo de Padrões Indispensável Para o Dia a Dia do ProgramadorLivros
Utilizando BottomSheet Material Design no AndroidUtilizando BottomSheet Material Design no AndroidAndroid
Refatoração de Código: Substituir Construtores Por Métodos de CriaçãoRefatoração de Código: Substituir Construtores Por Métodos de CriaçãoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (42)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
14/09/2017
Fala Thiengo blz ?
Muito bom seus videos .
Cara nao entendi muito bem quando usar o Firebase, seria um backend?
Caso eu utilizo o
firebase a regra de negocio ficaria no app?

Vlw abcs
Responder
Vinícius Thiengo (0) (0)
14/09/2017
Rick, tudo bem aqui.

Isso, na verdade o Firebase é uma API com várias outras APIs vinculadas a ele (report crash, analytics, database, notificação, ?).

No Android, quando você quer construir um aplicativo serverless (quando você não precisa administrar o servidor) é comum utilizar o Firebase, isso, pois também é do Google e é de fácil integração em aplicativos Android.

Sua base de dados, por exemplo, seria no Firebase Database. Assim você não precisa se preocupar com escalabilidade e outros possíveis problemas quando trabalhando em um convencional servidor remoto com MySQL, por exemplo.

Mas note que os pagamentos ainda serão necessários, você descarta um servidor convencional, mas paga ao Firebase (que acredito valer a pena) caso ultrapasse os limites gratuitos mensais dele.

E sim, a regra de negócio ficaria toda no aplicativo, sem stored routines e cia.

Abraço.
Responder
29/03/2017
Fala thiengo, blz?

A minha duvida é o seguinte, tenho um app que funcionara da seguinte forma.

Abrirá na tela principal, e terá um drawer nela, neste drawer se vc clicar na opcao x ou y abrirá a segunda tela.

Eu quero que o USER possa ver essa segunda tela de boa, nela tem varios imagebuttons, mas se ele clicar em algum ele irá para a terceira tela.

Gostaria de saber, se ao tentar abrir a terceira, se consigo forçar o USER  a fazer login. Se der com o firebase melhor ainda.

A intenção é essa, o USER podera navegar tranquilo pelo app, mas ao tentar entrar nessa terceira tela, ele será obrigado a fazer login, porque nela tem a informação mais importante.


Tipo aqueles foruns sabe, que vc acha a informação no google mas quando tenta abrir, é obrigado a se cadastrar pra poder ver? Tipo isso que pretendo fazer.
Responder
Vinícius Thiengo (0) (0)
01/04/2017
Tiago, tudo bem aqui.

Sim, é possível. Mas uma maneira ainda mais simples e tão eficiente quanto o login Firebase é utilizando o Account.

Dê uma olhada no artigo / vídeo do link a seguir: http://www.thiengo.com.br/como-implementar-o-account-kit-login-em-seu-aplicativo-android

Abraço.
Responder
01/04/2017
Mas no meu caso seria assim. No login tera somente a validação, para cadastro seria no botao "cadastre-se" que abriria um formulario, ou no botao esqueci a senha, que abre outro formulario...

O account kit usa só um numero de telefone ou email, nao ?
Responder
Vinícius Thiengo (0) (0)
01/04/2017
Tiago, se o cadastro e o formulário de recuperação de senha são parte das regras de negócio de seu aplicativo, então mantenha com o uso do login via Firebase. Abraço.
Responder
Guilherme (1) (0)
06/03/2017
Primeiro parabéns pelo artigo, me ajudou bastante! Mas gostaria de saber se tem alguma forma de saber se o dado que estou lendo, já está on Line ou somente em cache mesmo? no caso de trabalhar offline também...
Responder
Vinícius Thiengo (0) (0)
10/03/2017
Guilherme, tudo bem?

Para esse caso, como ainda não abordei no Blog, recomendo o estudo da doc de offline data no Firabase Database: https://firebase.google.com/docs/database/android/offline-capabilities?hl=pt-br

Está em português o conteúdo.

Devido ao Firebase Database fazer uso do modelo NoSQL, parei com a série para estudar esse tipo de base. Abraço.
Responder
18/10/2016
Ola thiengo, como vai?
Então estou estudando agora sobre desenvolvimento de aplicativos android, e gostaria de saber como eu faço pra fazer um banco de dados para uma rede social (estilo snapchat) qual voce me aconselha a usar? o SQLite ou o Firebase.

Pois teria funções como posts, mensagens, e etc e tudo teria que estar vinculado no banco de dados.
Responder
Vinícius Thiengo (0) (0)
19/10/2016
Roberto, blz aqui.

Como é para uma rede social será inevitável ter os dados locais e no backend, logo recomendo o Firebase, pois apesar de ele ter um limite para uso gratuito, o trabalho pesado no backend fica por conta do time do Google Firebase.

Além do mais ele é bem mais rápido.

O possível problema será o estudo do modelo NoSQL, pois esse é diferente do modelo relacional que utiliza o SQL e que costumamos aprender nas salas de aula.

Note também que o Firebase tem possibilidade de vinculação as principais ferramentas do Google Android, por exemplo: caso queira vincular notificações push (em seu APP provavelmente isso será necessário) você já estará utilizando o Firebase, somente terá de adicionar algumas novas linhas de código.

Abraço
Responder
29/07/2016
Eai thiengo, tudo bom?
Estou iniciando no desenvolvimento android e firebase, e estou tentando fazendo uma aplicação na qual o firebase terá vários dados salvos, e o usuário irá digitar o valor que deseja buscar dentro deste banco, porém não sei como faço para realizar uma busca em todos os ID do firebase.

Para a criação deste banco de dados, estou utilizando a função "Push" do firebase, que cria uma nova ID sempre que adiciono um dado. Basicamente meu banco de dados no firebase está como abaixo, tendo diversos ID's, e preciso que quando o usuário digite o nome num Edittext, meu codigo percorra todos os ID's e encontre o nome digitado pelo usuário, trazendo os demais dados como Telefone e sexo.

você poderia me ajudar neta dúvida, não consigo resolver.

Vlw.

Dados

-KNm0AsCwWRzMs1RG3KH
Nome:        "Lucas"
Telefone:    "11-99999-9999"
Sexo:          "Masculino"

-KNm2AsCwWRzMs1RG3HG
Nome:        "Maria"
Telefone:    "11-98888-8888"
Sexo:          "Feminino"
Responder
Vinícius Thiengo (0) (0)
01/08/2016
Fala Lucas, blz aqui.
Não falei sobre recuperação de dados ainda, mas o que vc precisa está exatamente nessa página da doc: https://firebase.google.com/docs/database/android/retrieve-data

Ajuste as buscas para o modelo de APP que vc está criando. Abraço
Responder
William (1) (0)
22/04/2017
Boa noite Lucas, tudo bom ?
Tou nessa mesma situação que vc, gostaria de saber se vc conseguiu realizar a query que pecorra todos os IDs ?
--------------------
E ai Thiengo, blz ?
Muito bom esses tutorias e vídeos.
Responder
Vinícius Thiengo (1) (0)
23/04/2017
William, tudo bem aqui.

Chegou a estudar o link que indiquei? Abraço.
Responder
William (1) (0)
04/05/2017
Estudei sim, conseguir me safa. Vlw
Responder
Diógenes Oliveira (0) (0)
20/07/2016
E ai cara blz? Primeiramente gostaria de parabenizar e te agradecer pelos vídeos que são explicados com total clareza e muita competência! Que tu continues assim!
meu problema é o seguinte:

Na empresa que trabalho, o controle e o acesso pelos portões de entrada do prédio são feitos por meio de integração html5 e um clp (controlador lógico programável) .Para eu acessar oos botoes de (abrir e fechar) preciso do link específico para cada funcionário, ou seja, cada funcionário possui um link próprio o que possibilita descobrir quem abriu e fecho o portão "x" e em que hora isto foi feito. Tudo funciona numa boa. Resolvi mudar de um link para um aplicativo android(preciso fazer para ios, porem não tenho nem ideia de como começar) utilizei uma webview e está funcionando legal, inclusive rodando no própio app uma vez que consegui(graças a você) resolver o problema de abertura de outro navegador.O problema nisso é que eu teria que desenvolver um app pra cada usuário, ou seja, alterar o link individual de cada funcionário no eclipse e sendo assim exportar cada apk para cada funcionário. Eis que tu apresenta esta solução do firebase!

Sou novo nesta área de desenvolvimento de app, mas integrar os aplicativos com automação industrial é uma nova vertente que quero implementar na empresa.
Então a dúvida é a seguinte.Após fazer o cadastro e o login, é possivel que cada pessoa após logar seja direcionada para links diferentes? Exemplo: fulano se cadastrou e quando logou foi direcionado para uma activity "A" que contem um link "x". Ciclano se cadastrou e quando logou foi direcionado para uma activity "B" que contem um link "y".

Não sei se ficou clara a minha dúvida.

desde já te agradeço.
Responder
Vinícius Thiengo (1) (0)
01/08/2016
Fala Diógenes, blz aqui.
Respondido nos comments do Facebook. Abraço
Responder
Victor (1) (0)
16/07/2016
E aí Thiengo, beleza?
No vídeo acho que vc não chega a abrir a CryptWithMD5.java e não encontrei no GitHub nem aqui no site. Tem como disponibilizar esta classe pra nós? (sei que lá na frente vc excluirá ela, mas gostaria de usá-la pra fazer um teste)

Valeu
Responder
Vinícius Thiengo (0) (0)
16/07/2016
Fala Victor, blz aqui.
Segue link da classe: http://pastebin.com/RNic66f6
Responder
27/06/2016
Olá Thiengo,

Você teria algum link para indicar em relação a como estruturar os dados no modelo JSON usado pelo Firebase? No site deles achei a parte de estruturar os dados(Structure Data) muito vago.
Responder
Vinícius Thiengo (0) (0)
02/07/2016
Fala Daybson, blz?
Não link, tenho livros que também quero comprar para entender mais, são eles:

http://www.novatec.com.br/livros/nosql-essencial/
http://www.novatec.com.br/livros/mongodb/

O mongoDB a princípio é mt similar ao Firebase, então o livro deve dar uma base boa. Abraço
Responder
04/07/2016
Obrigado pela dica.
Responder
Matheus Bed (1) (0)
24/05/2016
Bom dia thiengo, Estou criando um app com banco de dados relacional, mas agora que conheci o firebase estou na duvida,  pensando em facilidade de implementação, melhoria de desempenho e pensando no futuro qual modelo você  indicaria? relacional ou NoSQL por favor estou nesse dilema.
Responder
Vinícius Thiengo (2) (0)
24/05/2016
Fala Matheus, blz?
NoSQL, sem sombra de dúvidas. O Firebase facilita em muito o dev backend. E vc já estará utilizando um sistema escalavel. Somente terá de estudar como montar as relações no NoSQL. Abraço
Responder
04/05/2016
Olá Thiengo,

Você poderia criar uma vídeo aula de como criar um sistema de Seguir e Deixar de Seguir com o Firebase?
Responder
Vinícius Thiengo (1) (0)
04/05/2016
Fala Lopes, blz?
Vc diz como nas redes sociais? Se sim, pode ser que eu coloque no chat, de qualquer forma, vlw pela dica. Abraço
Responder
05/05/2016
Isso mesmo, algo semelhante ao Twitter, instagram...

Existia um exemplo no Udemy usando o Parse, porém o Parse foi descontinuado e não tenho ideia de como fazer com o firebase
Responder
19/05/2016
Eae Thiengo,
Só pra mostrar o que quis dizer
Veja esse link: https://www.udemy.com/curso-completo-desenvolvedor-android/learn/v4/

Na descrição do curso, tem um exemplo que é simples de se fazer com o parse, mas no Firebase não tenho noção do que usar para criar algo parecido
Responder
Vinícius Thiengo (0) (0)
21/05/2016
Lopes, no Firebase, a principio, vc somente consegue utilizar o Twitter para login. Ele está em uma nova versão, agora é ver se ela oferece isso (https://firebase.google.com/ ). Abraço
Responder
Matheus (0) (0)
15/07/2016
A Udacity disponibilizou um ótimo curso de firebase para android. Da uma olhada lá.
Responder
21/03/2016
Bom dia Thiengo.
Gostaria de saber como o firebase armazena os dados offline.

Obrigado.
Responder
Vinícius Thiengo (1) (0)
21/03/2016
Fala Alan, blz?
Vou falar sobre isso tb na série. O conteúdo em inglês está aqui: https://www.firebase.com/docs/android/guide/offline-capabilities.html
Abraço
Responder
21/03/2016
muito toop
Responder
Gabriel Rocha (2) (0)
16/03/2016
Thiengo sei que aqui num é lugar de postar sobre a LIB AndroidImageSlider, mas enviei um comentario no post e simplesmente não..
Então gostaria de saber o seguinte,estou tendo problemas na hora de adicionar o clique, infelizmente nao consigo solucionar, quando clico na imagem do Slider ele simplesmente nao executa nada, já fiz de tudo que indicou no video e no proprio post da LIB..Se puder me ajudar ou fazer um video ensinando fico muito agradecido
Ótimo trabalho, sempre vejo seus videos e agora comecei a interagir com seu blog tbm,Obrigado
Responder
Vinícius Thiengo (0) (0)
16/03/2016
Fala Gabriel. blz?
Pelo fato de já ter seguido o vídeo e a própria doc da library o que me resta é perguntar se no LogCat está sendo printada alguma mensagem de Warning? Se possível coloque o trecho de código que utiliza o Slide, coloque no pasteBin (http://pastebin.com/ ) para eu poder ver melhor o que vc está fazendo. Abraço
Responder
Gabriel Rocha (2) (0)
16/03/2016
Opa, Thiengo
No momento apaguei todas as linhas pois me deu tanta dor de cabeça, mas olhando varias vezes eu consegui adicionar clique em um dos sliders, mas sem sucesso novamente a minha aplicação fecha inesperadamente com o toque no slider..
Já que falou do LogCat, tive varios erros mesmo fazendo tudo certo, mas que me lembro as FCs davam um aviso de erro nas Activitys mas já conferi tudo e nao tem nenhum erro, já testei no GenyMotion e tbm no proprio AVD e sempre o mesmo FC quando clico acontece
Se possivel poderia fazer um video sobre esse erro?
Gostei muito do ImageSlider, mas com esse erro nao consegui explorar ele até maximo e assim criar uma otima aplicaçao com um visual surpreendente
Responder
Vinícius Thiengo (1) (0)
18/03/2016
Gabriel, na verdade não tenho planos para esse vídeo.
O que recomendo é vc destrinchar a documentação da library (pergunte tb no issues da library para os desenvolvedores dela caso a dúvida ainda não tenha sido sanada) e tb verificar outras alternativas no Android Arsenal (https://android-arsenal.com/search?q=slide ). Abraço
Responder
acruche (1) (0)
14/03/2016
Oi Thiengo, excelente vídeo. Já usei o firebase, porém não conhecia essa parte de login. Você está pensando em criar um chat entre dois usuários? ou chat em grupo? Abs
Responder
Vinícius Thiengo (0) (0)
14/03/2016
Opa, blz?
A principio somente entre dois users. Abraço
Responder
Diogo Pereira (1) (0)
14/03/2016
Fala Thiengo, gostaria de sabe se vc sabe um tutorial que ensine a manda e receber dados, tipo votação de dois eleitores, ?
Responder
Vinícius Thiengo (1) (0)
14/03/2016
Fala Diogo, blz?
Com o Firebase vc consegue fazer isso e com consistência, pois utilizando a transaction dele todo o NoSQL db respeitará a atualização do registro de voto, por exemplo. Dê uma olhada no vídeo acima para poder começar e depois siga na área de transaction dessa parte da doc do Firebase (https://www.firebase.com/docs/android/guide/saving-data.html ). Abraço
Responder
14/03/2016
Gostei bastante, boa vídeo aula. Espero que possa abordar sobre o Offline Capabilities do firebase também.
Responder