Referência da API do Endpoint SESSION
Rastreie sessões de usuário e habilite a atribuição para instalações de apps, reengajamento e métricas de retenção por meio da API REST da Singular usando integração server-to-server como alternativa à implementação por SDK.
Visão geral
Caso de uso Server-to-Server
A API REST da Singular permite a integração direta server-to-server, na qual os apps encaminham dados específicos do dispositivo para o seu backend, que os transmite aos servidores da Singular para processamento de atribuição e geração de relatórios de análise.
Recursos suportados:
- Atribuição de instalação: Atribuição de primeiro toque a 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 de eventos in-app personalizados
Arquitetura do fluxo de dados
A integração server-to-server segue um processo de transmissão de dados em quatro etapas.
- Coleta no cliente: O app coleta os dados obrigatórios do dispositivo e da aplicação
- Transmissão ao servidor: O app encaminha os dados coletados para o seu servidor backend
- Chamada à API da Singular: Seu servidor envia os dados para o endpoint da API REST da Singular
- Tratamento da resposta: Seu servidor recebe e processa a resposta da Singular
Considerações importantes
Requisitos críticos:
- Processamento em tempo real: Requisições processadas individualmente—sem suporte a lote
- Ordem sequencial: Os eventos devem ser enviados cronologicamente
- Sem deduplicação: A Singular não deduplica dados—implemente a deduplicação no lado do servidor
- Permanência dos dados: Dados em nível de dispositivo não podem ser excluídos após a ingestão—valide antes de enviar
- Sessão primeiro: A sessão deve ser estabelecida antes de qualquer rastreamento de eventos
Benefícios da integração:
- Flexibilidade: Controle total sobre a coleta de dados e o momento da 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 específica do seu backend
Gerenciamento de sessões
O endpoint SESSION notifica a Singular sobre eventos de abertura do app para inicializar as sessões de usuário para atribuição e rastreamento.
Quando enviar sessões
Gatilhos de sessão
Envie requisições SESSION para estes eventos do ciclo de vida do app:
- Instalações novas: Primeira abertura do app após a instalação
- Abertura a partir do estado encerrado: O app abre a partir do estado totalmente fechado
- Do segundo plano para o primeiro plano: O app retorna ao primeiro plano após o período de timeout (recomendado: 60 segundos)
Lógica de timeout de sessão
Implemente um timeout de sessão para evitar requisições SESSION excessivas durante breves períodos em que o app fica em segundo plano.
Implementação recomendada:
- Duração do timeout: 60 segundos (1 minuto)
- Primeiro plano < timeout: Não envie SESSION se o app retornar ao primeiro plano dentro do período de timeout
- Primeiro plano > timeout: Envie SESSION se o app permanecer em segundo plano além do período de timeout
- Rastreamento do ciclo de vida do app: Use eventos do ciclo de vida do app e timers para gerenciar o estado da sessão
Suporte a deep link:
Sempre envie SESSION para aberturas do app
via deep links, Universal Links ou App Links com o parâmetro
openuri
preenchido, independentemente do status de timeout.
Processamento de atribuição
Atribuição baseada em sessão
A Singular processa as requisições SESSION para determinar o tipo de atribuição e acionar os fluxos de trabalho apropriados.
| Tipo de sessão | Processamento da Singular | Resultado da atribuição |
|---|---|---|
| Primeira sessão (nova instalação) | Processo de atribuição de instalação acionado | Atribui a instalação a uma campanha de marketing |
| Qualificada para reengajamento | Processo de atribuição de reengajamento acionado | Atribui o retorno do usuário a uma campanha ou deep link |
| Sessão padrão | Sessão registrada para rastreamento de retenção | Contabilizada nas métricas de atividade e engajamento do usuário |
Saiba mais: FAQ de atribuição de reengajamento
Requisitos de ordem dos eventos
O momento das sessões e dos eventos impacta 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 SESSION deve ser recebida antes de qualquer evento daquela sessão
- Transmissão de eventos em tempo real: Os eventos in-app 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
Funcionalidades estendidas
A integração S2S da Singular suporta recursos avançados que exigem parâmetros SESSION adicionais.
Recursos avançados: Consulte Opções avançadas de S2S para requisitos de deep linking, SKAdNetwork e rastreamento entre dispositivos.
Especificação do endpoint da API
O endpoint SESSION aceita requisições GET com parâmetros de query contendo dados de dispositivo, aplicação e atribuição.
URL do endpoint
URL base e método
GET https://s2s.singular.net/api/v1/launch
Formato da requisição:
GET /api/v1/launch?param1=value1¶m2=value2
Corpo da requisição: Não forneça um corpo de requisição—todos os parâmetros devem ser enviados como parâmetros de query na URL usando o método GET.
Parâmetros obrigatórios
Todas as requisições SESSION devem incluir estes parâmetros obrigatórios com os valores e a formatação adequados.
Autenticação da API
SDK Key
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Identificadores de dispositivo
Identificadores específicos da plataforma
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Parâmetros de dispositivo
Informações do dispositivo
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Parâmetros de aplicação
Informações do app
O identificador do app (
i
),
app_v
e
att_authorization_status
são parâmetros compartilhados. Consulte
Parâmetros de aplicação em Fundamentos de S2S
.
| Parâmetro | Detalhes |
|---|---|
install
|
Indica se a sessão representa a primeira sessão após a instalação ou reinstalação.
Obrigatório para: Recursos de rastreamento de reinstalação
Exemplo:
|
install_time
iOS, Android |
Timestamp Unix da primeira instalação do app.
Exemplo:
|
update_time
iOS, Android |
Timestamp Unix da última atualização do app.
Exemplo:
|
Parâmetros de prevenção de fraude
Validação da fonte de instalação
| Parâmetro | Detalhes |
|---|---|
install_source
Android, PC |
Nome do pacote da fonte de instalação ou identificador da loja. Android: Install Source Package Name
Exemplo Android:
Lojas de PC suportadas:
|
install_receipt
iOS |
Recibo de instalação iOS codificado em Base64 para validação de fraude.
Exemplo (truncado):
|
Parâmetros de deep linking
Suporte a deep link
| Parâmetro | Detalhes |
|---|---|
openuri
iOS, Android |
Deep link, Universal Link ou App Link codificado em URL que abriu o app.
URL original:
Exemplo codificado:
|
ddl_enabled
iOS, Android |
Indica se o app espera a URL de deferred deep link na resposta.
Exemplo de resposta:
|
singular_link_resolve_required
iOS, Android |
Solicita a resolução do short link da Singular para o long link.
Deve ser usado com
Exemplo de resposta:
|
Parâmetros avançados de atribuição
Aprimoramento de atribuição por plataforma
| Parâmetro | Detalhes |
|---|---|
install_ref
Android (Google Play) Native PC (Google Play Games) |
Informações do Google Install Referrer codificadas em JSON e URL. Fornece a atribuição mais precisa para instalações no Android e no Google Play Games PC. Estrutura JSON Android:
Estrutura JSON Native PC:
Obrigatório para:
Mais informações:
Exemplo codificado em URL:
|
meta_ref
Android (Google Play) |
A partir de 18 de junho de 2025: Meta Advanced Mobile Measurement (AMM) elimina a necessidade de implementar o Meta Install Referrer. Não recomendado se o AMM estiver habilitado. Meta Install Referrer codificado em JSON e URL para dados de atribuição granulares em nível de usuário. Estrutura JSON:
Saiba mais: FAQ do Meta Referrer |
attribution_token
iOS |
Token de atribuição do Apple Search Ads do framework AdServices (iOS 14.3+). Obtido usando: attributionToken() na primeira abertura do app após instalação/reinstalação.
Exemplo (truncado):
|
Parâmetros opcionais
Os parâmetros opcionais aprimoram os recursos de rastreamento e dão suporte a recursos avançados.
Parâmetros de timestamp
| Parâmetro | Detalhes |
|---|---|
utime
|
Timestamp Unix de 10 dígitos da sessão.
Exemplo:
|
umilisec
|
Timestamp Unix de 13 dígitos com milissegundos.
Exemplo:
|
Parâmetros de rede e localização
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Propriedades personalizadas
| Parâmetro | Detalhes |
|---|---|
global_properties
|
Objeto JSON codificado em URL com pares de chave-valor personalizados. Limites:
JSON:
Codificado em URL:
|
Suporte a rastreamento de desinstalação
| Parâmetro | Detalhes |
|---|---|
apns_token
iOS |
Token de dispositivo do Apple Push Notification Service (APNs) codificado em hexadecimal.
Exemplo:
|
fcm
Android |
Token de dispositivo do Firebase Cloud Messaging.
Exemplo:
|
Parâmetros de privacidade de dados
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Suporte entre dispositivos
Estes são parâmetros S2S compartilhados definidos uma única vez em Fundamentos de S2S .
Suporte a SKAdNetwork
| Parâmetro | Detalhes |
|---|---|
skan_conversion_value
iOS |
Valor de conversão mais recente do SKAdNetwork no momento da sessão. Saiba mais: Implementação do SKAdNetwork
Exemplo:
|
skan_first_call_timestamp
iOS |
Timestamp Unix da primeira chamada à API do SKAdNetwork.
Exemplo:
|
skan_last_call_timestamp
iOS |
Timestamp Unix da chamada mais recente à API do SKAdNetwork no momento da sessão.
Exemplo:
|
Suporte a Google Ads ICM (Beta)
| Parâmetro | Detalhes |
|---|---|
odm_info
iOS |
Obrigatório para o Google Ads Integrated Conversion Measurement (Beta). |
odm_error
iOS |
Obrigatório para o Google Ads Integrated Conversion Measurement (Beta). |
Exemplos de requisição
Os exemplos de código demonstram a integração com o endpoint SESSION em várias linguagens de programação.
Aviso sobre os exemplos:
Os exemplos de código podem não incluir
todos os parâmetros obrigatórios. Valide a lista completa de parâmetros antes da
implementação em produção. Use um valor único de
i
(identificador do app)
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 requisição.
Documentação completa de erros: Códigos de resposta de S2S e tratamento de erros
Teste e validação
Verifique a integração S2S antes da implantação em produção usando o SDK Console da Singular para validação de dados em tempo real.
Procedimento de teste
Validação de ponta a ponta
- Registrar dispositivo de teste: Obtenha o ID de publicidade do dispositivo e adicione-o ao SDK Console da Singular
- Habilitar log no Console: Adicione o identificador do dispositivo no SDK Console para capturar os dados de teste
-
Usar o App ID de desenvolvimento:
Substitua o identificador do app
pela versão de desenvolvimento (por exemplo,
com.singular.app.dev) para separar os dados de teste dos de produção - Abrir o app: Abra o app a partir do estado encerrado para acionar a sessão
- Validar os dados do cliente: Confirme que o app envia todos os dados obrigatórios da Singular ao seu servidor
-
Verificar a requisição do servidor:
Confirme que seu servidor envia a
requisição SESSION para
https://s2s.singular.net/api/v1/launchcom todos os parâmetros obrigatórios - Verificar o SDK Console: Em poucos segundos, o evento SESSION deve aparecer no SDK Console
- Repetir os testes: Valide que a SESSION é acionada a cada entrada no app e operação de primeiro plano
Verificação crítica: Confirme que o evento SESSION ocorre na abertura/primeiro plano do app ANTES de qualquer requisição EVENT. Uma ordem inválida causa erros de atribuição.
Indicador de sucesso: Se a SESSION aparecer no SDK Console, você concluiu um teste de integração de ponta a ponta com sucesso!
Recursos adicionais
Documentação de teste
Guia abrangente de testes: Guia de testes de integração S2S