Pular para o conteúdo principal

Visão geral

O Nemu React Native SDK permite que aplicações mobile desenvolvidas em React Native:
  • Capturem UTMs recebidas por deep links
  • Persistam a origem da sessão do usuário
  • Associem um UID do usuário logado à sessão
  • Recuperem as UTMs da última sessão para envio de eventos (ex: vendas)
O SDK foi projetado para funcionar em Android e iOS, mantendo compatibilidade de comportamento com os SDKs nativos da Nemu.

Requisitos

  • React Native: 0.68 ou superior
  • Node.js: 16 LTS

Android

  • minSdkVersion: 21 (Android 5.0)
  • targetSdkVersion: 34 (Android 14)

iOS

  • Deployment Target: 11.0+
O projeto deve utilizar Bare Workflow, contendo as pastas android/ e ios/.
Projetos em Expo Managed Workflow podem exigir ejection ou configurações adicionais.

Instalação

1. Instalar o SDK

npm install @nemu/react-native-sdk
# ou
yarn add @nemu/react-native-sdk
Esse passo adiciona o SDK da Nemu ao projeto React Native.

2. Instalação no iOS

cd ios
pod install
cd ..
Esse comando instala as dependências nativas necessárias para o funcionamento do SDK no iOS.

3. Instalação no Android

Adicione a dependência abaixo em android/app/build.gradle:
dependencies {
  implementation "com.android.installreferrer:installreferrer:2.2"
}

Configuração de credenciais

Para inicializar o SDK, você precisará de:
  • PIXEL_ID da Nemu
  • SDK_TOKEN da Nemu
Para obter o PIXEL_ID e o SDK_TOKEN, converse com o seu gerente de contas da Nemu.
Por segurança, recomendamos que essas credenciais não fiquem hardcoded no código.

Usando variáveis de ambiente (react-native-config)

  1. Instale a dependência:
yarn add react-native-config
cd ios && pod install && cd ..
  1. Crie um arquivo .env na raiz do projeto:
NEMU_PIXEL_ID=<PIXEL_ID>
NEMU_SDK_TOKEN=<SDK_TOKEN>

Inicialização do SDK

O SDK deve ser inicializado o mais cedo possível, preferencialmente no componente raiz da aplicação.

Exemplo (App.tsx)

import React, { useEffect } from "react";
import { View, Text } from "react-native";
import Config from "react-native-config";
import { NemuTracking } from "@nemu/react-native-sdk";

export default function App() {
  useEffect(() => {
    NemuTracking.init({
      pixelId: Config.NEMU_PIXEL_ID,
      sdkToken: Config.NEMU_SDK_TOKEN,
      isDebugMode: true,
    });
  }, []);

  return (
    <View>
      <Text>My App</Text>
    </View>
  );
}
O que este código faz:
  • Conecta o aplicativo aos serviços da Nemu
  • Ativa logs de debug para validação durante o desenvolvimento
  • Garante que UTMs capturadas por deep links sejam processadas corretamente

Registrar UID do usuário

Antes de iniciar a instalação e uso da SDK em sua aplicação é necessário definir qual será o UID (Identificador único) por usuário a ser utilizado, esse identificador é definido pela própria equipe que irá realizar a integração, esse identificador será utilizado para linkar acessos da web com o aplicativo e vice versa, tornando o traqueamento extremamente preciso e eficiente. O UID deve ser um valor único por usuário em sua aplicação, normalmente recomendamos utilizar valores já comuns e existentes em sua base de dados como identificador, sendo as opções mais comum o email do usuário Após o usuário realizar login no aplicativo, registre o identificador do usuário no SDK.
Todos os identificadores de usuário registrados pelo SDK são tratados de forma segura.

Exemplo após login

import { NemuTracking } from "@nemu/react-native-sdk";

async function signIn(email: string, password: string) {
  const user = await authApi.login({ email, password });

  NemuTracking.setUserId(user.id);
}

Usuários já logados

Caso o aplicativo carregue uma sessão já autenticada, registre o UID assim que o usuário estiver disponível:
import { NemuTracking } from "@nemu/react-native-sdk";

async function bootstrapSession() {
  const user = await sessionManager.loadUser();

  if (user?.id) {
    NemuTracking.setUserId(user.id);
  }
}

Atribuição de instalação do aplicativo

A atribuição de instalação permite identificar a origem do usuário no primeiro acesso ao aplicativo, mesmo quando não há um deep link direto no momento da abertura. O SDK da Nemu coleta automaticamente informações de origem fornecidas pela loja de aplicativos (Google Play ou App Store) para associar a instalação a uma fonte de tráfego válida.

