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

Construindo Aplicações Android com Firebase

Construindo Aplicações Android com Firebase

Talk apresentada no Mobile Summit Brasil 2016. #MSBR16 #Firebase #Android

Felipe Arimateia

November 19, 2016
Tweet

More Decks by Felipe Arimateia

Other Decks in Technology

Transcript

  1. Felipe Arimatéia (Ari) Mobile Developer desde de 2010, organizador do

    Android Meetup BH, apaixonado por código e viciado em séries. @twiterdoari br.linkedin.com/in/felipearimateia
  2. Firebase É uma plataforma móvel que ajuda no desenvolvimento de

    aplicativos, na expansão da base de usuários e lucrar mais.
  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.8.0' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services'
  5. Firebase Analytics O Firebase Analytics é uma solução gratuita que

    fornece informações sobre o uso do seu aplicativo e engajamento do usuário.
  6. Principais Funcionalidades • Relatórios ilimitados até 500 eventos distintos •

    Segmentação de público-alvo. • Captura de eventos e propriedades do usuário automaticamente • Integração com outros serviço do Firebase
  7. 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);
  8. Firebase Realtime Database Firebase Realtime Database é um banco de

    dados NoSQL, onde os dados são armazenado em JSON e sincronizados com todos os clientes conectados em tempo real. dependencies { // ... compile 'com.google.firebase:firebase-database:9.8.0' }
  9. Principais Funcionalidades • Tempo Real • Persistência Offline • Acesso

    através de SDK e API Rest • Regras de acesso integrado ao serviço de autenticação.
  10. Tipos de Dados • String • Long • Double •

    Boolean • Map <String, Object> • List<Object>
  11. 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); }
  12. 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);
  13. 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()); } });
  14. Firebase Authentication O Firebase Authentication fornece um serviço de autenticação

    baseado em senha, provedores e customizados através de OAuth 2.0 e OpenID Connect. dependencies { // ... compile 'com.google.firebase:firebase-auth:9.8.0' }
  15. Principais Funcionalidades • Autenticação baseada em e-mail e senha •

    Integração com provedores: Google, Facebook, Twitter, Github • Autenticação Anônima • Integração com seu sistema de login existente. • FirebaseUI (beta)
  16. Criando uma conta private FirebaseAuth mAuth; // ... mAuth =

    FirebaseAuth.getInstance(); 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(); } // ... });
  17. 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(); } // ... });
  18. Escutando alterações na autenticação mAuthListener = new FirebaseAuth.AuthStateListener() { @Override

    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in } else { // User is signed out } // ... } };
  19. Firebase Storage O Firebase Storage você á capaz de realizar

    uploads e downloads para seus aplicativos do Firebase, independente da qualidade da sua rede. E com todo o suporte do Google Cloud Storage. dependencies { // ... compile 'com.google.firebase:firebase-storage:9.8.0' compile 'com.google.firebase:firebase-auth:9.8.0' }
  20. Principais Funcionalidades • Robusto, os uploads e downloads são executados

    em segundo plano e são retomados de onde forem interrompidos. • Seguro, integrado ao serviço de autenticação você pode limitar o acesso a determinados arquivos. • Escalável, respaldado pelo Google Cloud Storage você pode escalar a sua aplicação em segundos.
  21. 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"); 1. A URL pode ser obtida na seção Storage do Firebase console.
  22. 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(); } });
  23. 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) { String url = taskSnapshot.getDownloadUrl(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
  24. Firebase Cloud Messaging Firebase Cloud Messaging (FCM) permite a troca

    de mensagens e notificações entre diferentes plataformas. Assim você pode promover interações e retenção de usuários. dependencies { // ... compile 'com.google.firebase:firebase-messaging:9.8.0' }
  25. Principais Funcionalidades • Direcionamento versátil de mensagens, e integrado ao

    Analytics • Suporte a mensagens de dados e notificações • Mensagens ascendentes de aplicativos cliente
  26. Configuração É possível gerenciar a criação e atualização de tokens

    criando um serviço que estende de FirebaseInstanceIdService. E para processar as mensagens enviadas pelo FCM, é preciso criar um serviço que estende de FirebaseMessagingService.
  27. AndroidManifest <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>
  28. 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); }
  29. Processando mensagem @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 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()); } // ... }
  30. Firebase Crash Reporting (beta) O Crash Reporting cria relatórios de

    erro detalhados, classificados em fatais e não fatais. Os erros são agrupados em conjuntos de rastreamento de pilha similares e são organizados de acordo com a gravidade do impacto nos usuários. dependencies { // ... compile 'com.google.firebase:firebase-crash:9.8.0' }
  31. Principais Funcionalidades • Monitore erros fatais e não fatais •

    Colete os dados necessários para diagnosticar problemas • Integre ao Analytics
  32. Firebase Remote Config O Firebase Remote Config é um serviço

    de nuvem que permite alterar o comportamento e a aparência do aplicativo sem exigir que os usuários baixem uma nova atualização. dependencies { // ... compile 'com.google.firebase:firebase-config:9.8.0' }
  33. Principais Funcionalidades • Disponibilizar rapidamente alterações para a base de

    usuários do aplicativo • Personalizar o aplicativo para segmentos da base de usuários • Executar testes A/B para aprimorar o aplicativo
  34. Firebase Test Lab for Android O Firebase Test Lab for

    Android fornece infraestrutura baseada em nuvem para testar aplicativos Android. Você pode iniciar os testes do seu aplicativo em uma ampla variedade de dispositivos e configurações de dispositivo.
  35. Principais Funcionalidades • Teste em dispositivos reais • Realize testes

    no aplicativo, mesmo sem desenvolver nenhum. (Robo Test) • Integração do fluxo de trabalho
  36. Referências Firebase - https://firebase.google.com/ Android Meetup BH - https://www.meetup.com/pt-BR/android-meetup-bh/ Android

    Dev BR - http://slack.androiddevbr.org/ Youtube - https://www.youtube.com/user/Firebase Google Blog - https://firebase.googleblog.com/