Persistência Com Firebase Android - Parte 1

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

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

Persistência Com Firebase Android - Parte 1

Vinícius Thiengo
(14147) (54)
Go-ahead
"Não se distraia. Nunca diga a si mesmo que você precisa ser a maior marca do mundo. Comece trabalhando no que você precisa no momento presente e depois no que você precisa fazer amanhã. Então, estabeleça alvos gerenciáveis."
Jas Bagniewski
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Opa, blz?

Nesse post damos inicio a série Firebase Persistência no Android. 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 library no Android code, como poucas linhas de código já possível, por exemplo, realizar todo o processo de cadastro e autenticação de uma novo user de nossa APP.

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 user em nossa APP 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 retangulo cercado de borda tracejada, insira o nome da APP e logo depois clique em "CREATE NEW APP":

O terceiro passo é escolher um tipo de provider de autenticação que sserá utilizado em nossa APP. Podemos escolher entre: Email & Password (esse é o que vamos utilizar nesse projeto), Facebook, Twitter, Google, Github, Anônimo e Customizado (junto ao sistema de autenticação de nosso sistema já existente, caso exista um).

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":

O quarto passo é configurar o Gradle, mais especificamente o build.gradle (Module: app), em "dependencies" adcione 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 sepre 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 váriavel 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 user solicitar o envio dos dados pelo clique no button de envio, enviar os dados ao server Firebase e então aguardar o retorno de: Sucesso, o user foi salvo na base Firebase; ou Fail, o user não pode ser salvo, nesse último caso vamos utilizar um Snackbar para printar o problema.

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 button "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 user 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 user no provider que está sendo utilizado, na mudança de provider (Facebook login, por exemplo) o id será tb 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 acesar 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 dadis 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 configarados são removidos do Firebase. As outras opções de persistência do Firebase vamos ver em um próximo post.

Para podermos utilizar o objeto da classe User como parametro de entrada em setValue() temos primeiro que nos certicarmos de que a classe tem métodos getters para as variaveis de isntancia que devem ter os valores salvos no Firebase e também garantir a existência de uma construtor vázio, como o abaixo:

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

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

Voltando ao método saveUser() que está na SignUpActivity, caso dê tudo certo e o user seja salvo, próximo ao final do processamento é chamado o método unauth() de Firebase. A ideia ai é desconectar o user, pois ele apenas realizou o cadastro, terá de realizar o login ainda. Caso não faço isso a APP deixará o user conectado, a desvantagem vem se seu sistema tiver um processo de verificação de email para comprovar que é o user dono do email mesmo. Como essa confirmação é parte de um processo de segurança, mesmo que ainda não implementado na APP de exemplo, vamos seguir o fluxo desse script, desconectando o user 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 váriavel "firebase" é uma váriavel 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 variavel 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 ao user, se o user já estava logado na APP, caso sim, esse método deve também chamar a Activity 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() temalgum dado diferente de null, segundo a documentação do Firebase, se o valor retornado desse método for diferente de null então o user já está conectado.

Caso essa condicional falhe, ainda temos de verificar via token se o user 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 users 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 user class 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 sequencia de métodos chamados:

User class

...
public void saveTokenSP(Context context, String token ){
LibraryClass.saveSP( context, TOKEN, token );
}
...

LibraryClass class

...
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 user esteja realmente conectado. Esse método também chama o finish() para remover a LoginActivity da pilha de Activities:

...
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 button de login da APP. Segue área de login:

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

...
public void sendLoginData( View view ){
openProgressBar();
initUser();
verifyLogin();
}
...

Note que esse método somente passívo de ser acionado caso o user 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 user.

Com o login dando certo devemos ser redirecionados a MainActivity. Nessa Activity, nesse primeiro post, apenas vamos permitir o logout da APP, chamando em seguida a LoginActivity. A interface de MainActivity é como se segue:

O que nos resta é colocarmos uma ação no button de Logout. Esse button tem um método logout() vinculado ao listener de click 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 relaizando o logout nessa chamada. Com isso terminamos a implementação de nosso cadastro e login na APP Nosso Chat.

Lembrando que esse é o primeiro post da série. Os prós e contras já comentei no ínicio do post, ondo contra fica na cobrança de contas mais robustas, mas é aquilo, é uma empresa.

O código completo é encontrado no GitHub: https://github.com/viniciusthiengo/nosso-chate

Na pressa o "chate" saiu com "e" mesmo.

O vídeo abaixo é um conteúdo alternativo onde é explicado o passo a passo da construção do APP com Firebase.

Fonte principal: Documentação Firebase Android

Vlw.

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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 (12)

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