Autores: Felipe Valio, Matheus Maaz & Rafael Alencar

Introdução

No desenvolvimento de produtos mobile é comum ser feito um aplicativo nativo para cada plataforma (iOS e Android). Isso traz muitas vantagens como melhor desempenho, usabilidade e adoção mais rápida de tecnologias mais recentes. Por outro lado, isto traz algumas desvantagens já que normalmente são feitos dois aplicativos quase idênticos por equipes diferentes. É extremamente comum haver algumas discrepâncias indesejadas entre os aplicativos. Um desses problemas está no envio de eventos de analytics que, por regra, deveriam ser idênticos.

Um processo comum utilizado para implementar os eventos de analytics é listá-los em um documento compartilhado entre as equipes de desenvolvimento, contendo os nomes dos eventos e seus parâmetros. Este documento serve de base para os desenvolvedores implementarem os eventos nos aplicativos. Esse processo é frágil por ser manual, extenso e monótono. Além disso, esses eventos tendem a mudar conforme o produto evolui e é comum essas mudanças não serem replicadas em ambas plataformas de forma idêntica.

Problemas na prática

Veja, por exemplo, esses dois nomes de eventos: ’Play Video’ e ’Play video’. Apesar de entendermos que eles são o mesmo evento, para a maioria das ferramentas de analytics eles são considerados dois eventos diferentes, o que dificulta a extração e análise dos dados. O mesmo pode acontecer com os nomes dos parâmetros. Erros de digitação são corriqueiros e passam facilmente despercebidos.

Alguns dos problemas mais comuns são:

  • Divergências entre maiúsculos e minúsculos;
  • Uso de plural e singular;
  • Omissão de parâmetros;
  • Parâmetros com valores ou tipos diferentes (’12h30’ *vs* ’12:30’, ’dd/MM’ *vs* ’MM/dd’, string *vs* integer);
  • Alterações em eventos já existentes que não são replicadas fielmente em ambas plataformas.

Uma possível solução

Para evitar estes problemas, gostaríamos de ter a maior parte possível deste processo automatizado. Idealmente, os eventos devem vir de uma fonte única, que é utilizada, atualizada e versionada por ambas as equipes de desenvolvimento. Além disso, gostaríamos de ter uma ferramenta capaz de gerar código baseado nesta fonte, reduzindo assim erros manuais.

Com isto em mente, desenvolvemos uma ferramenta capaz de gerar código nativo para iOS e Android a partir de um arquivo JSON que contém as definições dos eventos. Este arquivo é mantido em um repositório compartilhado entre as equipes.

Por exemplo, um evento do tipo ’Play Video’, contendo os parâmetros: nome (como string), ID (como integer) e um booleano indicando se o vídeo é de conteúdo premium, ficaria da seguinte forma:

Esse JSON é consumido e processado pela ferramenta, gerando um método para cada evento, que deve ser chamado no momento apropriado em cada aplicativo. Atualmente, a ferramenta gera código em Swift e em Kotlin, mas no futuro poderá suportar também Objective-C e Java, assim como outras linguagens.

Utilizando o JSON acima, seria gerado um arquivo com o seguinte método, em Swift:

Em Kotlin ficaria da seguinte forma:

Através deste método é retornado um tipo contendo o nome do evento e seus parâmetros, conforme especificado no JSON, prontos para serem enviados para qualquer serviço de analytics.

O aplicativo usaria o método acima da seguinte forma, em Swift:

Em Kotlin ficaria da seguinte forma:

Conclusão

Com o uso desta ferramenta, os problemas causados pela definição manual de eventos de analytics foram evitados. Os nomes de eventos e parâmetros são gerados automaticamente, evitando discrepâncias e erros de digitação. O compilador garante que não é possível omitir ou esquecer parâmetros e que alterações na definição dos eventos não passam despercebidas, já que as assinaturas dos métodos gerados são atualizadas também por consequência. Como o JSON fica num repositório compartilhado, ambas plataformas estão necessariamente sempre em sincronia neste quesito. E, finalmente, o JSON acaba servindo como documentação por centralizar e versionar todas as especificações dos eventos de analytics.

Link para ferramenta (Github): github.com/Movile/analytics-generator


Estamos com vagas para Desenvolvedores Backend, FrontendAndroid e iOS que queiram construir produtos globais e ajudar o Grupo Movile a impactar a vida de um bilhão de pessoas. Você faz a inscrição em apenas uma vaga e fica em destaque mais de 8 empresas, dentre elas iFood, Sympla, PlayKids, Wavy e Rapiddo.

Acesse e confira!

 

 

 

 

Posted by:Matheus Fonseca

One thought on “Automatizando a geração de eventos de analytics

Deixe seu comentário