Referencia de la API de punto final de SESIÓN
Realice un seguimiento de las sesiones de usuario y permita la atribución para las instalaciones de aplicaciones, el reenganche 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.
Visió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 enví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.
Capacidades soportadas:
- Atribución de instalaciones: Atribución de primer contacto a campañas de marketing
- Re-engagement Attribution: Atribución multitáctil para usuarios recurrentes
- Métricas de retención: Seguimiento del compromiso basado en sesiones
- Seguimiento de eventos: Medición personalizada de eventos dentro de la aplicación
Arquitectura de flujo de datos
La integración de servidor a servidor sigue un proceso de transmisión de datos en cuatro pasos.
- Recopilación de clientes: La aplicación recopila los datos necesarios del dispositivo y la aplicación
- Transmisión al servidor: La aplicación enví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 la respuesta: Su servidor recibe y procesa la respuesta de Singular
Consideraciones clave
Requisitos críticos:
- Procesamiento en tiempo real: Solicitudes procesadas individualmente, sin soporte de lotes
- Orden secuencial: Los eventos deben enviarse cronológicamente
- Sin deduplicación: Singular no deduplica los datos; implemente la deduplicación en el servidor.
- Permanencia de los datos: Los datos a nivel de dispositivo no pueden borrarse después de la ingesta; hay que validarlos 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 los plazos de transmisión
- Paridad de funciones: Compatible con todas las funciones del SDK siempre que se proporcionen los datos adecuados.
- Implementación personalizada: Adaptación de la integración a una arquitectura 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 usuario con fines de atribución y seguimiento.
Cuándo enviar sesiones
Activadores de sesión
Envíe solicitudes de SESIÓN para estos eventos del ciclo de vida de la aplicación:
- Nuevas instalaciones: Primer lanzamiento de la aplicación tras la instalación
- Lanzamiento en 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 de un tiempo de espera (recomendado: 60 segundos)
Lógica de tiempo de espera de sesión
Implemente el tiempo de espera de sesión para evitar un número excesivo de solicitudes de SESIÓN durante un breve periodo de tiempo 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 SESIÓN si la aplicación permanece en segundo plano más allá del tiempo de espera
- Seguimiento del ciclo de vida de la aplicación: Utiliza eventos y temporizadores del ciclo de vida de la aplicación para gestionar el estado de la sesión.
Soporte de enlaces profundos: Envíe siempre SESSION para aperturas de aplicaciones 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 la atribución
Atribución basada en sesión
Singular procesa las solicitudes de SESSION para determinar el tipo de atribución y activar los flujos de trabajo apropiados.
| Tipo de sesión | Procesamiento Singular | Resultado de la atribución |
|---|---|---|
| Primera sesión (nueva instalación) | Se activa el proceso de atribución de instalación | Atribuye la instalación a la campaña de marketing |
| Reenganche cualificado | Se activa el proceso de atribución de reconexión | Atribuye 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 | Cuenta para las métricas de actividad y compromiso del usuario |
Más información: Preguntas frecuentes sobre la atribución del reenganche
Requisitos de orden de eventos
La sincronización de sesiones y eventos afecta directamente a la precisión de la atribución y a la calidad de los datos.
Reglas críticas de ordenación:
- Sesión antes que eventos: Una única SESIÓN debe recibirse antes que cualquier evento de esa sesión.
- Transmisión de eventos en tiempo real: Los eventos in-app deben enviarse en tiempo real después de su respectiva sesión
- Procesamiento secuencial: Un orden de sesión no válido provoca incoherencias en los datos y errores de atribución
Opciones avanzadas
Funcionalidad Extendida
La integración Singular S2S soporta capacidades avanzadas que requieren parámetros adicionales de SESIÓN.
Funciones avanzadas: Revise las Opciones Avanzadasde S2S para los requisitos de enlace profundo, 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 de dispositivo, aplicación y atribución.
URL del punto final
URL base y método
GET https://s2s.singular.net/api/v1/launch
Formato de la 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 de 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 singular para la autenticación de la API. Recuperar de: Singular UI → Menú principal → Herramientas para desarrolladores.
Ejemplo: Importante: No utilice Reporting API Key: las solicitudes serán rechazadas. |
Identificadores de dispositivo
Identificadores específicos de plataforma
Los identificadores de dispositivo varían según la plataforma y la disponibilidad. Incluya todos los identificadores aplicables a su plataforma.
| Parámetro | Plataforma | Descripción |
|---|---|---|
idfa
|
iOS |
El identificador para anunciantes (IDFA)permite el seguimiento de anuncios y la atribución de campañas. Requisito de ATT: iOS 14.5+ requiere que el usuario opte por el marco de transparencia de seguimiento de aplicaciones.
Ejemplo: |
idfv
|
iOS |
El identificador para proveedores (IDFV)es coherente para 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 ID de publicidad de Google (GAID)permite el seguimiento de publicidad restablecible por el usuario en Android.
Ejemplo: |
asid
|
Android (Google Play) |
El ID de conjunto de aplicaciones de Androidproporciona un seguimiento de aplicaciones cruzadas con conciencia de la privacidad para el mismo desarrollador. Siempre obligatorio: Debe incluirse en los dispositivos Google Play independientemente de la disponibilidad del GAID.
Ejemplo: |
amid
|
Android (Amazon) |
ID de publicidad de Amazonpara dispositivos Amazon sin Google Play Services.
Ejemplo: |
oaid
|
Android (OEM chinos) |
Identificador de publicidad abierto (OAID) para dispositivos fabricados en China sin Google Play Services (Huawei, Xiaomi, OPPO, etc.).
Ejemplo: |
andi
|
Android (Sin Google Play) |
Android ID es un identificador de 64 bits generado por el dispositivo. Uso restringido: Prohibido en dispositivos Google Play; en su lugar, utiliza AIFA y ASID. Sólo enviar 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 identificador de dispositivo singular es un UUIDv4 generado por el cliente que representa una instalación de aplicación singular. Identificador primario: Único identificador de dispositivo utilizado para aplicaciones de PC y consola.
Ejemplo: |
sing
|
Sólo para empresas |
Identificador definido por el cliente para casos de uso especiales en los que los identificadores estándar no están disponibles. Restringido: Sólo para clientes empresariales - debe ser habilitado por Singular Solution Engineer 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 las 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 marca del dispositivo
Ejemplos: |
moiOS, Android |
Modelo de dispositivo. Debe utilizarse con Recuperar modelo de dispositivo
Ejemplos: |
lciOS, Android |
Etiqueta de configuración regional IETF: código de idioma y país de dos letras separado por un guión bajo. Recuperar configuración regional del dispositivo
Ejemplo: |
bdiOS, Android |
Identificador de construcción del dispositivo, codificado en URL. Recuperar compilación de 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 mayúsculas de minúsculas).
Ejemplo: |
app_v
|
Versión de la aplicación.
Ejemplo: |
install
|
Indica si la sesión representa la primera sesión tras una instalación o reinstalación.
Necesario para: Capacidad de seguimiento de la reinstalación
Ejemplo |
install_timeiOS, Android |
Marca de tiempo Unix de la primera instalación de la aplicación.
Ejemplo: iOS, Android |
update_timeiOS, Android |
Unix timestamp de la última actualización de la aplicación.
Ejemplo: |
att_authorization_statusiOS |
Código de estado de App Tracking Transparency (ATT) (iOS 14.5+). Valores de estado:
Siempre obligatorio: Incluso si ATT no está implementado, pase
Ejemplo: |
Parámetros de prevención del fraude
Instalar validación de origen
| Parámetro | Descripción |
|---|---|
install_sourceAndroid, PC |
Nombre del paquete fuente de instalación o identificador de tienda. Android: Instalar nombre de paquete fuente
Ejemplo de Android: Tiendas compatibles con PC:
|
install_receiptiOS |
Recibo de instalación de iOS codificado en Base64 para validación de fraude.
Ejemplo (truncado): |
Parámetros de enlace profundo
Soporte de enlaces profundos
| Parámetro | Descripción |
|---|---|
openuriiOS, Android |
Enlace profundo codificado como 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 en la respuesta.
Ejemplo de respuesta:
|
singular_link_resolve_requirediOS, Android |
Solicita la resolución de enlace corto singular a enlace largo. Debe utilizarse con
Ejemplo de respuesta:
|
Parámetros de atribución avanzada
Mejora de la atribución de plataformas
| Parámetro | Descripción |
|---|---|
install_refAndroid (Google Play) |
Información de referencia de instalación de Google codificada en URL JSON. Proporciona la atribución más precisa para las instalaciones de Android. Estructura JSON:
Necesario para:
Más información: Documentación de Google Install Referrer
Ejemplo de URL codificada: |
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á activado. Meta Install Referrer codificado en URL JSON para datos granulares de atribución a nivel de usuario. Estructura JSON:
Más información: Meta Referrer FAQ |
attribution_tokeniOS |
Apple Search Ads attribution token del marco AdServices (iOS 14.3+). Recuperación mediante: attributionToken()al iniciar la aplicación por primera vez tras 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 petición HTTP en lugar del parámetro Limitaciones:
Ejemplo: |
country
|
Código de país de dos letras ISO 3166-1 alpha-2.
Obligatorio cuando: Dirección IP no disponible o
Ejemplo: |
ua
|
Cadena de agente de usuario codificada en URL.
En bruto:
Codificado: |
ciOS, Android |
Tipo de conexión de red.
Valores permitidos:
Ejemplo: |
cniOS, Android |
Nombre 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:
URL codificada: |
Soporte de seguimiento de desinstalación
| Parámetro | Descripción |
|---|---|
apns_tokeniOS |
Token de dispositivo Apple Push Notification Service (APNs) codificado en hexadecimal.
Ejemplo: |
fcmAndroid |
Token de dispositivo de Firebase Cloud Messaging.
Ejemplo: |
Parámetros de privacidad de datos
| Parámetro | Descripción |
|---|---|
data_sharing_options
|
JSON Consentimiento del usuario final codificado en URL para compartir datos. Debe persistir y transmitirse en todas las solicitudes posteriores de SESSION y EVENT. El usuario ha dado su consentimiento (Opted-In):
Usuario rechazado (Opted-Out):
URL codificada Ejemplo: |
dntiOS, Android |
Estado de Do Not Track.
Ejemplo: |
dntoffiOS, Android |
Indica si Do Not Track está desactivado.
Ejemplo: |
Compatibilidad entre dispositivos
| Parámetro | Descripción |
|---|---|
custom_user_id
|
Su ID de usuario interno para el seguimiento entre dispositivos.
Ejemplo: |
Soporte SKAdNetwork
| Parámetro | Descripción |
|---|---|
skan_conversion_valueiOS |
Último valor de conversión de SKAdNetwork en el momento de la sesión. Más información: Implementación de SKAdNetwork
Ejemplo: |
skan_first_call_timestampiOS |
Marca de tiempo Unix de la primera llamada a la API SKAdNetwork.
Ejemplo: |
skan_last_call_timestampiOS |
Unix timestamp de la última llamada a la API de SKAdNetwork en el momento de la sesión.
Ejemplo: |
Soporte ICM de Google Ads (Beta)
| Parámetro | Descripción |
|---|---|
odm_infoiOS |
Requerido para Google Ads Integrated Conversion Measurement (Beta). |
odm_erroriOS |
Necesario para la Medición de conversiones integrada de Google Ads (Beta). |
Ejemplos de solicitud
El código de ejemplo demuestra 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 de producción. Utilice i (identificador de aplicación) único para el desarrollo y las pruebas.
Ejemplo de 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 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: S2S Response Codes & Error Handling
Pruebas y validación
Verifique la integración de S2S antes del despliegue de producción utilizando Singular SDK Console para la validación de datos en tiempo real.
Procedimiento de prueba
Validación de extremo a extremo
- Registre el dispositivo de prueba: Obtenga el ID de publicidad del dispositivo y añádalo a Singular SDK Console
- Habilitar registro en consola: Añadir identificador de dispositivo en SDK Console para capturar datos de prueba
-
Usar ID de aplicación de desarrollo: Sustituya el identificador de la aplicación con la versión de desarrollo (por ejemplo,
com.singular.app.dev) para separar los datos de prueba de los de producción. - Iniciar aplicación: Abrir la aplicación desde el estado finalizado para activar la sesión
- Validar datos del cliente: Confirme que la aplicación envía todos los puntos de datos Singular necesarios a su servidor.
-
Verifique la solicitud del servidor: Confirme que su servidor envía la solicitud de SESIÓN a
https://s2s.singular.net/api/v1/launchcon todos los parámetros requeridos. - Compruebe la consola SDK: En cuestión de segundos, el evento SESSION debería aparecer en la consola SDK.
- Repita las pruebas: Compruebe que SESSION se activa en cada entrada de la aplicación y en cada 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 no válido provoca errores de atribución.
Indicador de éxito: Si SESSION aparece en la consola del SDK, habrá completado con éxito la prueba de integración de extremo a extremo.
Recursos adicionales
Documentación de pruebas
Guíacompleta de pruebas: Guía de pruebas de integración de S2S