Slide 1

Slide 1 text

Android Training Program PORTUGAL Aula #8 Firebase

Slide 2

Slide 2 text

● 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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

● 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

Slide 5

Slide 5 text

#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 ✅ ✅ ✅

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

http://bit.ly/atp2020-live

Slide 9

Slide 9 text

http://bit.ly/atp2020-codelabs

Slide 10

Slide 10 text

http://bit.ly/kahoot-aula8

Slide 11

Slide 11 text

Resumo da Aula #7

Slide 12

Slide 12 text

Compatível com

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Aula #8

Slide 20

Slide 20 text

Cloud Storage

Slide 21

Slide 21 text

● 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

Slide 22

Slide 22 text

● 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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

// 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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Como utilizar? Enviar um ficheiro

Slide 29

Slide 29 text

Crashlytics

Slide 30

Slide 30 text

● 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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Relatório de erro

Slide 36

Slide 36 text

Relatório de erro

Slide 37

Slide 37 text

Relatório de erro

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

// 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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Performance

Slide 42

Slide 42 text

● 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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Performance

Slide 47

Slide 47 text

Performance

Slide 48

Slide 48 text

Performance

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

Push notifications

Slide 51

Slide 51 text

● 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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Como utilizar? Personalizar a notificação AndroidManifest.xml

Slide 56

Slide 56 text

Como enviar?

Slide 57

Slide 57 text

Analytics

Slide 58

Slide 58 text

● 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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

Dashboard

Slide 61

Slide 61 text

Dashboard

Slide 62

Slide 62 text

Dashboard

Slide 63

Slide 63 text

Dashboard

Slide 64

Slide 64 text

Dashboard

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

VS Ronda 7

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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!

Slide 74

Slide 74 text

Natal Photo by Mel Poole Unsplash

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

Android Studio Database Inspector

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

de

Slide 79

Slide 79 text

debug

Slide 80

Slide 80 text

Trabalho Para Casa ‍‍

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

Dúvidas?

Slide 84

Slide 84 text

Continuamos a responder no discord

Slide 85

Slide 85 text

Obrigado ‍♀

Slide 86

Slide 86 text

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