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

Android Training Program - Portugal, Aula 8

9e9eb825c69d719f2d3c32bdd3bc971e?s=47 ATP Portugal
December 03, 2020

Android Training Program - Portugal, Aula 8

Aula #8 Firebase 🔥 (cont.)

Continuação da aula anterior

- Cloud Storage
- Crashlytics
- Performance
- Push notifications
- Analytics

9e9eb825c69d719f2d3c32bdd3bc971e?s=128

ATP Portugal

December 03, 2020
Tweet

Transcript

  1. Android Training Program PORTUGAL Aula #8 Firebase

  2. • Sejam excelentes uns para os outros • Fale mais

    alto se vir ou ouvir alguma coisa • O assédio não é tolerado • Pratique "Sim e" um ao outro Código de conduta Mais informações: http://bit.ly/2IhF0l3
  3. Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau

    @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
  4. • 12 aulas • 1h30 cada aula • ~1 aula

    por semana • 14 Outubro a 16 Dezembro • YouTube live • Suporte assíncrono contínuo via Discord/email • Todo o código disponível no GitHub Photo by Arif Riyanto on Unspla O programa
  5. #0 14 de Outubro Pronto para começar #1 21 de

    Outubro Bem-vindos ao Android #2 28 de Outubro Fundações I #3 04 de Novembro Fundações II #4 11 de Novembro Fundações III #5 18 de Novembro Listas, listas e mais listas #6 25 de Novembro Jetpack, Jetpack, Jetpack! #7 - #8 02 - 03 de Dezembro Firebase #9 - #10 09 - 10 de Dezembro MLKit & TensorFlow #11 16 de Dezembro Resumo Semana Semana Calendário ✅ ✅ ✅ ✅ Direto ✅ ✅ ✅
  6. Sumário Photo by Mika Baumeister on Unsplash • Resumo da

    aula anterior • Cloud Storage • Crashlytics • Performance • Push notifications • Analytics • Kotlin para principiantes • É Natal
  7. http://events.withgoogle.com/atp2020 ✉ atp-suporte@googlegroups.com http://bit.ly/atp2020-youtube http://bit.ly/atp2020-discord Links

  8. http://bit.ly/atp2020-live

  9. http://bit.ly/atp2020-codelabs

  10. http://bit.ly/kahoot-aula8

  11. Resumo da Aula #7

  12. Compatível com

  13. Constrói melhores aplicações Cloud Firestore Armazena e sincroniza dados a

    uma escala global Firebase ML Machine learning para programadores Cloud Functions Corre código de servidor sem gerir servidores Authentication Autentica utilizadores de forma simples e segura Hosting Distribui recursos web rapidamente e com segurança Cloud Storage Armazena e distribui ficheiros à escala da Google Realtime Database Armazena e sincroniza dados da aplicação em segundos
  14. Melhora a qualidade da aplicação Crashlytics Prioritiza e resolve problemas

    com relatórios poderosos e em tempo real Performance Monitoring Obtém informações sobre o desempenho da aplicação Test Lab Testa a tua aplicação em dispositivos alojados pela Google App Distribution Distribuí versões de pré-lançamento da aplicação a utilizadores específicos
  15. Cresce o teu negócio In-App Messaging Envolve os utilizadores activos

    com mensagens contextuais Google Analytics Obtém métricas gratuitas e ilimitadas Predictions Segmentação inteligente de utilizadores baseada no comportamento previsto A/B Testing Optimiza a experiência da aplicação através de experimentação Cloud Messaging Envia mensagens e notificações direcionadas Remote Config Modifica a tua aplicação sem lançar uma nova versão Dynamic Links Impulsiona o crescimento utilizado links directos
  16. FirebaseUI Authentication • Suporta: ◦ E-mail e palavra-chave ◦ Integração

    com Google, Apple, Facebook, Twitter e GitHub ◦ Autenticação via o número de telemóvel (SMS) ◦ Integração com sistemas de autenticação externos ◦ Autenticação anónima Diferentes formas de te autenticares
  17. FirebaseUI Authentication • Solução completa de UI ◦ É a

    forma recomendada para implementares o teu ecrã de login • Não precisas de te preocupar com nada ◦ Todos os fluxos de autenticação já se encontram implementados ◦ Só precisas de implementar a ação de clique no botão
  18. Realtime database Cloud Firestore Atualizações em tempo real ✅ ✅

    Suporte offline ✅ ✅ Presença ✅ ❌ Modelo de dados JSON Collections Pesquisa Limitada Permite filtros mais avançados Performance Regional Mundial Escalabilidade <200.000 ligações simultâneas Automática
  19. Aula #8

  20. Cloud Storage

  21. • O Cloud storage é um serviço de armazenamento poderoso,

    simples e barato desenvolvido para a escala da Google • Os SDK’s disponíveis adicionam a segurança da Google para as transferências dos ficheiros • É possível armazenar imagens, áudios, vídeos ou outros tipos de conteúdos Cloud Storage
  22. • Ativar o Storage na plataforma • Escolher a localização

    do bucket. ◦ Devemos escolher sempre a localização mais próxima dos nossos utilizadores. Antes de começar
  23. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-storage-ktx' } Como utilizar? Importar

    a biblioteca app/build.gradle
  24. val storage = Firebase.storage Como utilizar? Utilizar referência

  25. // Aponta para a referência raiz storageRef = storage.reference //

    Aponta para a pasta "images" imagesRef = storageRef.child("images") // Aponta para o ficheiro "images/space.jpg" val fileName = "space.jpg" spaceRef = imagesRef.child(fileName) // O caminho é "images/space.jpg" val path = spaceRef.path // O nome do ficheiro é "space.jpg" val name = spaceRef.name // Aponta para "images" imagesRef = spaceRef.parent Como utilizar? Utilizar referência
  26. imageRef = storageRef.child("images/image.jpg") val localFile = File.createTempFile("images", "jpg") islandRef.getFile(localFile).addOnSuccessListener {

    // Ficheiro no armazenamento interno criado }.addOnFailureListener { // Caso de erro } Como utilizar? Transferir um ficheiro para o armazenamento interno
  27. var file = Uri.fromFile(File("/storage/emulated/0/Download/fifi.jpg")) val riversRef = storageRef.child("images/${file.lastPathSegment}") uploadTask =

    riversRef.putFile(file) // Registar para ser notificado quando a transferência é terminada, ou ocorre um erro uploadTask.addOnFailureListener { // Quando ocorre um erro }.addOnSuccessListener { taskSnapshot -> // Quando a transferência é terminada com sucesso // taskSnapshot.metadata contém metadados tais como o tamanho, tipo de conteúdo, etc // ... } Como utilizar? Enviar um ficheiro
  28. Como utilizar? Enviar um ficheiro

  29. Crashlytics

  30. • Relatórios de falhas completos e em tempo real •

    Permite encontrar rapidamente a causa das falhas • As falhas são priorizadas de forma a permitir identificar o que corrigir primeiro • Alertas em tempo real Crashlytics
  31. buildscript { dependencies { classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1' } } Como utilizar?

    Importar a biblioteca build.gradle
  32. apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' //

    ou plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.gms.google-services' id 'com.google.firebase.crashlytics' } Como utilizar? Importar a biblioteca app/build.gradle
  33. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-crashlytics-ktx' } Como utilizar? Importar

    a biblioteca app/build.gradle
  34. view.findViewById<Button>(R.id.startTimer).setOnClickListener { throw RuntimeException("Deu erro ") } Como utilizar? Provocar

    um erro
  35. Relatório de erro

  36. Relatório de erro

  37. Relatório de erro

  38. try { methodThatThrows() } catch (e: Exception) { FirebaseCrashlytics.getInstance().recordException(e) //

    ... tratar da excepção } E ainda... Reportar um erro
  39. // Set a key to a string. FirebaseCrashlytics.getInstance().setCustomKey("str_key", "hello") //

    Set a key to a boolean. FirebaseCrashlytics.getInstance().setCustomKey("bool_key", true) // Set a key to an int. FirebaseCrashlytics.getInstance().setCustomKey("int_key", 1) // Set a key to an long. FirebaseCrashlytics.getInstance().setCustomKey("int_key", 1L) // Set a key to a float. FirebaseCrashlytics.getInstance().setCustomKey("float_key", 1.0f) // Set a key to a double. FirebaseCrashlytics.getInstance().setCustomKey("double_key", 1.0) E ainda... Chaves custom
  40. FirebaseCrashlytics.getInstance().setUserId("12345") E ainda... Propriedades do utilizador

  41. Performance

  42. • Mede automaticamente o tempo de arranque da aplicação, pedidos

    HTTP à rede, entre outros • Permite observar situações em que a aplicação possa ser mais rápida • Permite customizar os parâmetros a monitorizar da aplicação Performance
  43. buildscript { dependencies { classpath 'com.google.firebase:perf-plugin:1.3.4' } } Como utilizar?

    Importar a biblioteca build.gradle
  44. apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.firebase-perf' //

    ou plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.gms.google-services' id 'com.google.firebase.firebase-perf' } Como utilizar? Importar a biblioteca app/build.gradle
  45. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-perf-ktx' } Como utilizar? Importar

    a biblioteca app/build.gradle
  46. Performance

  47. Performance

  48. Performance

  49. val myTrace = FirebasePerformance.getInstance().newTrace("test_trace") myTrace.start() // Código a monitorizar myTrace.stop()

    Monitorização especifica
  50. Push notifications

  51. • Enviar notificações ou mensagens com dados • Permite direcionar

    as notificações para diferentes utilizadores de forma versátil • Permite enviar mensagens através dos clientes Push Notifications
  52. buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.4' } } Como utilizar?

    Importar a biblioteca build.gradle
  53. apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // ou plugins {

    id 'com.android.application' id 'kotlin-android' id 'com.google.gms.google-services' } Como utilizar? Importar a biblioteca app/build.gradle
  54. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-messaging-ktx' } Como utilizar? Importar

    a biblioteca app/build.gradle
  55. <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" /> Como utilizar?

    Personalizar a notificação AndroidManifest.xml
  56. Como enviar?

  57. Analytics

  58. • Camada sobre Google Analytics • Solução de analytics grátis

    e ilimitada • Permite reportar até 500 eventos distintos • Os relatórios ajudam a perceber o como os utilizadores se comportam, o que permite tomar decisões informadas sobre marketing e otimizações de performance Analytics
  59. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-analytics-ktx' } Como utilizar? Importar

    a biblioteca app/build.gradle
  60. Dashboard

  61. Dashboard

  62. Dashboard

  63. Dashboard

  64. Dashboard

  65. Manuel Ernesto Firebase Storage: o que é e como funciona?

    GDG Luanda GDG Lubango @manuelernest0
  66. VS Ronda 7

  67. Operador ternário String a = a > b ? a

    : b
  68. val max = if (a > b) a else b

    Operador ternário String a = a > b ? a : b
  69. when (val response = httpRequest()) { is Success -> response.body()

    else -> throw Exception(response.status) } when… guardar numa variável
  70. for (i in 1..max) { when (i) { i %

    2 -> break else -> continue } } when… break?... continue?
  71. for (i in 1..max) { when (i) { i %

    2 -> break else -> continue } } when… break?... continue? Apenas no Kotlin 1.4.20!
  72. fun some(arg1: Int, arg2: Int, arg3: Int) { // código

    incrível aqui } some(arg1 = 1, arg2 = 2, arg3 = 3) when… guardar numa variável
  73. fun some(arg1: Int, arg2: Int, arg3: Int) { // código

    incrível aqui } some(1, arg2 = 2, 3) when… guardar numa variável Apenas no Kotlin 1.4.20!
  74. Natal Photo by Mel Poole Unsplash

  75. Stetho Biblioteca que permite através das Google Developers Tools do

    Chrome, aceder à base de dados, pedidos de rede, etc, tudo através do browser. https://github.com/facebookarchive/stetho
  76. Android Studio Database Inspector

  77. LeakCanary https://square.github.io/leakcanary/ Biblioteca que ajuda a encontrar e corrigir leaks

    de objetos na memória.
  78. de

  79. debug

  80. Trabalho Para Casa ‍‍

  81. Trabalho para casa • Criar conta no Firebase • Criar

    um projecto • Explorar o Firebase
  82. Trabalho para casa • Criar um chat • Com a

    CameraX, tirar uma foto e enviar para o Storage • Lista com as fotos disponíveis no Storage
  83. Dúvidas?

  84. Continuamos a responder no discord

  85. Obrigado ‍♀

  86. Android Training Program PORTUGAL Aula #9 ML Kit: Machine Learning

    para iniciantes Próxima aula: 09 de Dezembro