SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Android + Firebase
Ana Coimbra
Gomes
Android & Web Dev
@anacoimbrag
ana.coimbra.gomes@gmail.com
(31) 9 9248-2436
Firebase?
Libs: Hate & Love
Play Store: https://goo.gl/qZCR5r
Github: https://github.com/anacoimbrag/Android-Firebase
Tudo pronto?
Vamos lá!
Configuração Inicial
Configuração Inicial
Configuração Inicial
Configuração Inicial
Em <project>/build.gradle, adicionar:
buildscript {
dependencies {
classpath 'com.google.gms:google-services:3.1.0’
}
}
Em <project>/<app-module>/build.gradle, adicionar, no final do arquivo:
apply plugin: ‘com.google.gms.google-services’
Em Application.java:
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
}
Configuração Inicial
Autenticação
• Importante saber a identidade do usuário
• Manter segurança
• Recursos:
• Login por e-mail e senha
• Login por redes sociais (Google, Facebook, etc.)
• Login personalizado
• Login anônimo
compile 'com.google.firebase:firebase-auth:10.2.1'
Autenticação - Login
LoginActivity.java
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Open MainActivity
} else {
// Handle Error
}
}
});
private FirebaseAuth auth = FirebaseAuth.getInstance();
Autenticação – Recuperar Senha
RecoverPasswordActivity.java
private FirebaseAuth auth = FirebaseAuth.getInstance();
auth.sendPasswordResetEmail(email)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// Show Dialog
}
});
Autenticação – Registrar Usuário
RegisterUserActivity.java
private FirebaseAuth auth = FirebaseAuth.getInstance();
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser firebaseUser = task.getResult().getUser();
uploadPicture(firebaseUser);
} else {
// Handle error
}
}
});
Armazenamento
• Criado para armazenar arquivos gerado pelos usuários
• Upload e download seguros
compile 'com.google.firebase:firebase-storage:10.2.1'
Armazenamento
RegisterUserActivity.java
FirebaseStorage storage = FirebaseStorage. getInstance();
StorageReference imagesRef =
storage.getReference().child( "images");
UploadTask uploadTask =
imagesRef.child(fUser.getUid()).putFile( imgUri);
uploadTask.addOnCompleteListener( new
OnCompleteListener<TaskSnapshot>(){
@Override
public void onComplete(@NonNull Task<TaskSnapshot> task){
if (task.isSuccessful()) {
User user = new User(fUser.getUid(), name, email,
task.getResult().getDownloadUrl().toString(), interests);
// Register user
}
}
});
Banco de dados
• Banco de dados em tempo real disponível e
sincronizado para todos os usuários
• NoSQL, Não relacional, Json
• Características:
○ Tempo real
○ Off-line
○ Acessível em dispositivos clientes
compile 'com.google.firebase:firebase-database:10.2.1'
Banco de dados - Salvar
RegisterUserActivity.java
FirebaseDatabase database = FirebaseDatabase. getInstance();
DatabaseReference userRef = database.getReference( "users");
userRef.child(user.getUid()).setValue(user.toMap());
DatabaseReference libsRef = database.getReference( "libs");
Library library = new Library(name, url, date, sdk, license, description);
libsRef.push().setValue(library)
.addOnCompleteListener( new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
finish();
}
}
});
AddLibActivity.java
Banco de dados - Recuperar
CardsFragment.java
libsRef.addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
GenericTypeIndicator<HashMap<String, Library>> t =
new GenericTypeIndicator<HashMap<String, Library>>() {};
libraries = dataSnapshot.getValue(t);
adapter.setData(libraries);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Handle Error
}
});
FirebaseDatabase database = FirebaseDatabase. getInstance();
DatabaseReference libsRef = database.getReference( "libs");
Banco de dados - Alterar
CardsFragment.java
@Override
public void cardSwipedLeft( int position) {
libsRef.child(adapter.getItem(position).getUid())
.child("users")
.child(user.getUid())
.setValue(false);
}
@Override
public void cardSwipedRight( int position) {
libsRef.child(adapter.getItem(position).getUid())
.child("users")
.child(user.getUid())
.setValue(true);
}
FirebaseDatabase database = FirebaseDatabase. getInstance();
DatabaseReference libsRef = database.getReference( "libs");
Analytics
• Medição de aplicativo
• Informações sobre o uso do aplicativo e o envolvimento do usuário
• Recursos:
○ Relatórios ilimitados
○ Segmentação do público-alvo
compile 'com.google.firebase:firebase-core:10.2.1'
Analytics
RegisterUserActivity.java
private FirebaseAnalytics firebaseAnalytics =
FirebaseAnalytics. getInstance(context);
private void registerToAnalytics() {
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.UserProperty. SIGN_UP_METHOD,
"email and password");
firebaseAnalytics.logEvent(FirebaseAnalytics.Event. SIGN_UP,
bundle);
}
Cloud Messaging
• Enviar mensagens de notificação para promover novas
interações e a retenção de usuários
• É possível enviar dados para segmentos de usuários e
separá-los por plataforma, por canal ou enviar individualmente
• Envio de mensagens pelo console ou por servidor próprio
compile 'com.google.firebase:firebase-messaging:10.2.1'
Cloud Messaging
CustomFirebaseInstanceIdService.java
public class CustomFirebaseInstanceIdService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId. getInstance().getToken();
// Send token to custom server
}
}
Cloud Messaging
CustomFirebaseMessagingService.java
public class CustomFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Intent notificationsIntent = new Intent(this, LoginActivity. class);
PendingIntent intent = PendingIntent. getActivity(this, 0,notificationsIntent,
PendingIntent. FLAG_CANCEL_CURRENT);
NotificationManager notificationManager =(NotificationManager)
getSystemService(Context. NOTIFICATION_SERVICE);
Bitmap icon = BitmapFactory. decodeResource(getResources(), R.drawable. ic_notification);
NotificationCompat.Builder builder = new NotificationCompat.Builder( this)
.setSmallIcon(R.drawable. ic_notification)
.setLargeIcon(icon)
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody())
.setVibrate(new long[]{0, 100, 1000})
.setContentIntent(intent)
.setAutoCancel( true);
notificationManager.notify(( int) new Date().getTime(), builder.build());
}
}
Crash Reporting (Beta)
• Relatórios de erro detalhados no aplicativo
• Agrupados por pilhas semelhantes e agrupados de acordo com
a gravidade sobre o impacto para o usuário
• É possível registrar eventos personalizados para reconhecer as
etapas que podem levar ao erro
compile 'com.google.firebase:firebase-crash:10.2.1'
App.java
FirebaseCrash. report(new Exception("App initialized"));
Crash Reporting (Beta)
AddLibActivity.java
FirebaseCrash. log("User entered wrong date format");
Crash Reporting (Beta)
Test Lab
• Testes do aplicativo em dispositivos hospedados nos
datacenters do Google
• Mostra capturas de tela e vídeo de utilização
• É possível integrar com sistemas de integração contínua
Test Lab
Hmm, Firebase!
https://firebase.google.com/
Thanks!

