$30 off During Our Annual Pro Sale. View Details »

Android Training Program - Portugal, Aula 8

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

ATP Portugal

December 03, 2020
Tweet

More Decks by ATP Portugal

Other Decks in Education

Transcript

  1. Android
    Training
    Program
    PORTUGAL
    Aula #8
    Firebase

    View Slide

  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

    View Slide

  3. Andres-Leonardo
    Martinez-Ortiz
    Google
    Carlos Mota
    Formador
    Renato Almeida
    Formador
    @davilagrau @cafonsomota @tallnato
    Equipa
    Daniela Ferreira
    Gestora de
    comunidades

    View Slide

  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

    View Slide

  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

    ✅ ✅

    View Slide

  6. Sumário
    Photo by Mika Baumeister on Unsplash
    ● Resumo da aula anterior
    ● Cloud Storage
    ● Crashlytics
    ● Performance
    ● Push notifications
    ● Analytics
    ● Kotlin para principiantes
    ● É Natal

    View Slide

  7. http://events.withgoogle.com/atp2020
    [email protected]
    http://bit.ly/atp2020-youtube
    http://bit.ly/atp2020-discord
    Links

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. Resumo da Aula #7

    View Slide

  12. Compatível com

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  19. Aula #8

    View Slide

  20. Cloud Storage

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  24. val storage = Firebase.storage
    Como utilizar?
    Utilizar referência

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  28. Como utilizar?
    Enviar um ficheiro

    View Slide

  29. Crashlytics

    View Slide

  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

    View Slide

  31. buildscript {
    dependencies {
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
    }
    }
    Como utilizar?
    Importar a biblioteca
    build.gradle

    View Slide

  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

    View Slide

  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

    View Slide

  34. view.findViewById(R.id.startTimer).setOnClickListener {
    throw RuntimeException("Deu erro ")
    }
    Como utilizar?
    Provocar um erro

    View Slide

  35. Relatório de erro

    View Slide

  36. Relatório de erro

    View Slide

  37. Relatório de erro

    View Slide

  38. try {
    methodThatThrows()
    } catch (e: Exception) {
    FirebaseCrashlytics.getInstance().recordException(e)
    // ... tratar da excepção
    }
    E ainda...
    Reportar um erro

    View Slide

  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

    View Slide

  40. FirebaseCrashlytics.getInstance().setUserId("12345")
    E ainda...
    Propriedades do utilizador

    View Slide

  41. Performance

    View Slide

  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

    View Slide

  43. buildscript {
    dependencies {
    classpath 'com.google.firebase:perf-plugin:1.3.4'
    }
    }
    Como utilizar?
    Importar a biblioteca
    build.gradle

    View Slide

  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

    View Slide

  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

    View Slide

  46. Performance

    View Slide

  47. Performance

    View Slide

  48. Performance

    View Slide

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

    View Slide

  50. Push
    notifications

    View Slide

  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

    View Slide

  52. buildscript {
    dependencies {
    classpath 'com.google.gms:google-services:4.3.4'
    }
    }
    Como utilizar?
    Importar a biblioteca
    build.gradle

    View Slide

  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

    View Slide

  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

    View Slide

  55. android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />
    Como utilizar?
    Personalizar a notificação
    AndroidManifest.xml

    View Slide

  56. Como enviar?

    View Slide

  57. Analytics

    View Slide

  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

    View Slide

  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

    View Slide

  60. Dashboard

    View Slide

  61. Dashboard

    View Slide

  62. Dashboard

    View Slide

  63. Dashboard

    View Slide

  64. Dashboard

    View Slide

  65. Manuel Ernesto
    Firebase Storage: o
    que é e como
    funciona?
    GDG Luanda
    GDG Lubango
    @manuelernest0

    View Slide

  66. VS
    Ronda 7

    View Slide


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

    View Slide

  68. val max = if (a > b) a else b
    Operador ternário
    String a = a > b ? a : b

    View Slide

  69. when (val response = httpRequest()) {
    is Success -> response.body()
    else -> throw Exception(response.status)
    }
    when… guardar numa variável

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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!

    View Slide

  74. Natal
    Photo by Mel Poole Unsplash

    View Slide

  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

    View Slide

  76. Android Studio
    Database Inspector

    View Slide

  77. LeakCanary

    https://square.github.io/leakcanary/
    Biblioteca que ajuda a
    encontrar e corrigir leaks
    de objetos na memória.

    View Slide

  78. de

    View Slide

  79. debug

    View Slide

  80. Trabalho Para Casa
    ‍‍

    View Slide

  81. Trabalho para casa
    ● Criar conta no Firebase
    ● Criar um projecto
    ● Explorar o Firebase

    View Slide

  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

    View Slide

  83. Dúvidas?

    View Slide

  84. Continuamos a
    responder no
    discord

    View Slide

  85. Obrigado
    ‍♀

    View Slide

  86. Android
    Training
    Program
    PORTUGAL
    Aula #9
    ML Kit: Machine Learning
    para iniciantes
    Próxima aula: 09 de Dezembro

    View Slide