Alura > Cursos de Mobile > Cursos de Flutter > Conteúdos de Flutter > Primeiras aulas do curso Flutter: Firebase Crashlytics, gere relatórios de erro em tempo real

Flutter: Firebase Crashlytics, gere relatórios de erro em tempo real

Exceções e Crashlytics - Apresentação

[00:00:00] Olá, eu sou o Leo Marinho. Vamos começar esse curso de Flutter: Firebase Crashlytics, gere relatórios de erro em tempo real que é incrível, sou suspeito para falar. Ele é voltado quem quer aprender como utilizar uma ferramenta chamada Firebase Crashlytics. Bom, está aqui a tela do Crashlytics. Basicamente o Firebase Crashlytics é uma ferramenta criada pela Google para nós conseguirmos rastrear as exceções e os erros que ocorrem em aplicativos.

[00:00:27] Então podemos pegar aplicativos em Flutter ou Android, IOS, que sejam, mas no caso aqui vamos aplicar em Flutter no curso e monitorar as exceções que esse aplicativo pode ter. Então vamos forçar vários tipos de exceção, exceção de comunicação web, exceção de aplicativo, o aplicativo vai quebrar e vai fechar tudo, vai dar o maior caos.

[00:00:47] Vamos ver como configura o Crashlytics para cada cenário diferente de exceção para nós conseguirmos capturar um relatório super legal de erro. Então vou dar um spoiler aqui. Nós conseguimos vir no dashboard do Crashlytics e já dar uma olhada nos tipos de erros que o aplicativo vai registrar. Então é isso que vamos aprender a fazer ao longo do curso.

[00:01:10] Então nós podemos pegar um intervalo de datas e, em cima desse intervalo de datas, monitorar os erros que a nossa aplicação teve e quais usuários tiveram esse tipo de erro, qual foi o cenário que aconteceu aquele erro, quais variáveis estavam sendo passadas, quais valores, qual foi a ação que estava sendo executada no momento.

[00:01:31] Vamos aprender como guardar as zonas do aplicativo para poder registrar logs de erro de formas diferentes, personalizar logs de erros. Enfim, vamos fazer toda essa parte de rastreamento de erros, que é muito importante quando nós pensamos em entregar um aplicativo com qualidade ao usuário final.

[00:01:49] E também priorizar e entender quais são os cenários de bugs. Bug infelizmente acontece em praticamente em todas as aplicações, então nós conseguimos através do Crashlytics monitorar isso de uma maneira extremamente tranquila, extremamente rápida de fazer e com pouco código, que é o mais legal.

[00:02:08] Não tem nada extremamente complexo aqui. Com poucas linhas de código nós conseguimos mapear os lugares que são de maior interessante e mandar o relatório de erro para o nosso dashboard do Crashlytics. Então o único pré requisito que normalmente eu gosto de pedir e vou pedir nesse curso, é que você tenha feito o curso de Comunicação HTTP: Flutter com web API.

[00:02:30] Ou tenha bons conhecimentos de comunicação web com Flutter. Por quê? Porque nós vamos trabalhar em cima de erros HTTP e também em cima de erros de aplicativos, exceções de aplicativo e exceções de comunicação. Então é legal que você já tenha um domínio de Flutter, não seja o seu primeiro curso este e que você tenha no mínimo um curso de comunicação HTTP.

[00:02:51] Às vezes não precisa ter o curso, mas que você tenha um bom conhecimento sobre comunicação HTTP e como que nós fazemos requisições em API externas. Então te espero nesse curso, um forte abraço e até as próximas aulas.

Exceções e Crashlytics - Exceções, o que são?

[00:00:00] Sou eu de volta, ficou com saudade? Bom, nos vimos no último vídeo e agora eu quero te mostrar uma coisa super legal. Aqui nós vamos começar a encaminhar o conteúdo que vamos ver ao longo de todo esse curso. A primeira coisa que eu quero te mostrar é como nós trabalhamos com exceções e o que são exceções.

