Analytics

1 nov, 2017

App Android com Firebase – Analytics e Crashes

Publicidade

Recentemente iniciei uma série de artigos sobre a plataforma Firebase para Android, e hoje trago mais um, desta vez falando sobre a API de Analytics e de Crash Reporting deles.

Para quem não está acostumado com o termo, analytics é basicamente o registro e análise de dados dos seus usuários durante o uso de seu software. Ter uma boa ferramenta de analytics é essencial para entender o seu público e conseguir engajá-lo cada vez mais. Um público engajado tende a realizar comportamentos que você deseja, como adquirir seus produtos, fazer upgrades ou até mesmo recomendar seu software/app para amigos.

Já Crash Reporting, é o ato de registrar todos os ‘crashes’ do seu app nos dispositivos dos usuários, para entender o que está acontecendo e poder tomar providências para corrigir estas falhas. Sabe quando dá aquela mensagem de “O app parou!”? Pois é, o Crash Reporting te ajuda a descobrir que está acontecendo isso com seus usuários e dá muitas pistas da causa desses crashes.

Pré-requisitos

Este tutorial exige que você tenha um projeto Android criado e funcionando no Android Studio. Minha sugestão é que você realize o primeiro artigo da série, onde criei um app que tem apenas uma tela de login e permite o cadastro de usuários para posterior autenticação. Ele não faz nada demais ainda, mas já nos permitirá analisar o comportamento dos usuários que, por enquanto, sou apenas eu.

Outro ponto importante de ler o artigo introdutório desta série, é entender o que é a plataforma Firebase, como criar uma conta gratuita e como funciona o modus operandi dela.

Embora alguns possam acreditar que colocar coleta de dados nesta fase do desenvolvimento é inútil, eu discordo. Quanto antes você começar a coletar dados dos seus usuários, melhor. E colocando nessa etapa do desenvolvimento, você evita se esquecer, já cria o hábito de coletar dados e terá um histórico completo assim que tiver tempo para analisar o resultado do seu trabalho duro.

#1 – Firebase Analytics

Existem diversas plataformas para coleta e análise de dados, como o Mixpanel, que eu já usei é excelente, mas hoje usaremos o Google Firebase. É importante que você já tenha uma conta criada no Firebase Console e um projeto ativo, que no meu caso é o ForcaVendas.

Firebase console

Agora abra o seu projeto de app no Android Studio e no meu Tools > Firebase, você abrirá o Firebase Assistant, com todas as opções de APIs que ele possui.

Selecione a opção Analytics e você deverá ver a tela abaixo:

Firebase Analytics

No meu caso, o passo 1 está marcado como “Connected”, pois eu já me conectei a minha conta do Firebase no primeiro artigo desta série. Caso o seu tenha um botão para conectar no lugar, você terá de fazer todo um passo-a-passo que é bem simples, porém, necessário.

Como eu já possuo uma conta no Firebase, vou partir para o passo 2, clicando no botão “Add Analytics to your app”, que abrirá um popup pedindo para aceitar algumas dependências novas no projeto. Tudo muito rápido e simples.

Uma vez com as dependências instaladas, é muito simples sair usando a ferramenta de Analytics no Firebase para capturar eventos dos usuários no seu app, que é o que faremos agora!

#2 – Capturando eventos

Você pode capturar todo tipo de ação do usuário no seu app para entender o comportamento dele. Muitas vezes é função do desenvolvedor apenas coletar os dados e cabe a um profissional de marketing digital, de UX, ou ambos, analisá-los, para propor mudanças no app visando melhorar a experiência do usuário como um todo. Geralmente são usadas ferramentas de marketing chamadas “funis de conversão”, que servem para analisar o fluxo de ações que os usuários realizam até comprarem seu produto ou executarem uma ação que você deseja muito.

Como nosso app até o momento possui poucas funcionalidades, podemos pensar em um funil de conversão bem simples: de todos os usuários que entram no app, quantos decidem se cadastrar e quantos de fato conseguem se cadastrar? Aqui, considerarei usuários anônimos como o topo do meu funil (a boca, maior parte), usuários que clicam no botão Registrar como meio do meu funil (anônimos com intenção de cadastro) e novos cadastros realizados como a base do meu funil (a menor parte).

O objetivo do funil é medir as conversões, sendo usuários anônimos que viram novos cadastros a definição de ‘conversão’ neste caso. Sendo assim, precisamos coletar dados de três momentos distintos.

Primeiro, para permitir que o Firebase Analytics passe a funcionar no seu app, vamos começar adicionando a seguinte variável no topo da Activity que vamos coletar dados, neste caso a LoginActivity:

private FirebaseAnalytics mFirebaseAnalytics;

Depois, no evento onCreate desta mesma Activity, vamos inicializar o nosso objeto mFirebaseAnalytics:

mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

As visualizações e transições de tela são automaticamente rastreadas pelo Firebase Analytics, então não há nada que precisamos fazer em relação ao screenview da tela de login por usuários anônimos.

No entanto, precisamos saber quando houve o clique no botão “Registrar”. Para capturar este clique, vamos na LoginActivity, bem no trecho de código que efetua o onClick, para adicionar o código de rastreamento:

Button mSignUpButton = (Button) findViewById(R.id.email_sign_up_button);
mSignUpButton.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View view) {
           Bundle bundle = new Bundle();
           mFirebaseAnalytics.logEvent("RegistrarClick", bundle);
           attemptLoginOrRegister(true);
     }
});