Mais conteúdo relacionado

Semelhante a Android Firebase Guide

Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi SaturninoLevi Saturnino
 
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
 
Introdução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvasIntrodução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvasGuilherme
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsNelson Glauber Leal
 
WebSiviu - Sistema de Informação sobre Violência Urbana.
WebSiviu - Sistema de Informação sobre Violência Urbana.WebSiviu - Sistema de Informação sobre Violência Urbana.
WebSiviu - Sistema de Informação sobre Violência Urbana.Gabriel Mariano
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIsDaniel Varanda
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Maurício Linhares
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Erisvaldo Junior
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Android com Firebase
Android com FirebaseAndroid com Firebase
Android com FirebaseRoberto Lopes
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteJohann Vivot
 

Semelhante a Android Firebase Guide (20)

Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi Saturnino
 
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
 
Introdução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvasIntrodução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvas
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
WebSiviu - Sistema de Informação sobre Violência Urbana.
WebSiviu - Sistema de Informação sobre Violência Urbana.WebSiviu - Sistema de Informação sobre Violência Urbana.
WebSiviu - Sistema de Informação sobre Violência Urbana.
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIs
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Google Play Services Rocks!!!
Google Play Services Rocks!!!Google Play Services Rocks!!!
Google Play Services Rocks!!!
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Android com Firebase
Android com FirebaseAndroid com Firebase
Android com Firebase
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonte
 