Quando a atribuição de instalação é utilizada

A atribuição de instalação ocorre quando:
  • O usuário instala o aplicativo pela primeira vez
  • Não existe um deep link ativo no momento da abertura do app
  • A origem está disponível através dos mecanismos da loja
Esse processo garante que usuários adquiridos por campanhas de mídia sejam corretamente atribuídos, mesmo sem interação direta com um link no momento do primeiro acesso.
A atribuição de instalação é aplicada apenas na primeira abertura do aplicativo após a instalação.

O que é atribuído na instalação

Quando disponível, o SDK associa à sessão inicial informações como:
  • Fonte de tráfego (utm_source)
  • Meio (utm_medium)
  • Campanha (utm_campaign)
  • Outros parâmetros de origem fornecidos pela plataforma
Esses dados passam a representar a origem inicial do usuário e podem ser recuperados normalmente através do método getLastSessionHistory(). Após a instalação e abertura do aplicativo, a origem atribuída à instalação estará disponível automaticamente para uso em eventos e vendas.
Os Deferred Deep Links permitem que a origem de um clique seja preservada mesmo quando o usuário:
  1. Clica em um link com UTMs que leva ao site
  2. Ainda não possui o aplicativo instalado
  3. Instala o aplicativo
  4. Abre o aplicativo pela primeira vez
Nesse cenário, o SDK da Nemu recupera as UTMs associadas ao clique original e as aplica à primeira sessão do usuário. Os deferred deep links são utilizados quando:
  • O aplicativo é instalado após um clique em um link com UTMs
  • O app é aberto pela primeira vez após a instalação
  • Não há um deep link ativo no momento da abertura
Esse comportamento garante que a origem correta do usuário seja mantida mesmo em fluxos de instalação indiretos.

Exemplo de fluxo completo

  1. Usuário clica em um link de campanha:
https://mywebsite.com?utm_source=nemu&utm_medium=cpc&utm_campaign=campaign-test
  1. Usuário é redirecionado para a loja de aplicativos (Play Store ou App Store)
  2. Usuário instala o aplicativo
  3. Usuário abre o aplicativo pela primeira vez
  4. O SDK recupera automaticamente as UTMs do clique original
  5. A sessão inicial passa a conter essas UTMs
As UTMs recuperadas por deferred deep link devem ser utilizadas da mesma forma que UTMs capturadas por deep links diretos.

Comportamento esperado

  • Deferred deep links são aplicados apenas na primeira sessão após a instalação
  • Em acessos posteriores, novas origens podem sobrescrever a sessão caso existam novos deep links
  • Caso não exista origem atribuível, a sessão pode ser registrada sem UTMs

O Nemu React Native SDK já consome automaticamente a API Linking do React Native para capturar:
  • A URL que abriu o app
  • URLs recebidas enquanto o app já está em execução
Não é necessário escrever código adicional em JavaScript para tratar deep links. Para que isso funcione, é obrigatória a configuração nativa do app, pois o SDK não registra deep links no sistema operacional.

O que o SDK faz

  • Captura URLs via Linking
  • Extrai UTMs e parâmetros nemu_*
  • Persiste a origem da sessão
  • Associa eventos enviados à origem capturada

O que precisa ser configurado no app

Android

Configurar um intent-filter no AndroidManifest.xml para o domínio ou scheme utilizado pelo app.
<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https" android:host="app.seudominio.com" />
</intent-filter>

iOS

Configurar Universal Links (Associated Domains) para o domínio utilizado pelo app.
applinks:app.seudominio.com
O arquivo apple-app-site-association deve estar disponível no domínio configurado.

Recuperar UTMs da última sessão

O método getLastSessionHistory() retorna as UTMs da última sessão atribuível do usuário.

Exemplo de uso

import { NemuTracking } from "@nemu/react-native-sdk";

async function getUtms() {
  const session = await NemuTracking.getLastSessionHistory();

  console.log("utm_source:", session?.utmSource);
  console.log("utm_medium:", session?.utmMedium);
  console.log("utm_campaign:", session?.utmCampaign);
  console.log("utm_content:", session?.utmContent);
  console.log("utm_term:", session?.utmTerm);
}

Envio de eventos personalizados

Além da captura automática de sessões e UTMs, o SDK da Nemu permite que a aplicação dispare eventos personalizados para mapear ações importantes do usuário dentro do aplicativo. Inicialmente, os eventos são enviados apenas com o nome do evento, sem propriedades adicionais.
Mesmo assim, todos os eventos são automaticamente associados à sessão, às UTMs e ao UID do usuário (quando disponível).

