EmuLabZip logo EmuLabZip

Inspetor de analytics

Atualizado em · Editar esta página no GitHub

A view Analytics listando os eventos que um app enviou ao Segment e ao Mixpanel, com um aberto

Veja os eventos que um app envia ao Segment, Amplitude, Mixpanel e Firebase Analytics, decodificados, no momento em que acontecem, em uma lista própria.

emulabzip analytics                          # runs the proxy, points the device at it, prints each event
emulabzip analytics --service segment,mixpanel --json
emulabzip analytics --firebase-log           # Firebase's debug-mode lines from the device log

As chamadas de analytics são requisições comuns, então continuam na lista de Network também. O inspetor lê o host, o endereço, os headers e o body delas, e por isso funciona com tudo o que o proxy grava e com uma sessão ou HAR aberto depois.

O que é decodificado#

ServiçoHostO quê
Segment*.segment.io, *.segment.com/v1/track, /v1/identify, /v1/page, /v1/screen, /v1/group, /v1/alias e /v1/batch: JSON, uma chamada ou um lote
Amplitude*.amplitude.comA API HTTP (/2/httpapi, /batch: JSON com events) e o body de formulário mais antigo (e=), com propriedades de evento e de usuário
Mixpanel*.mixpanel.com/track e /import (data= em base64, no body ou na query, ou JSON puro) e as mudanças de perfil de /engage
Firebase Analyticsapp-measurement.comO protobuf em lote de /a: nomes de eventos, parâmetros e horários, depois de desfeito o Content-Encoding do body

Cada evento é um serviço, um tipo (track, screen, page, identify, profile…), um nome, suas propriedades, o usuário (ou o id anônimo ou do dispositivo) e seu horário quando tem um.

O Firebase também pode ser lido sem o proxy. Com o modo debug ligado para o app (adb shell setprop debug.firebase.analytics.app <package>), o Firebase escreve cada evento no log com a tag FA, e emulabzip analytics --firebase-log os imprime.

No desktop#

A view Analytics lista os eventos das requisições que o proxy gravou, os mais novos primeiro, com um filtro por serviço e uma busca em nomes e propriedades. Abra um evento para ver as propriedades dele. Inicie o proxy antes, na view Network.

Limites#

  • SDKs que fixam o certificado (pinning) passam sem alteração e não podem ser lidos. O log de debug do Firebase funciona para eles.
  • O formato em lote do Firebase é o do protocolo de medição do Google como é entendido hoje, e o decodificador foi testado com payloads feitos nesse formato, não com tráfego capturado de um app Firebase de verdade. Quando o Google o mudar, eventos podem faltar: avise em uma issue, com uma captura se puder.
  • Os eventos são decodificados sob demanda, não armazenados: um evento em uma requisição que o proxy não guarda mais se perdeu.
  • Por MCP não existe ferramenta de analytics: o servidor não roda um proxy.