SlideShare uma empresa Scribd logo
1 de 27
Firebase e Android
Construindo aplicações Android com Firebase
Firebase
Firebase
Firebase
Banco em Tempo Real Autenticação de
Usuário
Host
Firebase
Banco em Tempo Real
• NoSQL
• Dados Armazenados em estrutura
JSON
• Suporte Offline
• Pushes e Updates em milissegundos
Firebase
• Email e Senha
• Provedores OAuth:
• Google
• Facebook
• Twitter
• Github
• Customizada
• Autenticação Anônima
Autenticação de usuário
Firebase
Host
• Facilidade no Deploy
• Auto escalável
• Gratuito(Até 100 conexões)
Iniciando no Firebase
Crie uma conta no Firebase:
https://www.firebase.com/login
1 Crie seu primeiro App Firebase2
Configurando Ambiente
File->Project Structure->Cloud
Configurando Ambiente
AndroidManifest.xml
build.gradle
Android Application
Referência Firebase
Firebase refUsers = new Firebase(”https://meuprimeiroapp.firebaseio.com/users/”);
refUsers.child(”joao@mail.com”);
Referência(”https://meuprimeiroapp.firebaseio.com/users/joao@mail.com”);
Model
public class Usuario{
private String email;
private String nome;
public Usuario() {
}
public Usuario(String email, String nome) {
this.email = email;
this.nome = nome;
}
public String getEmail() {
return email;
}
public String getNome() {
return nome;
}
}
“jam@mail,com":{
"email": “jam@mail.com",
"nome": “Android Jam"
}
Java Object Model JSON Object
Tipos de Dados:
• String
• Boolean
• Long
• Double
• Map<String, Object>
• List<Object>
Salvando Dados
• setValue() – Salva ou sobrescreve um valor no path definido
• updateChildren() – Atualiza algumas das chaves sem substituir todos os dados
• push() – Adiciona para o Firebase gerando um um id único
• runTransaction() – Usa transação do Firebase para evitar concorrência e dados
que podem ser corrompidos
Salvando Dados
private void criarUsuario(String email, String nome){
Usuario user = new Usuario(email, nome);
Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/")
.child(email.replace(".", ","));
refUsers.setValue(user);
}
new Usuario().criarUsuario("androidjam@mail.com", "Android-Jam-2");
Map<String, Object> userName = new HashMap<>();
userName.put("nome", "AndroidJam");
refUsers.updateChildren(userName);
refUsers.push();
refUsers.setValue(user);
String key = refUsers.getKey();
refUsers.runTransaction(new Transaction.Handler() {
@Override public Transaction.Result doTransaction(MutableData currentData) {
currentData.child(user.email).setValue(user);
return Transaction.success(currentData);
}
@Override
public void onComplete(FirebaseError firebaseError,
boolean commited, DataSnapshot dataSnapshot) {
//Commit na transaction
}
});
push()updateChildren()
setValue()
runTransaction()
Salvando Dados
O código onde criamos o usuário gerou a estrutura abaixo:
Buscando e monitorando
Dados
• Ao adicionar o listener addValueEventListener é necessário implementar os
métodos onDataChange() e onCancelled()
Firebase refUserName = new Firebase("https://URL-FIREBASE-APP/users/"
+ "androidjam@mail,com/nome");
refUserName.addValueEventListener(new ValueEventListener() {
@Override public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("FIREBASE", dataSnapshot.getValue().toString());
//dataSnapshot.getValue().toString == Android-Jam-2
}
@Override public void onCancelled(FirebaseError firebaseError) {
Log.d("FIREBASE", firebaseError.getMessage());
}
});
Buscando e monitorando
Dados
•Child Added – É disparado toda vez que é adicionado algum objeto no pai
Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/");
mRefUsers.keepSynced(true);
refUsers.addChildEventListener(new ChildEventListener() {
@Override public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
Usuario usuario = dataSnapshot.getValue(Usuario.class);
}
}
• Ao adicionar o listener addChildEventListener é necessário implementar os
métodos onChildAdded(), onChildChanged(), onChildRemoved() e
onChildMoved() esse listener é usado geralmente para obter uma lista de
itens no Firebase
Buscando e monitorando
Dados
•Child Changed – Ocorre toda vez que um filho ou um descendente é alterado
@Override public void onChildChanged(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
Usuario u = dataSnapshot.getValue(Usuario.class);
}
}
•Child Removed – Disparado toda vez que um filho é removido podendo-se obter
o filho removido
@Override public void onChildRemoved(DataSnapshot dataSnapshot) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
Usuario u = dataSnapshot.getValue(Usuario.class);
}
}
•Child Moved – Evento usado quando se trabalha com ordenação de dados
@Override public void onChildMoved(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
Usuario u = dataSnapshot.getValue(Usuario.class);
}
}
Autenticação
•Email e Senha
•Anônimo
•Google
•Facebook
•Twitter
•Github
•Custom
Autenticação
Firebase ref = new Firebase("https://URL-FIREBASE-APP");
Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
}
};
ref.authWithCustomToken("<token>", authResultHandler);
ref.authAnonymously(authResultHandler);
ref.authWithPassword("jenny@example.com", "correcthorsebatterystaple", authResultHandler);
// Autenticação com OAuth providers ("facebook", "github", "google", ou "twitter")
ref.authWithOAuthToken("<provider>", "<oauth-token>", authResultHandler);
Bônus
Cloudinary
O que é?
O Cloudinary é um serviço de gerenciamento de imagens e arquivos
na nuvem. Além de oferecer o serviço de hospedagem de imagens,
ele disponibiliza diversas manipulações, uso de efeitos, detecção
facial e muitos outros recursos para as imagens enviadas.
O que é preciso?
Cadastrar-se gratuitamente, o cadastro pode ser feito com uma conta
gratuita limitada.
https://cloudinary.com/users/register/free
Cloudinary
Configurando
compile 'com.cloudinary:cloudinary-android:1.4.1'
Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);
cloudinary.uploader().upload(inputStream, Collections.emptyMap());
Upload com parametros
Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);
cloudinary.uploader().upload(inputStream,
ObjectUtils.asMap("transformation",
new Transformation().width(800).height(600).crop("limit")));
Realizando upload()
Cloudinary
Buscando url de imagens
cloudinary.url().type("fetch").imageTag(“upload/finn.jpg");
Cloudinary
Buscando url de imagens utilizando parametros
cloudinary.url().transformation(new Transformation().gravity("face")
.radius(100).width(300).height(300).crop("crop"))
.imageTag(“upload/finn.png");
http://URL_CLOUDINARY/upload/c_crop,g_face,r_max,w_300,h_300/finn.png
Links
• JamDroidFirechat GitHub: github.com/ygorcesar/JamDroidFireChat
• Google Play: Link App na Google Play
• Firebase: https://www.firebase.com
• Firebase Docs: https://www.firebase.com/docs
• Cloudinary: http://cloudinary.com
• Cloudinary Github: Link Github Cloudinary
Obrigado!
Ygor César
ygorces4r
ygorcross@gmail.com

Mais conteúdo relacionado

Mais procurados

React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)Cezar Luiz
 
Aula 05/06 (Service)
Aula 05/06 (Service)Aula 05/06 (Service)
Aula 05/06 (Service)Ricardo Longa
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on GoogleAlvaro Viebrantz
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidAdriano Rocha
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Lucas Aquiles
 
Offline apps Using Ionic Framework and PouchDB
Offline apps  Using Ionic Framework and PouchDBOffline apps  Using Ionic Framework and PouchDB
Offline apps Using Ionic Framework and PouchDBAlvaro Viebrantz
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Maurício Linhares
 
GraphQL: Como começar a usar no seu projeto AGORA
GraphQL: Como começar a usar no seu projeto AGORAGraphQL: Como começar a usar no seu projeto AGORA
GraphQL: Como começar a usar no seu projeto AGORAMaira Bello
 
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...Max Claus Nunes
 
Controle de versão com Git e BitBucket
Controle de versão com Git e BitBucketControle de versão com Git e BitBucket
Controle de versão com Git e BitBucketMarcio Barbosa
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3Claudinei Brito Junior
 
Apresentação tdc como aproveitar os novos recursos do java ee 7
Apresentação tdc   como aproveitar os novos recursos do java ee 7Apresentação tdc   como aproveitar os novos recursos do java ee 7
Apresentação tdc como aproveitar os novos recursos do java ee 7Denis Silva
 

Mais procurados (20)

Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
 
React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)
 