Método sendEvent

O envio de eventos é feito através do método sendEvent, informando apenas o nome do evento.
NemuTracking.sendEvent(eventName);

Eventos recomendados (padrão de mercado)

Abaixo estão exemplos de eventos clássicos utilizados em análises de funil, jornada do usuário e atribuição de campanhas.

Page View (visualização de tela)

Dispare sempre que o usuário acessar uma tela relevante do aplicativo.
import { NemuTracking } from "@nemu/react-native-sdk";

NemuTracking.sendEvent("page_view");
Exemplos de telas:
  • Home
  • Categoria
  • Produto
  • Checkout

View Item (visualização de produto)

Utilizado quando o usuário visualiza a tela de um produto.
NemuTracking.sendEvent("view_item");

Add to Cart (adicionar ao carrinho)

Dispare quando o usuário adicionar um item ao carrinho.
NemuTracking.sendEvent("add_to_cart");

Remove from Cart (remover do carrinho)

NemuTracking.sendEvent("remove_from_cart");

Begin Checkout (início do checkout)

Indica que o usuário iniciou o processo de compra.
NemuTracking.sendEvent("begin_checkout");

Boas práticas para eventos

Recomendamos utilizar nomes de eventos em snake_case, seguindo padrões conhecidos de mercado (ex: GA4).

Recomendações importantes

  • Dispare eventos somente após o SDK estar inicializado
  • Sempre que possível, dispare eventos após o UID estar registrado
  • Utilize nomes de eventos consistentes e padronizados
  • Evite criar múltiplos nomes para o mesmo comportamento

Associação automática com UTMs

Todos os eventos enviados via sendEvent são automaticamente associados pelo SDK a:
  • Última sessão atribuível do usuário
  • UTMs capturadas (deep link, deferred deep link ou instalação)
  • UID do usuário (quando registrado)
Essa associação ocorre de forma transparente, sem necessidade de enviar UTMs manualmente junto aos eventos.
Após a implementação, os eventos passam a compor a jornada do usuário na Nemu, permitindo análises mais completas de comportamento e atribuição, mesmo sem propriedades adicionais nos eventos.

Enviar venda com UTMs

Utilize as UTMs retornadas pelo SDK ao enviar eventos de venda para a API da Nemu.
import { NemuTracking } from "@nemu/react-native-sdk";

async function buildPurchasePayload() {
  const session = await NemuTracking.getLastSessionHistory();

  return {
    transactionId: "123",
    netValue: 99.9,
    status: "paid",
    utm_source: session?.utmSource ?? null,
    utm_medium: session?.utmMedium ?? null,
    utm_campaign: session?.utmCampaign ?? null,
    utm_content: session?.utmContent ?? null,
    utm_term: session?.utmTerm ?? null,
  };
}
As UTMs devem ser enviadas exatamente como retornadas pelo SDK.

Testando a integração

1. Ative o modo debug

NemuTracking.init({
  pixelId: Config.NEMU_PIXEL_ID,
  sdkToken: Config.NEMU_SDK_TOKEN,
  isDebugMode: true,
});

2. Fluxo recomendado de teste

  1. Instale o app limpo
  2. Abra o app via deep link com UTMs
  3. Verifique os logs de captura
  4. Faça login e registre o UID
  5. Recupere as UTMs com getLastSessionHistory()
  6. Envie uma venda contendo essas UTMs

3. Logs esperados

[DEBUG] [NemuTracking] Application successfully initialized
[DEBUG] [NemuTracking] Deep link captured with UTMs
[DEBUG] [NemuTracking] UID registered successfully
[DEBUG] [NemuTracking] Last session history retrieved

API do SDK

type NemuInitParams = {
  pixelId: string;
  sdkToken: string;
  isDebugMode?: boolean;
};

type SessionHistory = {
  utmSource?: string;
  utmMedium?: string;
  utmCampaign?: string;
  utmContent?: string;
  utmTerm?: string;
};

export const NemuTracking: {
  init(params: NemuInitParams): void;
  setUserId(userId: string): void;
  getLastSessionHistory(): Promise<SessionHistory | null>;
  captureDeepLink(url: string): void;
  sendEvent(eventName: string): Promise<void>;
};

Conclusão

Após seguir todos os passos acima, o SDK React Native da Nemu estará corretamente integrado à sua aplicação.