Introdução
O Nemu Flutter SDK (nemu_tracking_flutter) permite integrar o sistema de atribuição e Smart Links da Nemu diretamente no seu aplicativo Flutter.
Com o SDK você pode:
- Capturar a origem da instalação — saber de qual campanha, fonte ou mídia o usuário veio (UTMs)
- Processar deep links diretos — quando o usuário clica em um Smart Link e o app já está instalado
- Processar deep links diferidos — quando o usuário clica em um Smart Link, instala o app pela loja e abre pela primeira vez
- Identificar usuários — associar um ID do seu sistema ao dispositivo para cruzar dados de atribuição
- Consultar histórico de sessões — recuperar os UTMs da última interação do usuário
Pré-requisitos
| Requisito | Versão mínima |
|---|---|
| Flutter | >= 3.10.0 |
| Dart SDK | >= 3.0.0 < 4.0.0 |
| iOS | 12.0+ |
| Android | API 21+ (Android 5.0) |
Instalação
1. Configuração do token de acesso
O pacotenemu_tracking_flutter é privado e está hospedado em um repositório Git com acesso restrito. Antes de instalar, você precisa configurar a autenticação.
Obtenha seu acesso
Entre em contato com a equipe de suporte da Nemu para receber acesso ao repositório do SDK:- E-mail: suporte@usenemu.com
- Site: nemu.com.br
2. Instalação do pacote
Adicione o SDK ao seu arquivopubspec.yaml:
Via repositório Git (recomendado)
Via caminho local (para desenvolvimento)
Todas as dependências necessárias (
shared_preferences, flutter_secure_storage, app_links, etc.) são instaladas automaticamente como dependências transitivas do SDK. Não é necessário adicioná-las manualmente ao seu projeto.Configuração nativa
iOS
1. Configure Universal Links (obrigatório para deep links diretos)
Para que o iOS encaminhe os Smart Links diretamente para o app (sem abrir o navegador), você precisa configurar Associated Domains. No Xcode:- Abra o projeto
.xcworkspace(emios/Runner.xcworkspace) - Selecione o target Runner
- Vá em Signing & Capabilities
- Clique em + Capability e adicione Associated Domains
- Adicione o domínio no formato:
O domínio exato será fornecido pela equipe da Nemu junto com as credenciais.
2. Configure o URI Scheme (obrigatório)
No arquivoios/Runner/Info.plist, adicione o URI scheme do seu app:
seuapp pelo scheme definido no painel da Nemu para o seu Smart Link.
O URI scheme configurado aqui deve corresponder ao valor passado no parâmetro
uriScheme na inicialização do SDK.Android
1. Configure Deep Links no AndroidManifest.xml
Para que os Smart Links abram o app diretamente, adicione intent filters na suaActivity principal.
No arquivo android/app/src/main/AndroidManifest.xml, dentro da tag <activity> principal (a que contém android:name=".MainActivity"):
App Links (Universal Links do Android):
seu-dominio.nemu.com.br e seuapp pelos valores correspondentes ao seu projeto.
2. Permissão de Internet (geralmente já presente)
Verifique se oAndroidManifest.xml possui a permissão de internet:
Na maioria dos projetos Flutter essa permissão já está incluída por padrão.
Inicialização
A inicialização do SDK deve ser feita uma única vez, o mais cedo possível no ciclo de vida do app — idealmente noinitState do seu widget raiz ou na função main.
Parâmetros de configuração
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
apiKey | String | Sim | Chave de API obtida no painel da Nemu |
uriScheme | String | Sim | URI scheme do app (ex: "seuapp"). Deve corresponder ao valor configurado no Smart Link |
trackingId | String | Sim | ID de rastreamento associado ao app no painel da Nemu |
isDebugMode | bool | Não | Ativa logs detalhados no console. Padrão: false |
baseUrl | String? | Não | Sobrescreve a URL base da API (somente quando isDebugMode é true) |
Exemplo completo de inicialização
Uso com variáveis de ambiente
Para não expor credenciais diretamente no código, utilize o pacoteflutter_dotenv ou defina as variáveis via --dart-define:
Usando --dart-define (recomendado)
Usando flutter_dotenv
Crie um arquivo .env na raiz do projeto:
Identificação de usuários
Após o login do usuário no seu app, associe o ID dele ao dispositivo. Isso permite que a Nemu cruze dados de atribuição com o seu sistema de usuários.Registrar usuário
Limpar usuário no logout
clearUserId() remove apenas a associação local. O histórico de atribuição no backend é preservado.Deep Links
O SDK processa dois tipos de deep links automaticamente:Deep links diretos
Ocorrem quando o app já está instalado e o usuário clica em um Smart Link. O sistema operacional abre o app diretamente (via Universal Link / App Link ou URI scheme). O fluxo é transparente:- O usuário clica no Smart Link
- O app abre com a URL
- O SDK processa a URL e registra a sessão
- Os listeners registrados via
onDeepLinksão notificados com os dados
Deep links diferidos (Deferred Deep Links)
Ocorrem quando o app não está instalado. O usuário clica no Smart Link, é redirecionado para a loja, instala o app e abre pela primeira vez. O SDK detecta automaticamente esse cenário na primeira abertura e entrega os dados de atribuição e deep link viaonDeepLink com isDeferred: true.
Listener reativo (onDeepLink)
Registre um callback para receber os dados do deep link assim que estiverem disponíveis:Replay automático: se um deep link já foi processado antes do listener ser registrado, o callback é disparado imediatamente com os dados mais recentes. Isso evita que o app perca o deep link inicial.
Consulta imperativa (getDeepLinkData)
Se preferir consultar os dados de forma imperativa em vez de usar o listener:Estrutura do DeepLinkData
Histórico de sessão
Histórico da última sessão (last touch)
Consulte os UTMs da interação mais recente do usuário. Responde à pergunta: “quais foram os UTMs da última visita?”Exemplo: anexando UTMs a uma compra
Uso avançado
Modo debug
Ative o modo debug para ver logs detalhados de todas as operações do SDK no console:[NemuSDK] e incluem informações sobre:
- Processamento de deep links
- Fluxo de inicialização
- Erros e falhas de rede
Sobrescrita da URL base
Em ambiente de desenvolvimento ou staging, você pode apontar o SDK para uma API diferente:A
baseUrl só é utilizada quando isDebugMode é true. Em modo de produção, o SDK sempre usa a URL padrão.Tipos exportados
O SDK exporta os seguintes tipos Dart para uso na sua aplicação:NemuInitParams
DeepLinkData
UtmData
SessionHistory
SessionInfo
DeepLinkCallback
Solução de problemas
Erro “flutter pub get” falha ao resolver o pacote
Erro:- Verifique se você tem acesso ao repositório Git do SDK
- Confirme que suas credenciais Git (SSH ou HTTPS) estão configuradas corretamente
- Entre em contato com o suporte da Nemu para validar seu acesso
Erro ao inicializar: “NemuTracking must be initialized before use”
Causa: um método do SDK foi chamado antes da inicialização. Solução: certifique-se de queNemuTracking.instance.init() é chamado no initState do widget raiz antes de qualquer outro método do SDK.
Deep links não funcionam no iOS
Verificações:- O Associated Domain está configurado corretamente no Xcode? (formato:
applinks:seu-dominio) - O arquivo
apple-app-site-associationestá publicado e acessível no domínio? (configurado pela equipe da Nemu) - O URI scheme está declarado no
Info.plist? - O
WidgetsFlutterBinding.ensureInitialized()está sendo chamado antes dorunApp?
Deep links não funcionam no Android
Verificações:- Os intent filters estão corretos no
AndroidManifest.xml? - O domínio está com verificação automática ativa (
android:autoVerify="true")? - O arquivo
assetlinks.jsonestá publicado no domínio? (configurado pela equipe da Nemu) - A
MainActivityestá configurada comlaunchMode="singleTop"ousingleTask?
Nenhum dado de atribuição retornado
Verificações:- O
apiKeye otrackingIdestão corretos? - O Smart Link está configurado e ativo no painel da Nemu?
- Teste com
isDebugMode: truee verifique os logs[NemuSDK]no console
flutter_secure_storage falha no Android
Erro:- Verifique se o
minSdkVersionnoandroid/app/build.gradleé pelo menos 21 - Em dispositivos com Android < 6.0, pode ser necessário configurar o
flutter_secure_storagecom opções específicas. Consulte a documentação do pacote
Precisa de ajuda? Entre em contato com a equipe de suporte da Nemu:
- E-mail: suporte@usenemu.com
- Site: nemu.com.br