Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Construindo Aplicações Android com Firebase

Construindo Aplicações Android com Firebase

Palestra sobre Firebase para o Android Meetup BH

Felipe Arimateia

August 29, 2016
Tweet

More Decks by Felipe Arimateia

Other Decks in Technology

Transcript

  1. Firebase É uma plataforma mobile para auxiliar no desenvolvimento de

    aplicativos, sem precisar investir em uma estrutura complexa.
  2. Criando Projeto • Criar um projeto no Firebase Console •

    Adicionar um Android App • Faça o download do google-services.json • E copie para o diretório do módulo, normalmente é app/
  3. Adicionar SDK No build.gradle do diretório raiz adicionar o plugin

    do google-services buildscript { // ... dependencies { // ... classpath 'com.google.gms:google-services:3.0.0' } }
  4. Adicionar SDK • Adicionar o plugin e dependências no build.gradle

    • Para iniciar é recomendado adicionar o firebase-core • O core já inclui o serviço de Analytics. dependencies { // ... compile 'com.google.firebase:firebase-core:9.4.0' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services'
  5. O Analytics é o coração das aplicações de sucesso, através

    dele é possível conhecer e engajar os usuários.
  6. Enviando eventos private FirebaseAnalytics mFirebaseAnalytics; // Obtain the FirebaseAnalytics instance.

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); Bundle bundle = new Bundle(); bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id); bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name); bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image"); mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
  7. O Firebase Authentication oferece os seguintes serviços de autenticação: •

    Autenticação via e-mail e senha. • Redes Sociais: Google, Facebook, Twitter e Github. • Autenticação Anônima.
  8. Criando uma conta mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener( task -> { Log.d(TAG,

    "createUserWithEmail:onComplete:" + task.isSuccessful()); if (!task.isSuccessful()) { Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } // ... });
  9. Logando usuário mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(task -> { Log.d(TAG, "signInWithEmail:onComplete:" +

    task.isSuccessful()); if (!task.isSuccessful()) { Log.w(TAG, "signInWithEmail", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } // ... });
  10. AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull

    FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); } else { // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); } // ... } };
  11. Firebase Realtime Database é um banco de dados NoSQL, que

    sincroniza todos os clientes conectados em tempo real. • Tempo real • Off-line • Acesso direto via SDK Dependência: compile 'com.google.firebase:firebase-database:9.4.0'
  12. Estrutura { "users": { "alovelace": { "name": "Ada Lovelace", "contacts":

    { "ghopper": true }, }, "ghopper": { ... }, "eclarke": { ... } } }
  13. Tipo de dados • String • Long • Double •

    Boolean • Map <String, Object> • List<Object>
  14. Salvando dados @IgnoreExtraProperties public class User { public String username;

    public String email; public User() { // Default constructor required for calls to DataSnapshot.getValue(User.class) } } private void writeNewUser(String userId, String name, String email) { User user = new User(name, email); mDatabase.child("users").child(userId).setValue(user); }
  15. Escutando Dados ValueEventListener postListener = new ValueEventListener() { @Override public

    void onDataChange(DataSnapshot dataSnapshot) { // Get Post object and use the values to update the UI Post post = dataSnapshot.getValue(Post.class); // ... } @Override public void onCancelled(DatabaseError databaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); // ... } }; mPostReference.addValueEventListener(postListener);
  16. Ler dado uma vez final String userId = getUid(); mDatabase.child("users").child(userId).addListenerForSingleValueEvent(

    new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // Get user value User user = dataSnapshot.getValue(User.class); // ... } @Override public void onCancelled(DatabaseError databaseError) { Log.w(TAG, "getUser:onCancelled", databaseError.toException()); } });
  17. Firebase Storage proporciona o uploads e downloads de arquivos. •

    Robusto • Seguro • Escalável Dependiencias: compile 'com.google.firebase:firebase-storage:9.4.0' compile 'com.google.firebase:firebase-auth:9.4.0'
  18. Criando referência1 FirebaseStorage storage = FirebaseStorage.getInstance(); // Create a storage

    reference from our app StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>"); // Create a reference to "mountains.jpg" StorageReference mountainsRef = storageRef.child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' StorageReference mountainImagesRef = storageRef.child("images/mountains.jpg"); // While the file names are the same, the references point to different files mountainsRef.getName().equals(mountainImagesRef.getName()); // true mountainsRef.getPath().equals(mountainImagesRef.getPath()); // false 1 A URL pode ser obtida na seção Storage do Firebase console
  19. Upload O Firebase permite fazer o upload de stream, dados

    que estão na memória e arquivos locais. Uri file = Uri.fromFile(new File("path/to/images/rivers.jpg")); StorageReference riversRef = storageRef.child("images/"+file.getLastPathSegment()); uploadTask = riversRef.putFile(file); // Register observers to listen for when the download is done or if it fails uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle unsuccessful uploads } }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. Uri downloadUrl = taskSnapshot.getDownloadUrl(); } });
  20. Download O Firebase permite fazer o download para memória ou

    em um arquivo local. E ele também gera uma URL para compartilhamento. StorageReference islandRef = storageRef.child("images/island.jpg"); File localFile = File.createTempFile("images", "jpg"); islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { @Override public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { // Local temp file has been created } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
  21. Firebase Cloud Messaging (FCM) permite a troca de mensagens e

    notificações entre plataformas diferentes. • Direcionamento versátil de mensagens • Suporte a mensagens de dados e notificações • Mensagens ascendentes de aplicativos cliente Dependência: compile 'com.google.firebase:firebase-messaging:9.4.0'
  22. Configuração É possível gerenciar a criação e atualização de tokens

    criando um serviço que extenda de FirebaseInstanceIdService. E para processar as mensagens enviadas pelo FCM, é preciso criar um serviço que extenda de FirebaseMessagingService.
  23. Manifest <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> ... <service

    android:name=".MyFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>
  24. Obtendo token @Override public void onTokenRefresh() { // Get updated

    InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); }
  25. Processando mensagem @Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer):

    Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: " + remoteMessage.getFrom()); // Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); } // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
  26. O Firebase Crash Reporting cria relatórios de erro detalhados, ainda

    é um serviço beta. • Monitore erros fatais e não fatais • Colete os dados necessários para diagnosticar problemas • Integre ao Analytics Dependência: compile 'com.google.firebase:firebase-crash:9.4.0'