RudderStack es una plataforma de datos de clientes (CDP) de código abierto que permite a las empresas recopilar, unificar y enrutar los datos de los clientes a diversos destinos. Ofrece una plataforma centralizada para administrar los pipelines de datos de clientes, permitiendo a las organizaciones recopilar fácilmente datos de diversas fuentes, como sitios web, aplicaciones móviles, servidores y servicios en la nube.
Singular puede recibir datos de eventos de Rudderstack a través de las REST API Server-to-Server (S2S) de Singular para actividad móvil de iOS y Android. Esto se conoce como un destino de "Cloud-Mode" . Las instrucciones a continuación ilustran cómo agregar el destino de Singular en Rudderstack.
| Guía para | Equipos de ingeniería |
| Requisitos previos | Este artículo asume que ya tiene el SDK de Rudderstack para iOS o Android integrado en su aplicación. |
Para usar esta integración, debe utilizar los SDK móviles de Rudderstack. Esta integración NO es compatible con datos de eventos no móviles. No se admiten eventos de servidor ni web.
RudderStack admite dos tipos de eventos de track que puede enviar a Singular mediante "Cloud-Mode":
- Eventos de sesión
- Eventos personalizados
- Atribución básica de instalaciones
- Atribución mediante Google Install Referrer
- Compatibilidad con SkAdNetwork versión 3 (modo manual)
- Atribución de Apple Search Ads
- Seguimiento de eventos in-app personalizados
- Seguimiento de ingresos
- Custom User ID
- Seguimiento de desinstalaciones
- Compatibilidad con Limited Data Sharing (consentimiento)
- Singular Device ID (SDID) mediante API v2
- Compatibilidad con SkAdNetwork versión 4
- Modo gestionado de SkAdNetwork para modelos de conversión
- Atribución mediante META Install Referrer
- Deep linking
Si necesita compatibilidad S2S para la "funcionalidad completa" que ofrece Singular, debe implementar las REST API S2S de Singular de forma independiente de Rudderstack. Consulte la Guía de integración Server-to-Server (S2S) AQUÍ .
Singular Device ID (SDID) y versión de la API
La versión de la API de Singular que utiliza RudderStack depende de los campos de identificador presentes en el evento:
-
Si el
Singular Device ID (SDID)
está presente en el evento, RudderStack utiliza automáticamente la
API v2
de Singular e ignora los identificadores tradicionales específicos de la plataforma (
idfa,andi,idfv,aifa). - De lo contrario, RudderStack recurre a los identificadores específicos de la plataforma y envía el evento utilizando la API v1 de Singular.
Para enviar el Singular Device ID (y, opcionalmente, el consentimiento de intercambio de datos), incluya
singularDeviceId
y
limitDataSharing
dentro del objeto
integrations.Singular
de su evento:
rudderanalytics.track(
"Order Completed", {
revenue: 30,
currency: "USD"
}, {
integrations: {
Singular: {
singularDeviceId: "SINGULAR_DEVICE_ID",
limitDataSharing: true // optional
}
}
}
);
Primeros pasos
- Desde su panel de RudderStack , agregue la fuente. Luego, en la lista de destinos, seleccione Singular .
- Asigne un nombre a su destino y haga clic en Continuar .
Configuración de la conexión
Para configurar correctamente Singular como destino, debe establecer los siguientes ajustes:
-
API Key:
Ingrese aquí su
"SDK Key"
de Singular. Este es un campo obligatorio.
Obtenga su "SDK KEY" de Singular, que se encuentra en el Singular Dashboard, en "Developer Tools > SDK Integration > SDK Keys" .
Nota: Para la integración "Cloud-Mode", SOLO ingresará el valor de la API Key (SDK Key) .
Deje el campo "Secret" en blanco. -
Session Event Name:
Ingrese los nombres de los eventos que se usarán como eventos de sesión. Este ajuste solo aplica al envío de eventos mediante cloud mode.
RudderStack envía los eventos de sesión a Singular a través de la API launch de Singular.
RudderStack considera un evento como evento de sesión solo si está especificado en la configuración del panel o si es uno de los siguientes tres eventos de ciclo de vida :
- Application Installed
- Application Opened
- Application Updated
RudderStack rastrea automáticamente los tres eventos de ciclo de vida anteriores si el seguimiento de eventos de ciclo de vida está habilitado.
- Use device mode to send events: Estas opciones deben estar deshabilitadas cuando se usa "Cloud Mode" . Al usar las plataformas Android o iOS, puede habilitar este ajuste para enviar eventos mediante device mode. Luego, siga la guía de Singular Device Mode para conocer los pasos para agregar Singular a su proyecto.
- Filtrado de eventos del lado del cliente: Especifica qué eventos deben bloquearse o permitirse hacia Singular. Consulta la guía Client-side Events Filtering para obtener más información.
- Configuración de gestión de consentimiento: Configura los ajustes de gestión de consentimiento para la fuente eligiendo el proveedor de gestión de consentimiento en el menú desplegable e ingresando los IDs de categoría de consentimiento correspondientes. Consulta Consent Management in RudderStack para obtener más información.
Configuración del SDK de Unity
La siguiente configuración se aplica cuando se usa Unity como fuente:
| Configuración | Descripción |
|---|---|
| Match ID mapping | Usa esta configuración para asignar el match ID de Singular a uno de los siguientes campos de evento: context.device.advertisingId o properties.match_id. |
Requisitos de los eventos de sesión
Mapeos de eventos de SESSION admitidos
Esta sección enumera los mapeos de las propiedades de eventos de RudderStack a los campos correspondientes de Singular.
La siguiente tabla enumera el mapeo de los atributos capturados automáticamente por RudderStack para las plataformas móviles ( Android e iOS ):
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
context.os.name |
p |
Obligatorio | La plataforma de origen (Android o iOS). |
context.app.namespace |
i |
Obligatorio | El nombre del paquete (Android) o el bundle ID (iOS) de su aplicación. |
context.app.version |
app_v |
Obligatorio | La versión de la aplicación. |
context.ip / request_ip(en ese orden) |
ip |
Obligatorio | La dirección IP del usuario. Consulte la nota a continuación para obtener información sobre cómo anonimizar su IP. |
context.os.version |
ve |
Obligatorio | La versión del sistema operativo del dispositivo en el momento de la sesión. |
context.device.model |
mo |
Obligatorio | El modelo del dispositivo. Este parámetro debe usarse junto con el parámetro ma. |
context.device.manufacturer |
ma |
Obligatorio | La marca del hardware del dispositivo. Este parámetro debe usarse junto con el parámetro mo. |
context.locale |
lc |
Obligatorio | La etiqueta de configuración regional IETF del dispositivo, usando un código de idioma y país de dos letras, separados por un guion bajo. |
context.device.id |
idfv |
Obligatorio | El IdentifierForVendor sin procesar, en mayúsculas y con guiones. Esto aplica únicamente a las aplicaciones de iOS . |
context.device.id |
andi |
Obligatorio | El Android ID sin procesar, en minúsculas. Esto aplica únicamente a las aplicaciones de Android y es obligatorio si el advertising ID (aifa) y el App Set ID (asid) están ausentes. Consulte las preguntas frecuentes a continuación para obtener más información. |
context.app.build |
bd |
Obligatorio | La compilación del dispositivo (codificada en URL). |
context.device.adTrackingEnabled |
dnt |
Obligatorio | Pase true si do not track (dnt) está deshabilitado (dnt=0); de lo contrario, pase false (dnt=1). Esto se captura automáticamente si pasa el advertising ID al SDK. |
context.app.name |
n |
Opcional | El nombre legible de la aplicación tal como se muestra en la interfaz de usuario. |
timestamp / originalTimestamp |
utime |
Opcional | La hora de la sesión (en tiempo UNIX). |
context.network.wifi |
c |
Opcional | El tipo de conexión (WiFi u operador). |
context.network.carrier |
cn |
Opcional | El nombre del operador del proveedor de internet. |
integrations.Singular.limitDataSharing |
data_sharing_options.limit_data_sharing |
Opcional | Consentimiento del usuario para el intercambio de datos, codificado como JSON en URL. Debe persistir y pasarse en todas las solicitudes de eventos posteriores. |
Para anonimizar su IP, puede enviar una IP de marcador de posición en el campo context.ip . RudderStack la usa como la dirección IP en lugar de capturarla automáticamente desde el backend. En el caso de los SDK móviles, puede aprovechar la función Transformations para hacerlo, al enviar eventos mediante cloud mode .
La siguiente tabla enumera el mapeo de los atributos que deben pasarse a través de las propiedades del evento:
Estas propiedades no se conservan en el SDK y deben pasarse con cada evento.
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
properties.install_ref |
install_ref |
Obligatorio | La información de Google Install Referrer. |
properties.referring_application |
install_source |
Obligatorio | El nombre del paquete de la fuente de instalación en Android. Use getInitiatingPackageName() para obtenerlo. |
properties.install_receipt |
install_receipt |
Obligatorio | El recibo recibido de la instalación. Para obtenerlo, siga la guía de iOS Install Receipt . |
properties.asid |
asid |
Obligatorio | El App Set ID para dispositivos Android v12+. Obligatorio si el advertising ID (aifa) y el Android ID (andi) están ausentes. Consulte las preguntas frecuentes a continuación para obtener más información. |
properties.url |
openui |
Obligatorio | Si la aplicación se abre mediante un deep link/universal link, el valor de la URL del deep link codificada. |
context.device.attTrackingStatus |
att_authorization_status |
Obligatorio | El estado de autorización de App Tracking Transparency . |
userId |
custom_user_id |
Opcional | El ID de usuario pasado a través de la llamada identify. |
properties.attribution_token |
attribution_token |
Opcional | Se usa para atribuir Apple Search Ads en iOS 14.3 y versiones posteriores. Más información aquí . |
properties.skan_conversion_value |
skan_conversion_value |
Opcional | El último valor de SkAdNetwork en el momento de la notificación de sesión. |
properties.skan_first_call_timestamp |
skan_first_call_timestamp |
Opcional | Timestamp UNIX de la primera llamada realizada a la API de SkAdNetwork. |
properties.skan_last_call_timestamp |
skan_last_call_timestamp |
Opcional | Timestamp UNIX de la última llamada realizada a la API de SkAdNetwork en el momento de la notificación de sesión. |
properties.install |
install |
Opcional | El indicador de instalación. Establézcalo en true en la primera sesión después de la instalación de la aplicación, o en false en caso contrario. Obligatorio para la capacidad de seguimiento de reinstalaciones. |
properties.install_time / timestamp / originalTimestamp |
install_time |
Opcional | La hora de instalación (en tiempo UNIX). |
properties.update_time / timestamp / originalTimestamp |
update_time |
Opcional | La hora de actualización (en tiempo UNIX). |
La siguiente tabla enumera el mapeo de los atributos que deben pasarse a través de las propiedades del evento una sola vez:
Estas propiedades se conservan en el SDK y deben pasarse una sola vez.
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
context.device.token |
fcm |
Opcional | El token de dispositivo de Firebase Cloud Messaging. Es obligatorio para el seguimiento de desinstalaciones en Android. |
context.device.token |
apns_token |
Opcional | El token de dispositivo de Apple Push Notification Service. Es obligatorio para el seguimiento de desinstalaciones en iOS. |
context.device.advertisingId |
idfa |
Obligatorio | El advertising ID sin procesar, en mayúsculas y con guiones. Esto aplica únicamente a las aplicaciones de iOS . |
context.device.advertisingId |
aifa |
Obligatorio | Este es el advertising ID sin procesar, en minúsculas y con guiones. Esto aplica únicamente a las aplicaciones de Android . Obligatorio si el App Set ID (asid) y el Android ID (andi) están ausentes. Consulte las preguntas frecuentes a continuación para obtener más información. |
Para obtener más información sobre cómo establecer el token de dispositivo, consulte la documentación correspondiente del SDK:
RudderStack solo admite fcm para mapear el token de dispositivo.
Requisitos de los eventos personalizados
RudderStack envía todos los eventos que no sean eventos de sesión como eventos personalizados a través del endpoint evt de Singular.
Mapeos de EVENT admitidos
Esta sección enumera los mapeos de las propiedades de eventos de RudderStack a los campos correspondientes de Singular.
La siguiente tabla enumera el mapeo de los atributos capturados automáticamente por RudderStack para las plataformas móviles ( Android e iOS ):
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
context.os.name |
p |
Obligatorio | La plataforma de origen (Android o iOS). |
context.app.namespace |
i |
Obligatorio | El nombre del paquete (Android) o el bundle ID (iOS) de su aplicación. |
context.ip / request_ip(en el mismo orden) |
ip |
Obligatorio | La dirección IP del usuario. |
context.device.advertisingId |
idfa |
Obligatorio | El IdentifierForVendor sin procesar, en mayúsculas y con guiones. Esto aplica únicamente a las aplicaciones de iOS . |
context.device.advertisingId |
aifa |
Obligatorio | Este es el advertising ID sin procesar, en minúsculas y con guiones. Esto aplica únicamente a las aplicaciones de Android . Obligatorio si el App Set ID (asid) y el Android ID (andi) están ausentes. Consulte las preguntas frecuentes a continuación para obtener más información. |
context.device.id |
idfv |
Obligatorio | El IdentifierForVendor sin procesar, en mayúsculas y con guiones. Esto aplica únicamente a las aplicaciones de iOS . |
context.device.id |
andi |
Obligatorio | El Android ID sin procesar, en minúsculas. Esto aplica únicamente a las aplicaciones de Android y es obligatorio si el advertising ID (aifa) y el App Set ID (asid) están ausentes. Consulte las preguntas frecuentes a continuación para obtener más información. |
context.os.version |
ve |
Obligatorio | La versión del sistema operativo del dispositivo en el momento de la sesión. |
timestamp / originalTimestamp |
utime |
Opcional | La hora de la sesión (en tiempo UNIX). |
integrations.Singular.limitDataSharing |
data_sharing_options.limit_data_sharing |
Opcional | Consentimiento del usuario para el intercambio de datos, codificado como JSON en URL. Debe persistir y pasarse en todas las solicitudes de eventos posteriores. |
Singular prefiere aifa sobre asid y asid sobre andi (en Android) e idfa sobre idfv (en iOS).
La siguiente tabla enumera el mapeo de los atributos que deben pasarse a través de las propiedades del evento:
Estas propiedades no se conservan en el SDK y deben pasarse con cada evento.
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
event |
n |
Obligatorio | El nombre del evento. Este es definido por el usuario . |
context.device.attTrackingStatus |
att_authorization_status |
Obligatorio | El estado de autorización de App Tracking Transparency . |
userId |
custom_user_id |
Opcional | El ID de usuario pasado a través de la llamada identify. |
properties.skan_conversion_value |
skan_conversion_value |
Opcional | El último valor de SkAdNetwork en el momento de la notificación de sesión. |
properties.skan_first_call_timestamp |
skan_first_call_timestamp |
Opcional | Timestamp UNIX de la primera llamada realizada a la API de SkAdNetwork. |
properties.skan_last_call_timestamp |
skan_last_call_timestamp |
Opcional | Timestamp UNIX de la última llamada realizada a la API de SkAdNetwork en el momento de la notificación de sesión. |
properties.eventAttributes |
e |
Opcional | Los atributos personalizados del evento en formato JSON. Debe pasarlos con cada evento, ya que no se conservan en el SDK. |
properties.is_revenue_event |
is_revenue_event |
Opcional | Determina si un evento es un evento de ingresos. Debe pasarlo a través de las propiedades con cada evento, ya que no se conserva en el SDK. |
properties.receipt_signature |
receipt_signature |
Opcional | La firma del recibo. |
La siguiente tabla enumera el mapeo de los atributos definidos por el usuario específicos de los eventos de ingresos:
| Propiedad de RudderStack | Atributo de Singular | Presencia | Descripción |
|---|---|---|---|
properties.total/ properties.value / properties.revenue |
amt |
Opcional | El monto de la moneda. |
properties.currency |
cur |
Opcional | El código de moneda de tres letras ISO 4217. Debe usarse junto con el parámetro amt. |
properties.purchase_receipt |
purchase_receipt |
Opcional | El recibo recibido de una compra. |
properties.product_id/properties.sku |
purchase_product_id |
Opcional | El identificador SKU del producto. |
properties.orderId / properties.purchase_transaction_id(en ese orden) |
purchase_transaction_id |
Opcional | El identificador de la transacción. |
Si establece cualquiera de las propiedades value, revenue o total , RudderStack considera automáticamente el evento como un evento de ingresos, a menos que se indique explícitamente mediante la propiedad is_revenue_event .
A continuación se enumeran algunas consideraciones importantes en el caso de los eventos personalizados:
- RudderStack toma el user agent de context.userAgent para Android y de las propiedades del evento en el caso de iOS.
- RudderStack almacena los atributos adicionales pasados en el evento personalizado en el campo e de Singular.
Pruebas
¿Cómo puedo verificar si los eventos se entregan correctamente a Singular?
Para verificar si los eventos se entregan correctamente a Singular, puede usar la función Destination live events de RudderStack.
También puede verificar la entrega de eventos accediendo a su Singular dashboard y siguiendo estos pasos:
Siga la guía detallada aquí sobre cómo usar la Testing Console
-
Vaya a
"Developer Tools > Testing Console"
.
-
Haga clic en
Add Device
e ingrese el identificador de dispositivo correspondiente:
-
Debería poder ver un registro en tiempo real de todos los eventos enviados a Singular:
Preguntas frecuentes
¿Qué atributos de device ID se requieren para Android?
Para las solicitudes de Android, Singular requiere uno de los siguientes atributos, en este orden de preferencia:
-
aifa
-
asid
-
andi
Si ninguno de ellos está disponible, debe enviar al menos uno con un valor vacío (en lugar de null o undefined). Si los envía todos, RudderStack descarta el atributo andi conforme a las políticas de datos de Google.