Aula 05/06 (Service)
Aula 05/06 (Service)Aula 05/06 (Service)
Aula 05/06 (Service)
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
 
Grails
GrailsGrails
Grails
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2
 
Offline apps Using Ionic Framework and PouchDB
Offline apps  Using Ionic Framework and PouchDBOffline apps  Using Ionic Framework and PouchDB
Offline apps Using Ionic Framework and PouchDB
 
Python 06
Python 06Python 06
Python 06
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02
 
GraphQL: Como começar a usar no seu projeto AGORA
GraphQL: Como começar a usar no seu projeto AGORAGraphQL: Como começar a usar no seu projeto AGORA
GraphQL: Como começar a usar no seu projeto AGORA
 
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
Controle de versão com Git e BitBucket
Controle de versão com Git e BitBucketControle de versão com Git e BitBucket
Controle de versão com Git e BitBucket
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
 
Apresentação tdc como aproveitar os novos recursos do java ee 7
Apresentação tdc   como aproveitar os novos recursos do java ee 7Apresentação tdc   como aproveitar os novos recursos do java ee 7
Apresentação tdc como aproveitar os novos recursos do java ee 7
 

Semelhante a Construindo Apps Android com Firebase

TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...tdc-globalcode
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTRodrigo Cândido da Silva
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaKaio Valente
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaDaniel Faria Gomes
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureVitor Ciaramella
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Firebase dispensando o uso do tradicional backend parasincronização de dados
Firebase   dispensando o uso do tradicional backend parasincronização de dadosFirebase   dispensando o uso do tradicional backend parasincronização de dados
Firebase dispensando o uso do tradicional backend parasincronização de dadosFrancielly Moraes
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaCharles Kilesse
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 

