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

Android Training Program - Portugal, Aula 7

ATP Portugal
December 02, 2020

Android Training Program - Portugal, Aula 7

Aula #7 Firebase 🔥

E se tu conseguires criar uma aplicação do zero, com autenticação por redes sociais, base de dados online e até alojamento web, apenas por incluíres algumas bibliotecas?

- Introdução às funcionalidades do Firebase
- Autenticação com Google
- Realtime Database
- Cloud Firestore

ATP Portugal

December 02, 2020
Tweet

More Decks by ATP Portugal

Other Decks in Education

Transcript

  1. Android
    Training
    Program
    PORTUGAL
    Aula #7
    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
    ● Introdução ao Firebase
    ● Autenticação
    ● Firestore
    ● Realtime Database
    ● 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-aula7

    View Slide

  11. Resumo da Aula #6

    View Slide

  12. Como utilizar?
    Importar a biblioteca
    Room
    Resto da aplicação
    Data Access Object
    Entidades
    Obter os DAOs
    Obter as entidades da BD
    Persistir os dados para a BD
    get / set valores

    View Slide

  13. CameraX
    β
    Sistema de add-ons
    Consistência em todos os
    diapositivos
    Funciona com 94% dos
    Android 5.0+

    View Slide

  14. CameraX
    β
    Captura
    Análise de imagem
    Pré-visualização
    Casos de uso
    https://developer.android.com/training/camerax

    View Slide

  15. Compose
    ● Forma inovadora de criar layouts nativos (em Android)
    ● Permite construir componentes gráficos de forma declarativa
    ● Interoperável com os componentes nativos
    ● Reduz a quantidade de código necessário para criar interfaces gráficas
    ● Tira partido das vantagens de Kotlin para facilitar a escrita de código
    α

    View Slide

  16. Aula #7

    View Slide

  17. Firebase

    View Slide

  18. “O Firebase é uma plataforma móvel (Android, iOS e web) da Google que ajuda a
    desenvolver aplicações de grande qualidade rapidamente e permite crescer os
    negócios.“
    O que é o Firebase?

    View Slide

  19. Compatível com

    View Slide

  20. ● Criar rapidamente aplicações, sem gerir uma infraestrutura
    ○ O Firebase oferece funcionalidades como analytics, bases de dados,
    mensagens e relatórios de falhas, que permitem agir rapidamente e
    concentrar nos utilizadores
    Firebase

    View Slide

  21. ● Apoiado pela Google, confiado pelas aplicações de topo
    ○ O Firebase é construído sobre a infraestrutura da Google e escala
    automaticamente, mesmo para aplicações grandes.
    Firebase

    View Slide

  22. ● Uma plataforma, com produtos que funcionam melhor juntos
    ○ Os produtos do Firebase funcionam individualmente, mas partilham
    dados e ‘insights’, de modo a que funcionem ainda melhor quando
    juntos.
    Firebase

    View Slide

  23. 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

  24. 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

  25. 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

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

    View Slide

  27. 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

  28. dependencies {
    implementation platform('com.google.firebase:firebase-bom:26.1.0')
    // Por utilizarmos o Bill of Materials (BoM) , não precisamos de declarar as versões
    das outras bibliotecas
    implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    Como utilizar?
    Importar a biblioteca
    app/build.gradle

    View Slide

  29. Vamos criar um
    projeto
    ‍‍

    View Slide

  30. Firebase
    Authentication

    View Slide

  31. View Slide

  32. 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

  33. FirebaseUI Authentication
    Diferentes formas de te autenticares

    View Slide

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

    View Slide

  35. buildscript {
    ...
    dependencies {
    classpath 'com.android.tools.build:gradle:4.2.0-alpha16'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath 'com.google.gms:google-services:4.3.4'
    }
    }
    Como utilizar?
    Importar a biblioteca
    build.gradle

    View Slide

  36. 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

  37. dependencies {
    implementation platform('com.google.firebase:firebase-bom:26.1.0')
    implementation 'com.google.firebase:firebase-auth-ktx'
    implementation 'com.firebaseui:firebase-ui-auth:6.4.0'
    }
    Como utilizar?
    Importar a biblioteca
    app/build.gradle

    View Slide

  38. android:id="@+id/sign_in"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    Como utilizar?
    Definir o botão de ação
    activity_login.xml

    View Slide

  39. findViewById(R.id.sign_in).setOnClickListener {
    val providers = arrayListOf(AuthUI.IdpConfig.GoogleBuilder().build())
    startActivityForResult(
    AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .build(),
    REQUEST_SIGN_IN)
    }
    Como utilizar?
    Definir o botão de ação
    LoginActivity.kt

    View Slide

  40. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_SIGN_IN) {
    val response = IdpResponse.fromResultIntent(data)
    if (resultCode == Activity.RESULT_OK) {
    val intent = Intent(this, MainActivity::class.java)
    intent.putExtra(EXTRA_USERNAME, FirebaseAuth.getInstance().currentUser)
    startActivity(intent)
    finish()
    }
    }
    }
    Como utilizar?
    Verificar se o utilizador foi autenticado com sucesso

    View Slide

  41. Firebase
    Realtime database

    View Slide

  42. View Slide

  43. Guarda e sincroniza os teus dados na nuvem através de uma base de dados
    NOSQL. A informação é sincronizada em tempo-real entre todos os clientes que
    se encontrem ligados e é mantida localmente, mesmo quando não tens acesso à
    rede.
    Firebase Realtime database

    View Slide

  44. ● Atualizações em tempo real
    ○ Em cada actualização da base de dados, todos os clientes que se encontrem online são
    notificados num espaço de milisegundos
    Firebase Realtime database

    View Slide

  45. ● Suporte offline
    ○ Os dados são guardados localmente até o telemóvel se ligar novamente à rede.
    ● Acessível a partir de qualquer dispositivo
    ● Escalável
    ○ Desenhado para ter a capacidade de processar todos os dados de uma aplicação, por mais
    pesados que possam ser.
    Firebase Realtime database

    View Slide

  46. ● Suporte offline
    ○ Os dados são guardados localmente até o telemóvel se ligar novamente à rede.
    ● Acessível a partir de qualquer dispositivo
    ● Escalável
    ○ Desenhado para ter a capacidade de processar todos os dados de uma aplicação, por mais
    pesados que possam ser.
    Firebase Realtime database

    Vamos chamar de
    versão 1.0

    View Slide

  47. Cloud
    Firestore

    View Slide

  48. View Slide

  49. Cloud Firestore
    ● Atualizações em tempo real
    ○ Em cada actualização da base de dados, todos os clientes que se encontrem online são
    notificados num espaço de milisegundos

    View Slide

  50. ● Suporte offline
    ○ Os dados são guardados localmente até o telemóvel se ligar novamente à rede.
    ● Acessível a partir de qualquer dispositivo
    ● Escalável
    ○ Desenhado para ter a capacidade de processar todos os dados de uma aplicação, por mais
    pesados que possam ser.
    Cloud Firestore

    View Slide

  51. ● Flexível
    ○ O modelo de dados suporta estruturas de dados hierárquicas. Podes guardar os teus dados
    em documentos (documents) e organizá-los por colecções (collections).
    ● Pesquisas complexas
    ○ As pesquisas são indexadas por predefinição. Podes carregar todo o conteúdo da base de
    dados ou filtrar por conteúdo específico.
    Cloud Firestore

    View Slide

  52. dependencies {
    implementation platform('com.google.firebase:firebase-bom:26.1.0')
    implementation 'com.google.firebase:firebase-firestore-ktx'
    }
    Como utilizar?
    Importar a biblioteca
    app/build.gradle

    View Slide

  53. private fun sendMessage(content: String) {
    val message = hashMapOf(
    "username" to deviceName(),
    "content" to content,
    "timestamp" to "${System.currentTimeMillis()}"
    )
    val db = Firebase.firestore
    val id: String = db.collection("collection_name").document().id
    db.collection("atp").document(id)
    .set(message)
    .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }
    .addOnFailureListener { e -> Log.w(TAG, "Error writing document. Error:$e") }
    }
    Como utilizar?
    Enviar dados
    ChatFragment.kt

    View Slide

  54. private fun sendMessage(content: String) {
    val message = hashMapOf(
    "username" to deviceName(),
    "content" to content,
    "timestamp" to "${System.currentTimeMillis()}"
    )
    val db = Firebase.firestore
    val id: String = db.collection("collection_name").document().id
    db.collection("atp").document(id)
    .set(message)
    .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }
    .addOnFailureListener { e -> Log.w(TAG, "Error writing document. Error:$e") }
    }
    Como utilizar?
    Enviar dados
    ChatFragment.kt

    View Slide

  55. private fun sendMessage(content: String) {
    val message = hashMapOf(
    "username" to deviceName(),
    "content" to content,
    "timestamp" to "${System.currentTimeMillis()}"
    )
    val db = Firebase.firestore
    val id: String = db.collection("collection_name").document().id
    db.collection("atp").document(id)
    .set(message)
    .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }
    .addOnFailureListener { e -> Log.w(TAG, "Error writing document. Error:$e") }
    }
    Como utilizar?
    Enviar dados
    ChatFragment.kt

    View Slide

  56. private fun sendMessage(content: String) {
    val message = hashMapOf(
    "username" to deviceName(),
    "content" to content,
    "timestamp" to "${System.currentTimeMillis()}"
    )
    val db = Firebase.firestore
    val id: String = db.collection("collection_name").document().id
    db.collection("atp").document(id)
    .set(message)
    .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }
    .addOnFailureListener { e -> Log.w(TAG, "Error writing document. Error:$e") }
    }
    Como utilizar?
    Enviar dados
    ChatFragment.kt

    View Slide

  57. private fun loadMessages() {
    val docs = Firebase.firestore.collection("atp").orderBy("timestamp")
    docs.addSnapshotListener { snapshot, e ->
    val messages = Message.toMessageList(snapshot.documents)
    adapter.submitList(messages)
    }
    }
    Como utilizar?
    Receber uma lista de dados
    ChatFragment.kt

    View Slide

  58. private fun loadMessages() {
    val docs = Firebase.firestore.collection("atp").orderBy("timestamp")
    docs.addSnapshotListener { snapshot, e ->
    val messages = Message.toMessageList(snapshot.documents)
    adapter.submitList(messages)
    }
    }
    Como utilizar?
    Receber uma lista de dados
    ChatFragment.kt

    View Slide

  59. private fun loadMessages() {
    val docs = Firebase.firestore.collection("atp").orderBy("timestamp")
    docs.addSnapshotListener { snapshot, e ->
    val messages = Message.toMessageList(snapshot.documents)
    adapter.submitList(messages)
    }
    }
    Como utilizar?
    Receber uma lista de dados
    ChatFragment.kt

    View Slide

  60. private fun loadMessages() {
    val docs = Firebase.firestore.collection("atp").orderBy("timestamp")
    docs.addSnapshotListener { snapshot, e ->
    val messages = Message.toMessageList(snapshot.documents)
    adapter.submitList(messages)
    }
    }
    Como utilizar?
    Receber uma lista de dados
    ChatFragment.kt

    View Slide

  61. VS

    View Slide

  62. https://firebase.google.com/docs/database/rtdb-vs-firestore

    View Slide

  63. 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

  64. Rosário Pereira
    Fernandes
    Firebase KTX:
    Porquê, O quê e
    Como?
    GDG Maputo
    GDE Firebase
    @_rpfernandes

    View Slide

  65. Abre o Android
    Studio e vamos
    começar a
    programar
    ‍‍

    View Slide

  66. VS
    Ronda 6

    View Slide

  67. val elapsed = measureTimeMillis {
    myCall()
    println("Measuring time via measureTimeMillis")
    }
    println(elapsed)
    Medir tempo de execução
    long startTime = System.currentTimeMillis();
    myCall();
    long stopTime = System.currentTimeMillis();
    System.out.println(stopTime - startTime);

    View Slide

  68. fun makeDog(
    name String,
    legs Int,
    color String,
    )
    Vírgula nos parâmetros
    void makeDog(
    String name,
    int legs,
    String color
    )

    View Slide

  69. fun makeDog(
    name String,
    legs Int,
    color String,
    )
    Vírgula nos parâmetros
    void makeDog(
    String name,
    int legs,
    String color
    )

    View Slide

  70. Natal
    Photo by Mel Poole Unsplash

    View Slide

  71. Regiões

    Permite criar zonas de
    código, demarcadas por
    comentários.
    // region
    ...
    // endregion

    View Slide

  72. Regiões

    Permite criar zonas de
    código, demarcadas por
    comentários.
    // region
    ...
    // endregion

    View Slide

  73. editorconfig.org
    ● Este ficheiro ajuda a manter consistência de estilos no código, para
    programadores a trabalhar no mesmo projeto em vários editores e
    IDE’s.
    ● Deve ser colocado na raiz do projeto
    ● Permite criar regras gerais ao projeto, ou específicas para um tipo de
    ficheiros

    View Slide

  74. editorconfig.org
    Exemplo
    # indicate this is the root of the project
    root = true
    [*]
    charset = utf-8
    indent_style = space
    indent_size = 4
    trim_trailing_whitespace = true
    insert_final_newline = true
    end_of_line = lf
    max_line_length = 140
    [*.{xml}]
    max_line_length = 100
    .editorconfig

    View Slide

  75. Trabalho Para Casa
    ‍‍

    View Slide

  76. ⚠ Não há trabalho de casa que amanhã há aula!

    View Slide

  77. View Slide

  78. Dúvidas?

    View Slide

  79. Continuamos a
    responder no
    discord

    View Slide

  80. Obrigado
    ‍♀

    View Slide

  81. Android
    Training
    Program
    PORTUGAL
    Aula #8
    Firebase
    Próxima aula: 03 de Dezembro

    View Slide