[00:00:19] Eu não vou chegar jogando um conceito que nós não vimos ainda. Então vamos lá, vamos revisar o que é exceção. Se você chegou até aqui, nós pressupomos que você fez o curso de HTTP, servidores HTTP e tratamento de erros no HTTP, mas caso você não tenha feito e chegou aqui já com algum conhecimento de Flutter e quer crescer, quer aprender essa parte de exceções, não tem problema.

[00:00:44] Nós vamos aprendendo ao longo do curso aqui e vamos desenvolvendo juntos. Então, vamos lá, eu baixei o projeto do aplicativo que nós vamos rodar nesse curso, o link dele do repositório para você baixar está em uma atividade chamada Configuração de Ambiente ou Configurar Ambientes, que está nessa aula. Um pouco antes desse vídeo aqui.

[00:01:03] Vai lá no final, tem um link para você baixar, baixa, extrai, coloca para rodar no IntelliJ IDEA ou no Visual Studio Code, o que você utilizar como interpretador de texto para rodar tal aplicação. Eu dei um play, rodei o Bytebank e vamos dar uma olhada agora em exceções.

[00:01:24] Exceção basicamente começa quando nós pensamos que algo pode dar errado, nada é exato, nós erramos. Nós seres humanos erramos e as máquinas que nós criamos erram também. Nós não podemos deixar que o usuário tenha um erro que ele não entendeu que foi um erro ou que ele não entendeu o que fez de errado que desencadeou aquilo

[00:01:45] Então nós precisamos tratar de alguma forma as coisas que são inconvenientes e que podem acontecer em casos excepcionais que nós não previmos, legal? Então tem certos pontos que dá para nós prevermos mais ou menos que ali é um ponto problemático. Por exemplo, quando nós comunicamos o nosso aplicativo com um API, com um servidor externo.

[00:02:05] As chances de isso dar problema são imensas, porque pode ter uma internet limitada, pode cair a internet, o servidor pode não responder, um servidor pode cair, a autenticação com o servidor pode entender errado, então tem uma série de coisas que podem dar problema.

[00:02:19] Esse é só um exemplo. Nós podemos ter incompatibilidade, por exemplo, do aplicativo com o sistema operacional. Às vezes o sistema operacional é mais antigo do que a versão que o aplicativo precisa. Ou ainda acabou a memória do celular, o espaço encheu e o aplicativo não consegue funcionar perfeitamente.

[00:02:32] Nós também podemos pensar que o aplicativo pode consumir mais memória RAM do que o disponível ou que o sistema operacional do celular esteja sobrecarregado com outras aplicações e sobre pouca memória RAM para o aplicativo.

[00:02:46] Então tem uma série de coisas que podemos ficar listando um bom tempo e que pode dar problema. Nós também temos que tratar esse tipo de coisa, afinal o usuário não sabe. Ele vai olhar o aplicativo e travou, travou por quê? Porque esse aplicativo é uma porcaria, fecha, desinstala e nem usa mais.

[00:03:02] Nós não podemos deixar isso acontecer. Então, vamos aprender um pouco sobre exceções. Eu vou te mostrar na prática agora ao invés de ficar falando. Então vou vir no código do Bytebank que nós vamos trabalhar aqui no curso. Vou entrar em transaction_form.

[00:03:18] No arquivo transaction_form, que está dentro da pasta lib, que está dentro da pasta screens, eu vou descer um pouco e tem uma parte super interessante aqui que é a que está no método _send. No meu aqui está na linha 132. Esse método _send envia para a API os dados que foram cadastrados no formulário de transação do aplicativo.

[00:03:42] Então nesse método _send nós temos catch. Se você reparar bem, nós temos aqui webClient.save.catchError. Geralmente nós trabalhamos com try e catch. Quando nós estamos fazendo requisição para servidor HTTP, igual é o caso aqui, nós não precisamos do try. A própria requisição nos dá a opção de um catch.

[00:04:03] Esse catch é para pegar os erros, legal? Então sempre que der uma coisa errada, vai ser abortado tudo que estava sendo feito e o catch vai receber uma informação do que deu errado exatamente. Esse catch recebe a informação através de uma variável, aqui no caso nós chamamos de “e”.