Android Firebase Guide

  • 2. Ana Coimbra Gomes Android & Web Dev @anacoimbrag ana.coimbra.gomes@gmail.com (31) 9 9248-2436
  • 4. Libs: Hate & Love Play Store: https://goo.gl/qZCR5r Github: https://github.com/anacoimbrag/Android-Firebase Tudo pronto? Vamos lá!
  • 8. Configuração Inicial Em <project>/build.gradle, adicionar: buildscript { dependencies { classpath 'com.google.gms:google-services:3.1.0’ } } Em <project>/<app-module>/build.gradle, adicionar, no final do arquivo: apply plugin: ‘com.google.gms.google-services’ Em Application.java: @Override public void onCreate() { super.onCreate(); FirebaseApp.initializeApp(this); }
  • 10. Autenticação • Importante saber a identidade do usuário • Manter segurança • Recursos: • Login por e-mail e senha • Login por redes sociais (Google, Facebook, etc.) • Login personalizado • Login anônimo compile 'com.google.firebase:firebase-auth:10.2.1'
  • 11. Autenticação - Login LoginActivity.java auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Open MainActivity } else { // Handle Error } } }); private FirebaseAuth auth = FirebaseAuth.getInstance();
  • 12. Autenticação – Recuperar Senha RecoverPasswordActivity.java private FirebaseAuth auth = FirebaseAuth.getInstance(); auth.sendPasswordResetEmail(email) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // Show Dialog } });
  • 13. Autenticação – Registrar Usuário RegisterUserActivity.java private FirebaseAuth auth = FirebaseAuth.getInstance(); auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser firebaseUser = task.getResult().getUser(); uploadPicture(firebaseUser); } else { // Handle error } } });
  • 14. Armazenamento • Criado para armazenar arquivos gerado pelos usuários • Upload e download seguros compile 'com.google.firebase:firebase-storage:10.2.1'
  • 15. Armazenamento RegisterUserActivity.java FirebaseStorage storage = FirebaseStorage. getInstance(); StorageReference imagesRef = storage.getReference().child( "images"); UploadTask uploadTask = imagesRef.child(fUser.getUid()).putFile( imgUri); uploadTask.addOnCompleteListener( new OnCompleteListener<TaskSnapshot>(){ @Override public void onComplete(@NonNull Task<TaskSnapshot> task){ if (task.isSuccessful()) { User user = new User(fUser.getUid(), name, email, task.getResult().getDownloadUrl().toString(), interests); // Register user } } });
  • 16. Banco de dados • Banco de dados em tempo real disponível e sincronizado para todos os usuários • NoSQL, Não relacional, Json • Características: ○ Tempo real ○ Off-line ○ Acessível em dispositivos clientes compile 'com.google.firebase:firebase-database:10.2.1'
  • 17. Banco de dados - Salvar RegisterUserActivity.java FirebaseDatabase database = FirebaseDatabase. getInstance(); DatabaseReference userRef = database.getReference( "users"); userRef.child(user.getUid()).setValue(user.toMap()); DatabaseReference libsRef = database.getReference( "libs"); Library library = new Library(name, url, date, sdk, license, description); libsRef.push().setValue(library) .addOnCompleteListener( new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { finish(); } } }); AddLibActivity.java
  • 18. Banco de dados - Recuperar CardsFragment.java libsRef.addValueEventListener( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { GenericTypeIndicator<HashMap<String, Library>> t = new GenericTypeIndicator<HashMap<String, Library>>() {}; libraries = dataSnapshot.getValue(t); adapter.setData(libraries); } @Override public void onCancelled(DatabaseError databaseError) { // Handle Error } }); FirebaseDatabase database = FirebaseDatabase. getInstance(); DatabaseReference libsRef = database.getReference( "libs");
  • 19. Banco de dados - Alterar CardsFragment.java @Override public void cardSwipedLeft( int position) { libsRef.child(adapter.getItem(position).getUid()) .child("users") .child(user.getUid()) .setValue(false); } @Override public void cardSwipedRight( int position) { libsRef.child(adapter.getItem(position).getUid()) .child("users") .child(user.getUid()) .setValue(true); } FirebaseDatabase database = FirebaseDatabase. getInstance(); DatabaseReference libsRef = database.getReference( "libs");
  • 20. Analytics • Medição de aplicativo • Informações sobre o uso do aplicativo e o envolvimento do usuário • Recursos: ○ Relatórios ilimitados ○ Segmentação do público-alvo compile 'com.google.firebase:firebase-core:10.2.1'
  • 21. Analytics RegisterUserActivity.java private FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics. getInstance(context); private void registerToAnalytics() { Bundle bundle = new Bundle(); bundle.putString(FirebaseAnalytics.UserProperty. SIGN_UP_METHOD, "email and password"); firebaseAnalytics.logEvent(FirebaseAnalytics.Event. SIGN_UP, bundle); }
  • 22. Cloud Messaging • Enviar mensagens de notificação para promover novas interações e a retenção de usuários • É possível enviar dados para segmentos de usuários e separá-los por plataforma, por canal ou enviar individualmente • Envio de mensagens pelo console ou por servidor próprio compile 'com.google.firebase:firebase-messaging:10.2.1'
  • 23. Cloud Messaging CustomFirebaseInstanceIdService.java public class CustomFirebaseInstanceIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { String refreshedToken = FirebaseInstanceId. getInstance().getToken(); // Send token to custom server } }
  • 24. Cloud Messaging CustomFirebaseMessagingService.java public class CustomFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Intent notificationsIntent = new Intent(this, LoginActivity. class); PendingIntent intent = PendingIntent. getActivity(this, 0,notificationsIntent, PendingIntent. FLAG_CANCEL_CURRENT); NotificationManager notificationManager =(NotificationManager) getSystemService(Context. NOTIFICATION_SERVICE); Bitmap icon = BitmapFactory. decodeResource(getResources(), R.drawable. ic_notification); NotificationCompat.Builder builder = new NotificationCompat.Builder( this) .setSmallIcon(R.drawable. ic_notification) .setLargeIcon(icon) .setContentTitle(remoteMessage.getNotification().getTitle()) .setContentText(remoteMessage.getNotification().getBody()) .setVibrate(new long[]{0, 100, 1000}) .setContentIntent(intent) .setAutoCancel( true); notificationManager.notify(( int) new Date().getTime(), builder.build()); } }
  • 25. Crash Reporting (Beta) • Relatórios de erro detalhados no aplicativo • Agrupados por pilhas semelhantes e agrupados de acordo com a gravidade sobre o impacto para o usuário • É possível registrar eventos personalizados para reconhecer as etapas que podem levar ao erro compile 'com.google.firebase:firebase-crash:10.2.1'
  • 26. App.java FirebaseCrash. report(new Exception("App initialized")); Crash Reporting (Beta) AddLibActivity.java FirebaseCrash. log("User entered wrong date format");
  • 28. Test Lab • Testes do aplicativo em dispositivos hospedados nos datacenters do Google • Mostra capturas de tela e vídeo de utilização • É possível integrar com sistemas de integração contínua