Referencia de la API de punto final de SESIÓN
Realice un seguimiento de las sesiones de los usuarios y habilite la atribución para las instalaciones de aplicaciones, la reactivación y las métricas de retención a través de la API REST de Singular utilizando la integración de servidor a servidor como alternativa a la implementación del SDK.
Descripción general
Caso de uso de servidor a servidor
La API REST de Singular permite la integración directa de servidor a servidor, en la que las aplicaciones reenvían datos específicos del dispositivo a su backend, que los transmite a los servidores de Singular para el procesamiento de la atribución y la generación de informes analíticos.
Funciones compatibles:
- Atribución de instalaciones: atribución de primer contacto a campañas de marketing
- Atribución de reenganche: atribución multitoque para usuarios que regresan
- Métricas de retención: seguimiento de la interacción basado en sesiones
- Seguimiento de eventos: medición personalizada de eventos en la aplicación
Arquitectura de flujo de datos
La integración de servidor a servidor sigue un proceso de transmisión de datos de cuatro pasos.
- Recopilación del cliente: la aplicación recopila los datos necesarios del dispositivo y la aplicación
- Transmisión del servidor: la aplicación reenvía los datos recopilados a su servidor backend
- Llamada a la API de Singular: su servidor envía los datos al punto final de la API REST de Singular
- Gestión de respuestas: su servidor recibe y procesa la respuesta de Singular
Consideraciones clave
Requisitos críticos:
- Procesamiento en tiempo real: las solicitudes se procesan individualmente, sin soporte por lotes
- Orden secuencial: los eventos deben enviarse cronológicamente
- Sin deduplicación: Singular no deduplica los datos; implemente la deduplicación del lado del servidor
- Permanencia de los datos: los datos a nivel de dispositivo no se pueden eliminar después de su ingestión; valídelos antes de enviarlos
- Primero la sesión: la sesión debe establecerse antes de cualquier seguimiento de eventos
Ventajas de la integración:
- Flexibilidad: control total sobre la recopilación de datos y el momento de la transmisión
- Paridad de funciones: admite todas las funciones del SDK cuando se proporcionan los datos adecuados
- Implementación personalizada: adapta la integración a la arquitectura de backend específica
Gestión de sesiones
El punto final SESSION notifica a Singular los eventos de apertura de la aplicación para inicializar las sesiones de los usuarios para la atribución y el seguimiento.
Cuándo enviar sesiones
Desencadenantes de sesión
Envíe solicitudes SESSION para estos eventos del ciclo de vida de la aplicación:
- Instalaciones nuevas: primer inicio de la aplicación después de la instalación
- Inicio desde estado cerrado: la aplicación se abre desde un estado completamente cerrado .
- De segundo plano a primer plano: la aplicación vuelve al primer plano después del periodo de tiempo de espera (recomendado: 60 segundos)
Lógica de tiempo de espera de la sesión
Implemente un tiempo de espera de sesión para evitar solicitudes SESSION excesivas durante breves periodos en segundo plano de la aplicación.
Implementación recomendada:
- Duración del tiempo de espera: 60 segundos (1 minuto)
- Primer plano < Tiempo de espera: No enviar SESSION si la aplicación vuelve al primer plano dentro del periodo de tiempo de espera
- Primer plano > Tiempo de espera: enviar SESSION si la aplicación permanece en segundo plano más allá del periodo de tiempo de espera
- Seguimiento del ciclo de vida de la aplicación: utilice eventos y temporizadores del ciclo de vida de la aplicación para gestionar el estado de la sesión
Compatibilidad con enlaces profundos: envía siempre SESSION para las aplicaciones que se abren
a través de enlaces profundos, enlaces universales o enlaces de aplicaciones con el
parámetro openuri rellenado, independientemente del estado del tiempo de espera.
Procesamiento de atribución
Atribución basada en sesiones
Singular procesa las solicitudes SESSION para determinar el tipo de atribución y activar los flujos de trabajo adecuados.
| Tipo de sesión | Procesamiento de Singular | Resultado de la atribución |
|---|---|---|
| Primera sesión (nueva instalación) | Proceso de atribución de la instalación activado | Atribuir la instalación a la campaña de marketing |
| Reenganche cualificado | Proceso de atribución de reenganche activado | Atribuir el retorno del usuario a la campaña o al enlace profundo |
| Sesión estándar | Sesión registrada para el seguimiento de la retención | Se cuenta para las métricas de actividad y compromiso del usuario |
Más información: Preguntas frecuentes sobre la atribución de reenganche
Requisitos de orden de eventos
La sincronización de la sesión y el evento influye directamente en la precisión de la atribución y la calidad de los datos .
Reglas de ordenación críticas:
- Sesión antes de los eventos: se debe recibir una única SESIÓN antes de cualquier evento de esa sesión
- Transmisión de eventos en tiempo real: los eventos dentro de la aplicación deben enviarse en tiempo real después de su sesión respectiva
- Procesamiento secuencial: un orden de sesión no válido da lugar a inconsistencias en los datos y errores de atribución
Opciones avanzadas
Funcionalidad ampliada
La integración S2S singular admite capacidades avanzadas que requieren parámetros de SESIÓN adicionales .
Funciones avanzadas: Revise las opciones S2S avanzadas para conocer los requisitos de enlaces profundos, SKAdNetwork y seguimiento entre dispositivos.
Especificación del punto final de la API
El punto final SESSION acepta solicitudes GET con parámetros de consulta que contienen datos del dispositivo, la aplicación y la atribución.
URL del punto final
URL base y método
GET https://s2s.singular.net/api/v1/launch
Formato de solicitud:
GET /api/v1/launch?param1=value1¶m2=value2
Cuerpo de la solicitud: No proporcione el cuerpo de la solicitud; todos los parámetros deben enviarse como parámetros de consulta de URL utilizando el método GET.
Parámetros obligatorios
Todas las solicitudes SESSION deben incluir estos parámetros obligatorios con los valores y el formato adecuados .
Autenticación de API
Clave SDK
| Parámetro | Tipo | Descripción |
|---|---|---|
a
|
string
|
Clave SDK de Singular para la autenticación API. Recuperar desde: Singular UI → Menú principal → Herramientas para desarrolladores
Ejemplo: Importante: No utilice la clave API de informes, ya que las solicitudes serán rechazadas. |
Identificadores de dispositivos
Identificadores específicos de la plataforma
Los identificadores de dispositivo varían según la plataforma y la disponibilidad. Incluya todos los identificadores aplicables para su plataforma.
| Parámetro | Plataforma | Descripción |
|---|---|---|
idfa
|
iOS |
Identificador para anunciantes (IDFA) permite el seguimiento de anuncios y la atribución de campañas. Requisito ATT: iOS 14.5+ requiere la aceptación del usuario a través del marco de transparencia de seguimiento de aplicaciones
Ejemplo: |
idfv
|
iOS |
Identificador para proveedores (IDFV) Se mantiene constante en todas las aplicaciones del mismo proveedor. Siempre obligatorio: debe incluirse independientemente del estado de ATT o de la disponibilidad de IDFA
Ejemplo: |
aifa
|
Android (Google Play) |
El identificador de publicidad de Google (GAID) permite el seguimiento publicitario restablecible por el usuario en Android.
Ejemplo: |
asid
|
Android (Google Play) |
ID de configuración de la aplicación Android Proporciona un seguimiento entre aplicaciones que respeta la privacidad para el mismo desarrollador. Siempre necesario: debe incluirse en los dispositivos Google Play independientemente de la disponibilidad de GAID
Ejemplo: |
amid
|
Android (Amazon) |
Identificador de publicidad de Amazon para dispositivos Amazon sin Google Play Services.
Ejemplo: |
oaid
|
Android (fabricantes chinos) |
Identificador publicitario abierto (OAID) para dispositivos fabricados en China sin Google Play Services (Huawei, Xiaomi, OPPO, etc.).
Ejemplo: |
andi
|
Android (Sin Google Play) |
El ID de Android es un identificador de 64 bits generado por el dispositivo. Uso restringido: prohibido en dispositivos Google Play; utilice AIFA y ASID en su lugar. Envíelo solo si no hay otros identificadores disponibles y la aplicación no se distribuye a través de Google Play.
Ejemplo: |
sdid
|
PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV |
El ID de dispositivo único es un UUIDv4 generado por el cliente que representa la instalación única de la aplicación. Identificador principal: único identificador de dispositivo utilizado para aplicaciones de PC y consola
Ejemplo: |
sing
|
Solo para empresas |
Identificador definido por el cliente para casos de uso especiales en los que no están disponibles los identificadores estándar. Restringido: solo para clientes empresariales ; debe ser habilitado por el ingeniero de soluciones de Singular para cada aplicación. Póngase en contacto con CSM para obtener más información.
Ejemplo: |
Parámetros del dispositivo
Información del dispositivo
| Parámetro | Descripción |
|---|---|
p
|
Plataforma de la aplicación. Valores permitidos (distingue entre mayúsculas y minúsculas):
Ejemplo: |
ip
|
Dirección IPv4 pública del dispositivo. Se admite IPv6, pero se recomienda IPv4 para la compatibilidad de atribución con redes publicitarias .
Ejemplo: |
ve
|
Versión del sistema operativo del dispositivo en el momento de la sesión.
Ejemplo: |
maiOS, Android |
Marca del dispositivo (nombre del fabricante). Debe utilizarse con Recuperar la marca del dispositivo
Ejemplos: |
moiOS, Android |
Modelo del dispositivo. Debe utilizarse con Recuperar el modelo del dispositivo
Ejemplos: |
lciOS, Android |
Etiqueta de configuración regional IETF: código de dos letras del idioma y el país separados por un guión bajo. Recuperar la configuración regional del dispositivo
Ejemplo: |
bdiOS, Android |
Identificador de compilación del dispositivo, codificado en URL. Recuperar la compilación del dispositivo
Ejemplo: |
Parámetros de la aplicación
Información de la aplicación
| Parámetro | Descripción |
|---|---|
i
|
Identificador de la aplicación (distingue entre mayúsculas y minúsculas).
Ejemplo: |
app_v
|
Versión de la aplicación.
Ejemplo: |
install
|
Indica si la sesión es la primera sesión tras la instalación o reinstalación.
Requerido para: Capacidades de seguimiento de reinstalación
Ejemplo: |
install_timeiOS, Android |
Marca de tiempo Unix de la primera instalación de la aplicación.
Ejemplo: |
update_timeiOS, Android |
Marca de tiempo Unix de la última actualización de la aplicación.
Ejemplo: |
att_authorization_statusiOS |
Código de estado de transparencia de seguimiento de aplicaciones (ATT) (iOS 14.5+). Valores de estado:
Siempre requerido: incluso si ATT no
está implementado, pasar
Ejemplo: |
Parámetros de prevención del fraude
Validación de la fuente de instalación
| Parámetro | Descripción |
|---|---|
install_sourceAndroid, PC |
Nombre del paquete de instalación o identificador de la tienda. Android:Instalar nombre del paquete fuente
Ejemplo para Android: Tiendas compatibles con PC:
|
install_receiptiOS |
Recibo de instalación de iOS codificado en Base64 para la validación de fraudes.
Ejemplo (truncado): |
Parámetros de enlaces profundos
Compatibilidad con enlaces profundos
| Parámetro | Descripción |
|---|---|
openuriiOS, Android |
Enlace profundo codificado en URL, enlace universal o enlace de aplicación que abrió la aplicación.
URL original:
Ejemplo codificado: |
ddl_enablediOS, Android |
Indica si la aplicación espera una URL de enlace profundo diferido como respuesta.
Respuesta de ejemplo:
|
singular_link_resolve_requirediOS, Android |
Solicita la resolución del enlace corto de Singular a un enlace largo.
Debe utilizarse con
Respuesta de ejemplo:
|
Parámetros de atribución avanzados
Mejora de la atribución de la plataforma
| Parámetro | Descripción |
|---|---|
install_refAndroid (Google Play) PC nativo (Google Play Games) |
Información de referencia de instalación de Google codificada en JSON URL. Proporciona la atribución más precisa para las instalaciones de Android y Google Play Games PC. Estructura JSON de Android:
Estructura JSON de PC nativa:
Requerido para:
Más información:
Ejemplo codificado en URL: |
meta_refAndroid (Google Play) |
A partir del 18 de junio de 2025:Meta Advanced Mobile Measurement (AMM) elimina la necesidad de implementar Meta Install Referrer. No se recomienda si AMM está habilitado. Meta Install Referrer codificado en JSON URL para datos de atribución granulares a nivel de usuario. Estructura JSON: Estructura JSON:
Más información: Preguntas frecuentes sobre Meta Referrer |
attribution_tokeniOS |
Token de atribución de Apple Search Ads del marco AdServices (iOS 14.3+). Recuperar utilizando:attributionToken() al iniciar la aplicación por primera vez después de la instalación o reinstalación.
Ejemplo (truncado): |
Parámetros opcionales
Los parámetros opcionales mejoran las capacidades de seguimiento y admiten funciones avanzadas .
Parámetros de marca de tiempo
| Parámetro | Descripción |
|---|---|
utime
|
Marca de tiempo Unix de 10 dígitos de la sesión.
Ejemplo: |
umilisec
|
Marca de tiempo Unix de 13 dígitos con milisegundos.
Ejemplo: |
Parámetros de red y ubicación
| Parámetro | Descripción |
|---|---|
use_ip
|
Indica a Singular que extraiga la dirección IP de la solicitud HTTP
en lugar del parámetro Limitaciones:
Ejemplo: |
country
|
ISO 3166-1alfa-2 código de país de dos letras.
Requerido cuando: la dirección IP no está disponible
o
Ejemplo: |
ua
|
Cadena de agente de usuario codificada en URL.
Sin procesar:
Codificado:
|
ciOS, Android |
Tipo de conexión de red.
Valores permitidos:
Ejemplo: |
cniOS, Android |
Nombre del operador del proveedor de Internet.
Ejemplo: |
Propiedades personalizadas
| Parámetro | Descripción |
|---|---|
global_properties
|
Objeto JSON codificado en URL con pares clave-valor personalizados. Límites:
JSON:
Codificado en URL:
|
Soporte para seguimiento de desinstalación
| Parámetro | Descripción |
|---|---|
apns_tokeniOS |
Token de dispositivo del Servicio de notificaciones push de Apple (APNs) codificado en hexadecimal. Requerido para el seguimiento de desinstalaciones en iOS.
Ejemplo:
|
fcmAndroid |
Token de dispositivo de Firebase Cloud Messaging.
Ejemplo:
|
Parámetros de privacidad de datos
| Parámetro | Descripción |
|---|---|
data_sharing_options
|
Consentimiento del usuario final codificado en JSON URL para compartir datos. Debe persistir y transmitirse en todas las solicitudes SESSION y EVENT posteriores. Usuario consentido (optado por participar):
Usuario rechazado (optado por no participar):
Ejemplo codificado en URL:
|
dntiOS, Android |
Estado de «No rastrear».
Ejemplo: |
dntoffiOS, Android |
Indica si «No rastrear» está desactivado.
Ejemplo: |
Compatibilidad entre dispositivos
| Parámetro | Descripción |
|---|---|
custom_user_id
|
Su ID de usuario interno para el seguimiento entre dispositivos.
Ejemplo: |
Compatibilidad con SKAdNetwork
| Parámetro | Descripción | |
|---|---|---|
skan_conversion_value iOS | ||
skan_first_call_timestampiOS |
Marca de tiempo Unix de la primera llamada a la API de SKAdNetwork.
Ejemplo: |
|
skan_last_call_timestampiOS |
Marca de tiempo Unix de la llamada más reciente a la API de SKAdNetwork en el momento de la sesión.
Ejemplo: |
Compatibilidad con Google Ads ICM (Beta)
| Parámetro | Descripción |
|---|---|
odm_infoiOS |
Necesario para la medición de conversiones integrada de Google Ads (Beta). |
odm_erroriOS |
Necesario para la medición de conversiones integrada de Google Ads (Beta). |
Ejemplos de solicitud
El código de ejemplo muestra la integración del punto final SESSION en varios lenguajes de programación.
Descargo de responsabilidad del ejemplo: es posible que los ejemplos de código no incluyan
todos los parámetros necesarios. Valide la lista completa de parámetros antes de
la implementación en producción. Utilice un identificador de aplicación ( i ) único
para el desarrollo y las pruebas.
Ejemplo en 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())
Ejemplo de 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"
Ejemplo 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
Ejemplo en 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 respuesta y errores
El punto final SESSION devuelve códigos de estado HTTP y respuestas JSON que indican el éxito o el fracaso de la solicitud.
Documentación completa sobre errores: Códigos de respuesta S2S y gestión de errores
Pruebas y validación
Verifique la integración S2S antes de la implementación en producción utilizando la consola Singular SDK para la validación de datos en tiempo real.
Procedimiento de prueba
Validación de extremo a extremo
- Registrar dispositivo de prueba: Obtenga el ID de publicidad del dispositivo y añádalo a la consola SDK de Singular
- Habilite el registro de la consola: añada el identificador del dispositivo en la consola SDK para capturar los datos de prueba
-
Utilice el ID de la aplicación de desarrollo: sustituya el identificador de la aplicación
por la versión de desarrollo (por ejemplo,
com.singular.app.dev) para separar la prueba de los datos de producción - Iniciar la aplicación: abra la aplicación desde el estado terminado para activar la sesión
- Validar datos del cliente: confirme que la aplicación envía todos los puntos de datos de Singular necesarios a su servidor
-
Verificar la solicitud del servidor: confirme que su servidor envía
la solicitud SESSION a
https://s2s.singular.net/api/v1/launchcon todos los parámetros necesarios - Compruebe la consola SDK: en cuestión de segundos, el evento SESSION debería aparecer en la consola SDK
- Repetir pruebas: valida los desencadenantes de SESSION en cada entrada de la aplicación y operación en primer plano
Verificación crítica: confirme que el evento SESSION se produce al abrir la aplicación/en primer plano ANTES de cualquier solicitud EVENT. Un orden incorrecto provoca errores de atribución.
Indicador de éxito: si SESSION aparece en la consola SDK, ¡ha completado con éxito la prueba de integración de extremo a extremo!
Recursos adicionales
Documentación de pruebas
Guía de pruebas completa: Guía de pruebas de integración S2S