[00:04:21] Normalmente por padrão o pessoal coloca “e” ou “error”, não foge muito disso. Dentro desse “e” nós conseguimos ver o que deu de errado e nós podemos exibir uma mensagem de erro para o usuário, nós conseguimos tratar esse erro de uma maneira que dê para o usuário entender o que deu de errado e dê para nós fazermos alguma ação para amenizar.

[00:04:39] Resolver nós não vamos resolver, estourou o erro, mas nós conseguimos amenizar a situação ali na hora. Então, eu te mostrei uma forma que caso dê erro na requisição, nós vamos pegar esse erro. Então, essa é uma forma de tratar exceção.

[00:04:53] Tem outra forma também, nós podemos vir no transaction.webclient, que está dentro da pasta “HTTP > webclients” e nós conseguimos ver o seguinte, esse tipo aqui também, na linha 33, throw HttpException também é um tipo de exceção.

[00:05:12] Mas é um tipo de exceção diferente. Por quê? Lá nós pegamos uma exceção do aplicativo. Aconteceu, nós fizemos uma requisição web e estourou um erro. Aconteceu. Aqui não, aqui nós estamos dizendo para o aplicativo estourar um erro.

[00:05:29] Então nós chamamos um throw e passamos o tipo de exceção que queremos e o aplicativo vai estourar o erro. Então tem essas duas formas, ou você pegar um erro que estourou ou você faz um estouro de erro. Exceção, nós chamamos de exceção porque é um caso excepcional, aconteceu algo que não era a regra do que era para acontecer na hora.

[00:05:49] Então houve aquela exceção de comportamento, vamos dizer assim. Então vou te mostrar na prática rodando uma exceção. Eu abri o Bytebank, mas eu não comecei a rodar o servidor que esse aplicativo consome, então vou tentar fazer uma requisição e obviamente essa requisição não vai funcionar.

[00:06:04] Então vou fazer uma transferência de R$5.000,00, por exemplo, mandei transferir, vou passar a senha aqui que é 1000 do servidor e vou confirmar. Ele está enviando e olha só o que vai acontecer. Ele vai estourar uma exceção timeout submitting the transaction. Um timeout, ele não conseguiu, demorou tempo demais além do que deveria para enviar os dados e ele criou um erro para o usuário.

[00:06:30] Então isso foi uma exceção tratada e essa exceção aconteceu justamente nesse pedaço do webClientsave. Ele deu aqui um showFailureMessage, show timeout submitting the transaction, foi exatamente isso aqui. Foi uma exceção de HTTP. Então, pensando nisso, nós conseguimos entender o que são exceções e como conseguimos lidar com elas, tanto pegar quanto criar exceções.

[00:06:56] Mas agora nós temos que pensar uma coisa: e se os nossos dez mil usuários, cem usuários, estejam convivendo com erros na aplicação que não são erros que nós sabemos que existem, como pegamos esses erros exatamente? Aí nós vamos tratar isso e eu vou abordar isso no próximo vídeo. Fica aqui comigo, até lá.

Exceções e Crashlytics - Firebase e Crashlytics

[00:00:00] Eu estou te devendo uma resposta. No último vídeo eu te fiz a seguinte implicação, te dei aquela alfinetada. Beleza, podemos ter erros no aplicativo, nós conseguimos tratar e mostrar a mensagem de erro legal para o usuário. Até aí tudo bem.

[00:00:21] Mas, como nós sabemos que está acontecendo aquele erro, como corrigirmos para o usuário não ter mais que conviver com ele? Não é legal o aplicativo dando erro toda hora, por mais que nós tratamos, mostremos a mensagem corretamente, é uma coisa meio frustrante para o usuário.

[00:00:35] Acho que todo mundo concorda com relação a isso, é chato ter erros inesperados quando você está usando um aplicativo. Aí que está a coisa, como que nós conseguimos saber? Vamos ter que pegar o usuário e falar: “Usuário, nos avise toda vez que acontecer um erro”. Será que eles vão ter essa paciência ou será que eles só vão desinstalar?

