Referência da API do endpoint SESSION
Acompanhe as sessões dos usuários e habilite a atribuição para instalações de aplicativos, reengajamento e métricas de retenção por meio da API REST da Singular usando integração servidor a servidor como alternativa à implementação do SDK.
Visão geral
Caso de uso servidor-a-servidor
A API REST da Singular permite a integração direta servidor-a-servidor, na qual os aplicativos encaminham dados específicos do dispositivo para o seu backend, que os transmite aos servidores da Singular para processamento de atribuição e relatórios analíticos.
Recursos suportados:
- Atribuição de instalação: atribuição de primeiro toque para campanhas de marketing
- Atribuição de reengajamento: atribuição multitoque para usuários recorrentes
- Métricas de retenção: rastreamento de engajamento baseado em sessão
- Rastreamento de eventos: medição personalizada de eventos no aplicativo
Arquitetura de fluxo de dados
A integração servidor a servidor segue um processo de transmissão de dados em quatro etapas.
- Coleta do cliente: o aplicativo coleta os dados necessários do dispositivo e do aplicativo
- Transmissão do servidor: o aplicativo encaminha os dados coletados para o seu servidor back-end
- Chamada da API Singular: seu servidor envia os dados para o endpoint da API REST da Singular
- Tratamento da resposta: seu servidor recebe e processa a resposta do Singular
Considerações importantes
Requisitos críticos:
- Processamento em tempo real: Solicitações processadas individualmente — sem suporte a lotes
- Ordem sequencial: os eventos devem ser enviados cronologicamente
- Sem deduplicação: o Singular não deduplica dados — implemente a deduplicação no lado do servidor
- Permanência dos dados: os dados no nível do dispositivo não podem ser excluídos após a ingestão — valide antes de enviar
- Sessão em primeiro lugar: a sessão deve ser estabelecida antes de qualquer rastreamento de evento
Benefícios da integração:
- Flexibilidade: controle total sobre a coleta de dados e o tempo de transmissão
- Paridade de recursos: suporta todas as funcionalidades do SDK quando os dados adequados são fornecidos
- Implementação personalizada: adapte a integração à arquitetura de back-end específica .
Gerenciamento de sessão
O endpoint SESSION notifica o Singular sobre eventos de abertura do aplicativo para inicializar as sessões do usuário para atribuição e rastreamento.
Quando enviar sessões
Gatilhos de sessão
Envie solicitações SESSION para estes eventos do ciclo de vida do aplicativo:
- Novas instalações: primeiro lançamento do aplicativo após a instalação
- Inicialização do estado encerrado: o aplicativo é aberto a partir do estado totalmente fechado .
- De segundo plano para primeiro plano: o aplicativo retorna ao primeiro plano após o período de tempo limite (recomendado: 60 segundos)
Lógica de tempo limite da sessão
Implemente o tempo limite da sessão para evitar solicitações SESSION excessivas durante breves momentos em que o aplicativo fica em segundo plano.
Implementação recomendada:
- Duração do tempo limite: 60 segundos (1 minuto)
- Primeiro plano < Tempo limite: Não envie SESSION se o aplicativo retornar ao primeiro plano dentro do período de tempo limite
- Primeiro plano > Tempo limite: envie SESSION se o aplicativo permanecer em segundo plano além do período de tempo limite
- Rastreamento do ciclo de vida do aplicativo: use eventos do ciclo de vida do aplicativo e temporizadores para gerenciar o estado da sessão
Suporte a links diretos: sempre envie SESSION para aberturas de aplicativos
por meio de links diretos, links universais ou links de aplicativos com o
parâmetro openuri preenchido, independentemente do status do tempo limite.
Processamento de atribuição
Atribuição baseada em sessão
A Singular processa solicitações SESSION para determinar o tipo de atribuição e acionar os fluxos de trabalho apropriados.
| Tipo de sessão | Processamento Singular | Resultado da atribuição |
|---|---|---|
| Primeira sessão (nova instalação) | Processo de atribuição da instalação acionado | Atribuições instaladas na campanha de marketing |
| Reengajamento qualificado | Processo de atribuição de reengajamento acionado | Atribui o retorno do usuário à campanha ou ao link direto |
| Sessão padrão | Sessão registrada para rastreamento de retenção | Conta para as métricas de atividade e engajamento do usuário |
Saiba mais: Perguntas frequentes sobre atribuição de reengajamento
Requisitos de ordem de eventos
O tempo da sessão e do evento afeta diretamente a precisão da atribuição e a qualidade dos dados .
Regras críticas de ordenação:
- Sessão antes dos eventos: uma única SESSÃO deve ser recebida antes de qualquer evento para essa sessão
- Transmissão de eventos em tempo real: os eventos no aplicativo devem ser enviados em tempo real após a respectiva sessão
- Processamento sequencial: uma ordem de sessão inválida resulta em inconsistências de dados e erros de atribuição
Opções avançadas
Funcionalidade estendida
A integração S2S singular oferece suporte a recursos avançados que exigem parâmetros de SESSÃO adicionais .
Recursos avançados: consulte Opções S2S avançadas para requisitos de links diretos, SKAdNetwork e rastreamento entre dispositivos.
Especificação do endpoint da API
O endpoint SESSION aceita solicitações GET com parâmetros de consulta contendo dados do dispositivo, do aplicativo e de atribuição.
URL do endpoint
URL base e método
GET https://s2s.singular.net/api/v1/launch
Formato da solicitação:
GET /api/v1/launch?param1=value1¶m2=value2
Corpo da solicitação: Não forneça o corpo da solicitação — todos os parâmetros devem ser enviados como parâmetros de consulta de URL usando o método GET.
Parâmetros obrigatórios
Todas as solicitações SESSION devem incluir esses parâmetros obrigatórios com os valores e a formatação adequados .
Autenticação da API
Chave SDK
| Parâmetro | Tipo | Descrição |
|---|---|---|
a
|
string
|
Chave SDK Singular para autenticação API. Recuperar em: Singular UI → Menu principal → Ferramentas do desenvolvedor
Exemplo: Importante: Não use a chave da API de relatórios — as solicitações serão rejeitadas. |
Identificadores de dispositivo
Identificadores específicos da plataforma
Os identificadores de dispositivo variam de acordo com a plataforma e a disponibilidade. Inclua todos os identificadores aplicáveis à sua plataforma.
| Parâmetro | Plataforma | Descrição |
|---|---|---|
idfa
|
iOS |
Identificador para anunciantes (IDFA) permite o rastreamento de anúncios e a atribuição de campanhas. Requisito ATT: iOS 14.5+ requer a aceitação do usuário por meio da estrutura App Tracking Transparency
Exemplo: |
idfv
|
iOS |
Identificador para fornecedores (IDFV) permanece consistente em todos os aplicativos do mesmo fornecedor. Sempre necessário: deve ser incluído independentemente do status ATT ou da disponibilidade do IDFA
Exemplo: |
aifa
|
Android (Google Play) |
O Google Advertising ID (GAID) permite o rastreamento de publicidade reinicializável pelo usuário no Android.
Exemplo: |
asid
|
Android (Google Play) |
ID do aplicativo Android fornece rastreamento entre aplicativos com foco na privacidade para o mesmo desenvolvedor. Sempre necessário: deve ser incluído em dispositivos Google Play, independentemente da disponibilidade do GAID
Exemplo: |
amid
|
Android (Amazon) |
ID de publicidade da Amazon para dispositivos Amazon sem os Serviços Google Play.
Exemplo: |
oaid
|
Android (OEMs chineses) |
Open Advertising Identifier (OAID) para dispositivos fabricados na China sem Google Play Services (Huawei, Xiaomi, OPPO, etc.).
Exemplo: |
andi
|
Android (Sem Google Play) |
O Android ID é um identificador de 64 bits gerado pelo dispositivo. Uso restrito: proibido em dispositivos Google Play — use AIFA e ASID em vez disso. Envie apenas se não houver outros identificadores disponíveis e o aplicativo não for distribuído pelo Google Play.
Exemplo: |
sdid
|
PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV |
O Singular Device ID é um UUIDv4 gerado pelo cliente que representa uma instalação única do aplicativo. Identificador primário: único identificador de dispositivo usado para aplicativos de PC e console
Exemplo: |
sing
|
Somente para empresas |
Identificador definido pelo cliente para casos de uso especiais em que os identificadores padrão não estão disponíveis. Restrito: Somente para clientes empresariais — deve ser habilitado pelo engenheiro de soluções da Singular para cada aplicativo. Entre em contato com o CSM para obter mais informações.
Exemplo: |
Parâmetros do dispositivo
Informações do dispositivo
| Parâmetro | Descrição |
|---|---|
p
|
Plataforma do aplicativo. Valores permitidos (sensível a maiúsculas e minúsculas):
Exemplo: |
ip
|
Endereço IPv4 público do dispositivo. IPv6 compatível, mas IPv4 recomendado para compatibilidade de atribuição com redes de publicidade.
Exemplo: |
ve
|
Versão do sistema operacional do dispositivo no momento da sessão.
Exemplo: |
maiOS, Android |
Marca do dispositivo (nome do fabricante). Deve ser usado com Recuperar marca do dispositivo
Exemplos: |
moiOS, Android |
Modelo do dispositivo. Deve ser usado com Recuperar o modelo do dispositivo
Exemplos: |
lciOS, Android |
Tag de localidade IETF — código de idioma e país de duas letras separados por um sublinhado. Recuperar localidade do dispositivo
Exemplo: |
bdiOS, Android |
Identificador de compilação do dispositivo, codificado em URL. Recuperar compilação do dispositivo
Exemplo: |
Parâmetros do aplicativo
Informações do aplicativo
| Parâmetro | Descrição |
|---|---|
i
|
Identificador do aplicativo (sensível a maiúsculas e minúsculas).
Exemplo: |
app_v
|
Versão do aplicativo.
Exemplo: |
install
|
Indica se a sessão representa a primeira sessão após a instalação ou reinstalação.
Necessário para: Recursos de rastreamento de reinstalação
Exemplo: |
install_timeiOS, Android |
Carimbo de data/hora Unix da primeira instalação do aplicativo.
Exemplo: |
update_timeiOS, Android |
Carimbo de data/hora Unix da última atualização do aplicativo.
Exemplo: |
att_authorization_statusiOS |
Código de status da Transparência de Rastreamento de Aplicativos (ATT) (iOS 14.5+). Valores de status:
Sempre necessário: Mesmo que o ATT não
esteja implementado, passe
Exemplo: |
Parâmetros de prevenção de fraudes
Instalar validação da fonte
| Parâmetro | Descrição |
|---|---|
install_sourceAndroid, PC |
Nome do pacote de instalação ou identificador da loja. Android:Nome do pacote fonte de instalação
Exemplo para Android: Lojas compatíveis com PC:
|
install_receiptiOS |
Recibo de instalação do iOS codificado em Base64 para validação de fraudes.
Exemplo (truncado): |
Parâmetros de links diretos
Suporte a links diretos
| Parâmetro | Descrição |
|---|---|
openuriiOS, Android |
Link direto codificado por URL, Universal Link ou App Link que abriu o aplicativo.
URL original:
Exemplo codificado: |
ddl_enablediOS, Android |
Indica se o aplicativo espera uma URL de link direto diferido em resposta.
Exemplo de resposta:
|
singular_link_resolve_requirediOS, Android |
Solicita a resolução do link curto Singular para o link longo.
Deve ser usado com
Exemplo de resposta:
|
Parâmetros avançados de atribuição
Aprimoramento da atribuição da plataforma
| Parâmetro | Descrição |
|---|---|
install_refAndroid (Google Play) PC nativo (Google Play Games) |
Informações de referência de instalação do Google codificadas em JSON URL. Fornece a atribuição mais precisa para instalações do Android e do Google Play Games PC. Estrutura JSON do Android:
Estrutura JSON do PC nativo:
Necessário para:
Mais informações:
Exemplo codificado em URL: |
meta_refAndroid (Google Play) |
A partir de 18 de junho de 2025:Meta Advanced Mobile Measurement (AMM) elimina a necessidade de implementação do Meta Install Referrer. Não recomendado se o AMM estiver ativado. Meta Install Referrer codificado em JSON URL para dados de atribuição granulares no nível do usuário. Estrutura JSON: Estrutura JSON:
Saiba mais: Meta Referrer FAQ |
attribution_tokeniOS |
Token de atribuição do Apple Search Ads da estrutura AdServices (iOS 14.3+). Recuperar usando:attributionToken() na primeira inicialização do aplicativo após a instalação/reinstalação.
Exemplo (truncado): |
Parâmetros opcionais
Os parâmetros opcionais aprimoram os recursos de rastreamento e oferecem suporte a recursos avançados .
Parâmetros de carimbo de data/hora
| Parâmetro | Descrição |
|---|---|
utime
|
Carimbo de data/hora Unix de 10 dígitos da sessão.
Exemplo: |
umilisec
|
Carimbo de data/hora Unix de 13 dígitos com milissegundos.
Exemplo: |
Parâmetros de rede e localização
| Parâmetro | Descrição |
|---|---|
use_ip
|
Instrui o Singular a extrair o endereço IP da solicitação HTTP
em vez do parâmetro Limitações:
Exemplo: |
country
|
ISO 3166-1alfa-2 código de país de duas letras.
Obrigatório quando: endereço IP não disponível
ou
Exemplo: |
ua
|
String do agente do usuário codificada em URL.
Bruto:
Codificado:
|
ciOS, Android |
Tipo de conexão de rede.
Valores permitidos:
Exemplo: |
cniOS, Android |
Nome da operadora do provedor de internet.
Exemplo: |
Propriedades personalizadas
| Parâmetro | Descrição |
|---|---|
global_properties
|
Objeto JSON codificado em URL com pares chave-valor personalizados. Limites:
JSON:
Codificado em URL:
|
Suporte para rastreamento de desinstalação
| Parâmetro | Descrição |
|---|---|
apns_tokeniOS |
Token do dispositivo Apple Push Notification Service (APNs) codificado em hexadecimal. Requerido para rastreamento de desinstalação no iOS.
Exemplo:
|
fcmAndroid |
Token do dispositivo Firebase Cloud Messaging.
Exemplo:
|
Parâmetros de privacidade de dados
| Parâmetro | Descrição |
|---|---|
data_sharing_options
|
Consentimento do usuário final codificado em JSON URL para compartilhamento de dados. Deve persistir e ser transmitido em todas as solicitações SESSION e EVENT subsequentes. Consentimento do usuário (aceitação):
Recusa do usuário (opt-out):
Exemplo codificado em URL:
|
dntiOS, Android |
Status "Não rastrear".
Exemplo: |
dntoffiOS, Android |
Indica se o Não rastrear está DESATIVADO.
Exemplo: |
Suporte para vários dispositivos
| Parâmetro | Descrição |
|---|---|
custom_user_id
|
Sua ID de usuário interna para rastreamento entre dispositivos.
Exemplo: |
Suporte SKAdNetwork
| Parâmetro | Descrição |
|---|---|
skan_conversion_valueiOS |
Valor de conversão mais recente da SKAdNetwork no momento da sessão. Saiba mais: Implementação do SKAdNetwork
Exemplo: |
skan_first_call_timestampiOS |
Carimbo de data/hora Unix da primeira chamada à API SKAdNetwork.
Exemplo: |
skan_last_call_timestampiOS |
Carimbo de data/hora Unix da chamada mais recente à API SKAdNetwork na hora da sessão.
Exemplo: |
Suporte ao ICM do Google Ads (Beta)
| Parâmetro | Descrição |
|---|---|
odm_infoiOS |
Necessário para a medição de conversões integrada do Google Ads (Beta). |
odm_erroriOS |
Necessário para a medição de conversões integrada do Google Ads (Beta). |
Exemplos de solicitação
O código de exemplo demonstra a integração do endpoint SESSION em várias linguagens de programação.
Isenção de responsabilidade do exemplo: os exemplos de código podem não incluir
todos os parâmetros necessários. Valide a lista completa de parâmetros antes da
implementação em produção. Use um identificador de aplicativo ( i ) exclusivo
para desenvolvimento/teste.
Exemplo em Python
import requests
params = {
'a': 'sdk_key_here',
'p': 'Android',
'i': 'com.singular.app',
'ip': '10.1.2.3',
've': '9.2',
'ma': 'samsung',
'mo': 'SM-G935F',
'lc': 'en_US',
'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
'install': 'true',
'n': 'MyCoolAppName',
'bd': 'Build/13D15',
'app_v': '1.2.3',
'openuri': 'myapp://home/page?queryparam1=value1',
'ddl_enabled': 'true',
'install_source': 'com.android.vending',
'install_time': 1510040127,
'update_time': 1510090877
}
response = requests.get('https://s2s.singular.net/api/v1/launch', params=params)
print(response.json())
Exemplo em cURL
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=sdk_key_here" \
--data-urlencode "p=Android" \
--data-urlencode "i=com.singular.app" \
--data-urlencode "ip=10.1.2.3" \
--data-urlencode "ve=9.2" \
--data-urlencode "ma=samsung" \
--data-urlencode "mo=SM-G935F" \
--data-urlencode "lc=en_US" \
--data-urlencode "aifa=8ecd7512-2864-440c-93f3-a3cabe62525b" \
--data-urlencode "asid=edee92a2-7b2f-45f4-a509-840f170fc6d9" \
--data-urlencode "install=true" \
--data-urlencode "n=MyCoolAppName" \
--data-urlencode "bd=Build/13D15" \
--data-urlencode "app_v=1.2.3" \
--data-urlencode "openuri=myapp://home/page?queryparam1=value1" \
--data-urlencode "ddl_enabled=true" \
--data-urlencode "install_source=com.android.vending" \
--data-urlencode "install_time=1510040127" \
--data-urlencode "update_time=1510090877"
Exemplo em HTTP
GET /api/v1/launch
?a=sdk_key_here
&p=Android
&i=com.singular.app
&ip=10.1.2.3
&ve=9.2
&ma=samsung
&mo=SM-G935F
&lc=en_US
&aifa=8ecd7512-2864-440c-93f3-a3cabe62525b
&asid=edee92a2-7b2f-45f4-a509-840f170fc6d9
&install=true
&n=MyCoolAppName
&bd=Build%2F13D15
&app_v=1.2.3
&openuri=myapp%3A%2F%2Fhome%2Fpage%3Fqueryparam1%3Dvalue1
&ddl_enabled=true
&install_source=com.android.vending
&install_time=1510040127
&update_time=1510090877 HTTP/1.1
Host: s2s.singular.net
Accept: application/json
Exemplo em Java
// Base URL
String baseUrl = "https://s2s.singular.net/api/v1/launch";
// Parameters
Map<String, String> params = new HashMap<>();
params.put("a", "sdk_key_here");
params.put("p", "Android");
params.put("i", "com.singular.app");
params.put("ip", "10.1.2.3");
params.put("ve", "9.2");
params.put("ma", "samsung");
params.put("mo", "SM-G935F");
params.put("lc", "en_US");
params.put("aifa", "8ecd7512-2864-440c-93f3-a3cabe62525b");
params.put("asid", "edee92a2-7b2f-45f4-a509-840f170fc6d9");
params.put("install", "true");
params.put("n", "MyCoolAppName");
params.put("bd", "Build/13D15");
params.put("app_v", "1.2.3");
params.put("openuri", "myapp://home/page?queryparam1=value1");
params.put("ddl_enabled", "true");
params.put("install_source", "com.android.vending");
params.put("install_time", "1510040127");
params.put("update_time", "1510090877");
// Build URL with encoded parameters
StringBuilder urlBuilder = new StringBuilder(baseUrl);
urlBuilder.append('?');
for (Map.Entry<String, String> entry : params.entrySet()) {
if (urlBuilder.length() baseUrl.length() + 1) {
urlBuilder.append('&');
}
urlBuilder.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append('=')
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
// Create connection
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
// Get response
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Check status
System.out.println("HTTP Status Code: " + responseCode);
System.out.println("Response: " + response.toString());
// Disconnect
conn.disconnect();
Códigos de resposta e erros
O endpoint SESSION retorna códigos de status HTTP e respostas JSON indicando o sucesso ou a falha da solicitação.
Documentação completa sobre erros: Códigos de resposta S2S e tratamento de erros
Teste e validação
Verifique a integração S2S antes da implantação em produção usando o Singular SDK Console para validação de dados em tempo real.
Procedimento de teste
Validação de ponta a ponta
- Registre o dispositivo de teste: obtenha o ID de publicidade do dispositivo e adicione-o ao console do SDK Singular
- Habilite o registro do console: adicione o identificador do dispositivo no console SDK para capturar os dados de teste
-
Use o ID do aplicativo de desenvolvimento: substitua o identificador do aplicativo
pela versão de desenvolvimento (por exemplo,
com.singular.app.dev) para separar o teste dos dados de produção - Inicie o aplicativo: abra o aplicativo a partir do estado encerrado para acionar a sessão
- Validar dados do cliente: confirme se o aplicativo envia todos os pontos de dados Singular necessários para o seu servidor
-
Verificar solicitação do servidor: confirme se o seu servidor envia
a solicitação SESSION para
https://s2s.singular.net/api/v1/launchcom todos os parâmetros necessários - Verifique o console SDK: em segundos, o evento SESSION deve aparecer no console SDK
- Repita os testes: valide os acionamentos de SESSION em cada entrada do aplicativo e operação em primeiro plano
Verificação crítica: confirme se o evento SESSION ocorre na abertura do aplicativo/primeiro plano ANTES de qualquer solicitação EVENT. Uma ordem inválida causa erros de atribuição.
Indicador de sucesso: se SESSION aparecer no Console SDK, você concluiu com sucesso o teste de integração de ponta a ponta!
Recursos adicionais
Documentação de teste
Guia de teste abrangente: Guia de teste de integração S2S