O objeto Bundle permite que a gente adicione propriedades a este ‘evento’, mas aqui decidi por apenas registrar o evento em si como o nome ‘RegistrarClick’. Essa linha de código é interessante de ser colocada em todos os botões que você julga importantes no seu app, para entender se os usuários estão utilizando-os. Quando você detecta que botões importantes (como o botão de fazer Upgrade) não estão sendo utilizados, é hora de repensar o local onde estão, a cor e forma que possuem ou o texto contido neles. Somente com dados analíticos e vários testes é que é possível tirar essas conclusões.

Mas depois do usuário clicar no botão de Registrar, eu quero coletar o evento se de fato ele conseguiu realizar o cadastro. Isso porque podem haver erros no cadastro, como campos faltantes ou senha muito fraca que impedem o visitante anônimo de converter em usuário identificado. Para mapear este segundo evento, basta modificarmos o método attemptLoginOrRegister da LoginActivity, mais especificamente o ‘if(isNewUser)’:

if(isNewUser) {
   mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
      @Override
      public void onComplete(@NonNull Task<AuthResult> task) {
         showProgress(false);
         FirebaseUser user = task.getResult().getUser();
         Bundle bundle = new Bundle();
         if(user != null) {
            bundle.putString("email", email);
            mFirebaseAnalytics.logEvent("RegistrarSucesso", bundle);
            Toast.makeText(getApplicationContext(), "Usuário cadastrado com sucesso. Agora você pode se autenticar com suas credenciais!", Toast.LENGTH_LONG).show();
         }else{
            bundle.putString("email", user.getEmail());
            bundle.putString("senha", password);
            mFirebaseAnalytics.logEvent("RegistrarFalha", bundle);
            Toast.makeText(getApplicationContext(), "Houve um erro noseu cadastro, tente novamete mais tarde!", Toast.LENGTH_LONG).show();
         }
      }
   });
}

Com isso, temos todos os dados que precisamos para entender se os usuários anônimos, após manifestarem seu interesse em se cadastrar, estão conseguindo de fato. Note que armazenei dois eventos diferentes aqui: o de sucesso no registro (salvando o e-mail do usuário que recém se cadastrou) e outro de falha, armazenando o e-mail e senha, para entendermos porque o Firebase não permitiu esse cadastro.

Por que ele rejeitaria um cadastro? Existem diversas políticas e validações envolvidas que o Google Firebase pode fazer em cima de suas tentativas de cadastro como força de senha, formato de email, etc.

Agora teste o seu app e brinque um pouco com ele para gerar um pouco de dados para uma análise posterior.

#3 – Analisando os dados

Agora que temos eventos registrados e dados coletados, vá até o Firebase Console, acesse seu projeto e depois selecione a opção Analytics no menu lateral esquerdo. É importante ressaltar que os dados não são exibidos real-time aqui, e é possível que demorem para ser exibidos, até um dia, então não se preocupe.

Analytics Dashboard

Uma vez que os dados já estejam disponíveis para visualização, você pode criar filtros, acompanhar conversões, analisar cohorts, tempo de visita em cada tela, além de muitos dados demográficos, tais como:

  • Porcentagem de usuários por versões do Android
  • Porcentagem de usuários por aparelho
  • Sexo dos usuários
  • Localização geográfica dos usuários
  • Idade
  • Categorias de interesse

E isso só citando as informações que aparecem no dashboard. Existe muito mais coisas interessantes para se explorar nesse ferramenta de analytics. Quem já conhece o Google Analytics, que é a ferramenta mais usada na web para acompanhar os dados analíticos de websites e sistemas web, vai se sentir em casa aqui.

#4 – Firebase Crash Reporting

Além dos eventos que queremos coletar para entender o comportamento dos nossos usuários, é importantíssimo saber quando o app para de funcionar nos dispositivos deles, visando entender as limitações que podem estar prejudicando a experiência, as falhas que você pode ter deixado para trás sem querer ou até mesmo como está a qualidade geral do seu app.

Para ativar o Crash Reporting do Firebase é muito simples. No Android Studio, vá no menu Tools > Firebase e o Firebase Assistant se abrirá. Escolha a opção Crash Reporting.

Firebase Crash Reporting

Minha conta do Firebase já está conectada e, à essa “altura do campeonato”, você já deve saber como criar a sua, caso ainda não tenha feito. Clique no botão “Add Crash Reporting to your app” e aceite a instalação das dependências necessárias.

O recurso de Crash Reporting funciona automaticamente para exceções não tratadas, e você pode manualmente registrar exceções tratadas, se assim desejar, para entender o comportamento do usuário ou as exceções mais disparadas, para tomar medidas quanto a isso.

Enviar exceções manualmente para o Crash Report é simples como a linha abaixo demonstra, onde ex é o objeto de exceção capturado:

FirebaseCrash.report(ex);

Para poder ver um crash facilmente no Firebase Console, experimente rodar o seu app e antes de realizar um login ou cadastro, desligue sua Internet para que não seja possível se comunicar com a nuvem do Google Firebase. Certamente seu app vai quebrar e um crash será registrado no Firebase Console; não instantaneamente, mas em breve.

Crash

Caso esteja tendo problemas para rastrear seus crashes em produção, é sugerido dar uma lida nesta página.

O Google está migrando sua ferramenta de análise de crashes para o Crashlytics, uma plataforma focada nesse tipo de serviço. Então, no futuro, talvez seja mais interessante para você deixar de usar os relatórios de crashes do Firebase e passar a usar esta outra ferramenta.

Espero que tenha gostado do artigo, e até a próxima!