Semelhante a Construindo Apps Android com Firebase (20)

Android + firebase
Android + firebaseAndroid + firebase
Android + firebase
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em Java
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows Azure
 
API Apontador
API ApontadorAPI Apontador
API Apontador
 
Vraptor
VraptorVraptor
Vraptor
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Firebase dispensando o uso do tradicional backend parasincronização de dados
Firebase   dispensando o uso do tradicional backend parasincronização de dadosFirebase   dispensando o uso do tradicional backend parasincronização de dados
Firebase dispensando o uso do tradicional backend parasincronização de dados
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completa
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Realizando testes A/B com serverless na CDN
Realizando testes A/B com serverless na CDNRealizando testes A/B com serverless na CDN
Realizando testes A/B com serverless na CDN
 
JQuery
JQuery JQuery
JQuery
 
PHP no Google AppEngine
PHP no Google AppEnginePHP no Google AppEngine
PHP no Google AppEngine
 

Construindo Apps Android com Firebase

  • 1. Firebase e Android Construindo aplicações Android com Firebase
  • 4. Firebase Banco em Tempo Real Autenticação de Usuário Host
  • 5. Firebase Banco em Tempo Real • NoSQL • Dados Armazenados em estrutura JSON • Suporte Offline • Pushes e Updates em milissegundos
  • 6. Firebase • Email e Senha • Provedores OAuth: • Google • Facebook • Twitter • Github • Customizada • Autenticação Anônima Autenticação de usuário
  • 7. Firebase Host • Facilidade no Deploy • Auto escalável • Gratuito(Até 100 conexões)
  • 8. Iniciando no Firebase Crie uma conta no Firebase: https://www.firebase.com/login 1 Crie seu primeiro App Firebase2
  • 11. Referência Firebase Firebase refUsers = new Firebase(”https://meuprimeiroapp.firebaseio.com/users/”); refUsers.child(”joao@mail.com”); Referência(”https://meuprimeiroapp.firebaseio.com/users/joao@mail.com”);
  • 12. Model public class Usuario{ private String email; private String nome; public Usuario() { } public Usuario(String email, String nome) { this.email = email; this.nome = nome; } public String getEmail() { return email; } public String getNome() { return nome; } } “jam@mail,com":{ "email": “jam@mail.com", "nome": “Android Jam" } Java Object Model JSON Object Tipos de Dados: • String • Boolean • Long • Double • Map<String, Object> • List<Object>
  • 13. Salvando Dados • setValue() – Salva ou sobrescreve um valor no path definido • updateChildren() – Atualiza algumas das chaves sem substituir todos os dados • push() – Adiciona para o Firebase gerando um um id único • runTransaction() – Usa transação do Firebase para evitar concorrência e dados que podem ser corrompidos
  • 14. Salvando Dados private void criarUsuario(String email, String nome){ Usuario user = new Usuario(email, nome); Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/") .child(email.replace(".", ",")); refUsers.setValue(user); } new Usuario().criarUsuario("androidjam@mail.com", "Android-Jam-2"); Map<String, Object> userName = new HashMap<>(); userName.put("nome", "AndroidJam"); refUsers.updateChildren(userName); refUsers.push(); refUsers.setValue(user); String key = refUsers.getKey(); refUsers.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData currentData) { currentData.child(user.email).setValue(user); return Transaction.success(currentData); } @Override public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) { //Commit na transaction } }); push()updateChildren() setValue() runTransaction()
  • 15. Salvando Dados O código onde criamos o usuário gerou a estrutura abaixo:
  • 16. Buscando e monitorando Dados • Ao adicionar o listener addValueEventListener é necessário implementar os métodos onDataChange() e onCancelled() Firebase refUserName = new Firebase("https://URL-FIREBASE-APP/users/" + "androidjam@mail,com/nome"); refUserName.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Log.d("FIREBASE", dataSnapshot.getValue().toString()); //dataSnapshot.getValue().toString == Android-Jam-2 } @Override public void onCancelled(FirebaseError firebaseError) { Log.d("FIREBASE", firebaseError.getMessage()); } });
  • 17. Buscando e monitorando Dados •Child Added – É disparado toda vez que é adicionado algum objeto no pai Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/"); mRefUsers.keepSynced(true); refUsers.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario usuario = dataSnapshot.getValue(Usuario.class); } } • Ao adicionar o listener addChildEventListener é necessário implementar os métodos onChildAdded(), onChildChanged(), onChildRemoved() e onChildMoved() esse listener é usado geralmente para obter uma lista de itens no Firebase
  • 18. Buscando e monitorando Dados •Child Changed – Ocorre toda vez que um filho ou um descendente é alterado @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); } } •Child Removed – Disparado toda vez que um filho é removido podendo-se obter o filho removido @Override public void onChildRemoved(DataSnapshot dataSnapshot) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); } } •Child Moved – Evento usado quando se trabalha com ordenação de dados @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); } }
  • 20. Autenticação Firebase ref = new Firebase("https://URL-FIREBASE-APP"); Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() { @Override public void onAuthenticated(AuthData authData) { } @Override public void onAuthenticationError(FirebaseError firebaseError) { } }; ref.authWithCustomToken("<token>", authResultHandler); ref.authAnonymously(authResultHandler); ref.authWithPassword("jenny@example.com", "correcthorsebatterystaple", authResultHandler); // Autenticação com OAuth providers ("facebook", "github", "google", ou "twitter") ref.authWithOAuthToken("<provider>", "<oauth-token>", authResultHandler);
  • 22. Cloudinary O que é? O Cloudinary é um serviço de gerenciamento de imagens e arquivos na nuvem. Além de oferecer o serviço de hospedagem de imagens, ele disponibiliza diversas manipulações, uso de efeitos, detecção facial e muitos outros recursos para as imagens enviadas. O que é preciso? Cadastrar-se gratuitamente, o cadastro pode ser feito com uma conta gratuita limitada. https://cloudinary.com/users/register/free
  • 23. Cloudinary Configurando compile 'com.cloudinary:cloudinary-android:1.4.1' Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL); cloudinary.uploader().upload(inputStream, Collections.emptyMap()); Upload com parametros Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL); cloudinary.uploader().upload(inputStream, ObjectUtils.asMap("transformation", new Transformation().width(800).height(600).crop("limit"))); Realizando upload()
  • 24. Cloudinary Buscando url de imagens cloudinary.url().type("fetch").imageTag(“upload/finn.jpg");
  • 25. Cloudinary Buscando url de imagens utilizando parametros cloudinary.url().transformation(new Transformation().gravity("face") .radius(100).width(300).height(300).crop("crop")) .imageTag(“upload/finn.png"); http://URL_CLOUDINARY/upload/c_crop,g_face,r_max,w_300,h_300/finn.png
  • 26. Links • JamDroidFirechat GitHub: github.com/ygorcesar/JamDroidFireChat • Google Play: Link App na Google Play • Firebase: https://www.firebase.com • Firebase Docs: https://www.firebase.com/docs • Cloudinary: http://cloudinary.com • Cloudinary Github: Link Github Cloudinary