[00:00:50] Alguns usuários talvez tenham, outros, não. A regra é que a maioria não tem paciência de ir lá e te avisar, até porque os canais de comunicação não são tão simples, tem que falar com equipe de desenvolvimento e tudo mais. Então, não é uma coisa que nós podemos contar.

[00:01:05] Aí que entra uma ferramenta super legal. Eu vou te mostrar aqui primeiro o Firebase. Se você ainda não conhece, o Firebase é um pacote de soluções da Google, então tem várias ferramentas dentro do Firebase que servem para várias coisas que adiantam a vida dos desenvolvedores para dispositivos móveis.

[00:01:26] Então acessa firebase.google.com ou digita Firebase no Google que ele vai aparecer para você. Aí que está a coisa, no que o Firebase pode nos ajudar? Eu vou vir na documentação do Firebase, então vem em documentos no superior da tela, se você estiver em português, ou docs se tiver em inglês.

[00:01:44] Aqui o Firebase mostra um pouco das coisas que ele tem para cada plataforma, IOS, Android, Unity e vamos descendo um pouco e vamos ver mais o Firebase por produto. Vamos ver o que o Firebase tem para nós. Na parte de criação de aplicativo ele tem Firestone, tem várias funcionalidades aqui para armazenamento de dados, funções na nuvem.

[00:02:07] Não é isso que nós queremos aqui, nós já temos um aplicativo e nós queremos melhorar a qualidade do aplicativo. Então essa sessão do meio é a que nós queremos. Na sessão do meio, a primeira coisa que aparece já é Crashlytics. O que é o Crashlytics? Crash é quando nós temos a quebra, nós falamos brincando que crashou a aplicação, deu um crash na aplicação.

[00:02:29] Os brasileiros adoram aportuguesar verbos em inglês que não existe. Então em cima do Crashlytics, que é uma solução do Firebase, nós conseguimos criar um dashboard. Então, o que acontece é que nós conseguimos registrar erros que acontecem nos aplicativos.

[00:02:46] Tanto erros de compatibilidade do aplicativo mesmo, sistema operacional, problemas internos entre a comunicação do aplicativo para o sistema, quanto erros HTTP web. Nós conseguimos registrar quando deu problema na transação, por exemplo.

[00:02:59] Isso é interessante para sabermos se a comunicação está funcionando perfeitamente, se nós conseguimos realmente manter o aplicativo em funcionamento bom. Até porque nós não conseguimos simular todos os cenários. Por mais que você teste, faz teste automatizado, teste em três, quatro, cinco dispositivos, uma coisa é você testar em cinco, outra coisa são cem mil pessoas usando.

[00:03:17] A chance de ter um dispositivo ali que não vai dar certo é grande e aí o Crashlytics pega essa exceção para nós. E aí está a grande coisa aqui que o Firebase nos dá. Então vamos abrir o Crashlytics e tem toda a documentação do Crashlytics explicando para o que ele serve, que ele gera relatório de falhas, que ele é em tempo real e tudo mais.

[00:03:42] Então sempre que dá um erro ele registra em tempo real aquele erro e manda para o dashboard. Tem um vídeo aqui e eu convido você a acessar a documentação . Assiste esse vídeo aqui, dá uma olhada, dá uma lida. Super vale, acho super legal. Tem uma documentação bem extensa aqui.

[00:04:05] Ele funciona tanto para IOS, quanto para Android, quanto para Unity e é super legal. Então é por aqui que nós vamos partir e vamos trabalhar em cima do Crashlytics para poder registrar erros que os nossos usuários possam encontrar. No próximo vídeo vamos aprender a instalar isso.

Sobre o curso Flutter: Firebase Crashlytics, gere relatórios de erro em tempo real

O curso Flutter: Firebase Crashlytics, gere relatórios de erro em tempo real possui 156 minutos de vídeos, em um total de 40 atividades. Gostou? Conheça nossos outros cursos de Flutter em Mobile, ou leia nossos artigos de Mobile.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Flutter acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas