En resumen: Integra AppsFlyer en sitios web utilizando el SDK web para atribuir y medir visitas, eventos, conversiones e ingresos.
Guía de integración y del usuario del SDK web
- La etiqueta JavaScript del SDK web:
- forma parte de la solución de atribución basada en las personas (PBA) para analizar las trayectorias de los usuarios en múltiples plataformas.
- reporta las visitas y las acciones de los usuarios en tu sitio web a la plataforma de AppsFlyer.
- es un módulo de pluginpara el sitio webque no requiereprogramación. Es independiente del sistema operativo y del navegador del visitante del sitio web.
- tiene un tamaño de 40-60 Kb.
- Implementa el SDK web junto con el SDK móvil de AppsFlyer para registrar y asignar la actividad del usuario en tu aplicación móvil y tus entornos web.
- Los eventos que ocurren fuera del sitio web se pueden registrar mediante la API de eventos web server-to-server (Web S2S).
Selección de un fragmento de código
Elige el fragmento que mejor se adapte a tu tipo de integración y a los requisitos de seguridad. Las siguientes opciones están disponibles:
- Standard Web SDK: La integración estándar.
- Advanced SDK Verification: Una integración mejorada que agrega protección a la cadena de suministro para el SDK web. Usa esto para agregar una capa adicional de seguridad contra el compromiso de CDN, el DNS hijacking y los ataques de intermediarios.
¡Importante!
Si estás haciendo la transición del Standard Web SDK al Advanced SDK Verification, reemplaza tu fragmento existente con el nuevo. No agregues el fragmento nuevo además del existente.
Standard Web SDK
Usa este fragmento para implementar la integración estándar del SDK web. Pégalo cerca de la parte superior de la etiqueta en todas las páginas donde quieras cargar el SDK.
Sin Smart Banners
<script>
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
window.AF.plugins = {};
// Inject SDK
var o = document.createElement("script"),
p = document.getElementsByTagName("script")[0];
o.async = 1;
o.src = "https://websdk.appsflyersdk.com?" + "st=pba&af_id=WEB_DEV_KEY";
p.parentNode.insertBefore(o, p);
</script>Con Smart Banners
<script>
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
window.AF.plugins = {};
// Inject SDK
var o = document.createElement("script"),
p = document.getElementsByTagName("script")[0];
o.async = 1;
o.src = "https://websdk.appsflyersdk.com?" + "st=pba,banners&af_id=WEB_DEV_KEY";
p.parentNode.insertBefore(o, p);
AF('banners', 'showBanner');
</script>Advanced SDK Verification
Advanced SDK Verification agrega protección a la cadena de suministro para el SDK web. Garantiza que el código que se ejecuta en los navegadores de tus usuarios sea exactamente el que publicó AppsFlyer. El código fuente del SDK en sí es idéntico a la integración estándar; solo difieren los mecanismos de entrega y verificación.
Advanced SDK Verification:
- Agrega una capa adicional de seguridad contra compromisos de CDN, DNS hijacking y ataques de intermediarios.
- Agrega aproximadamente 250 ms al tiempo de carga del SDK.
Advanced SDK Verification es opcional. La integración estándar sigue siendo totalmente compatible y es el estándar del mercado para los píxeles de análisis de terceros. Advanced SDK Verification proporciona una capa adicional de protección más allá de ese estándar.
Si tu sitio web aplica una Política de Seguridad de Contenido (CSP) mediante una nonce, consulta Política de Seguridad de Contenido (CSP) en la sección “Gestionar privacidad” para ver la variante extendida de este fragmento.
Sin Smart Banners
<script>
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
window.AF.plugins = {};
// Manifest loader config
window.AF_LOADER_CONFIG = {
baseUrl: "https://websdk.appsflyersdk.com",
plugins: ["pba"]
};
// Inject manifest loader
var loaderScript = document.createElement("script");
loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
loaderScript.crossOrigin = "anonymous";
loaderScript.async = true;
document.head.appendChild(loaderScript);
</script>Con Smart Banners
<script>
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
window.AF.plugins = {};
// Manifest loader config
window.AF_LOADER_CONFIG = {
baseUrl: "https://websdk.appsflyersdk.com",
plugins: ["banners", "pba"]
};
// Inject manifest loader
var loaderScript = document.createElement("script");
loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
loaderScript.crossOrigin = "anonymous";
loaderScript.async = true;
document.head.appendChild(loaderScript);
</script>Integración del SDK web en el sitio web
Instalación e integración
Consideraciones y acciones requeridas
| Lista de verificación de la integración |
|---|
| Para garantizar que se registren las visitas y los eventos, el SDK web debe instalarse en todas las páginas del sitio web. |
| Coloca el fragmento de código que has seleccionado anteriormente para que se cargue lo antes posible dentro del alcance de la página. Para ello, inserta el código cerca de la parte superior de la etiqueta de encabezado. |
|
Si vas a integrar el SDK mediante Google Tag Manager (GTM):
|
| Puedes implementar el SDK web con o sin Smart Banners. Sigue las instrucciones pertinentes en las secciones que se indican a continuación. |
|
Requisitos obligatorios para la integración
Valida la integración mediante la herramienta de prueba. |
Antes de empezar:
- Verifica con el marketer que haya creado el paquete de marca.
- Para obtener orientación adicional, consulta la Guía de onboarding de PBA.
- Consideración: Si ya tienes el SDK web independiente de Smart Banners, elimínalo y reemplázalo con el SDK web tanto para los Smart Banners como para la atribución people-based; no agregues solo el SDK web independiente para PBA.
Haz lo siguiente:
- Obtén la clave de desarrollador web del SDK web. ¡Nota! Esta no es la misma clave que utilizan las aplicaciones móviles.
-
Para obtener la clave de desarrollador web:
- En AppsFlyer, en el menú superior, selecciona la pestaña Mis aplicaciones.
- Haz clic en Ver paquetes de marca.
- Copia la clave de desarrollador web requerida (WEB_DEV_KEY).
-
Para obtener la clave de desarrollador web:
- Si implementas Smart Banners, obtén la clave del Smart Banner.
-
Para obtener la clave del Smart Banner:
- En AppsFlyer, desde el menú lateral, ve a Engage > Web-to-App > Smart Banners.
- Copia la clave del Smart Banner requerida.
-
Para obtener la clave del Smart Banner:
- Obtén los permisos para agregar scripts a etiquetas de encabezado en el sitio web.
- Si utilizas Google Tag Manager, deberá estar integrado en el sitio web.
A continuación, integra el SDK web utilizando una de las siguientes opciones.
Fragmento de código JavaScript
Integra el SDK web utilizando uno de los siguientes métodos.
Para instalar el SDK web sin Smart Banners:
- Repite el procedimiento que sigue en todas las páginas de tu sitio web.
- En el fragmento de código que se indica a continuación, reemplaza
WEB_DEV_KEYcon la clave especificada en los requisitos previos. - Pega el fragmento de código que has seleccionado anteriormente en la etiqueta de encabezado de tu sitio web. Pégalo cerca de la parte superior de la etiqueta de encabezado.
Para implementar el SDK web con Smart Banners:
- Repite el procedimiento a continuación en todas las páginas de tu sitio web.
- En el fragmento de código que has seleccionado anteriormente, reemplaza
WEB_DEV_KEYyYOUR_BANNER_KEYcon las claves especificadas en los requisitos previos. - Pega este fragmento de código en la etiqueta de encabezado del sitio web. Pégalo cerca de la parte superior de la etiqueta de encabezado.
Para implementar el SDK web con Google Tag Manager (GTM):
- Ve a Google Tag Manager.
-
Crea una nueva etiqueta para el SDK web de AppsFlyer.
- Selecciona el tipo de etiqueta HTML personalizado.
- Dale a la etiqueta un nombre significativo.
- Realiza una de las siguientes acciones:
- Si vas a integrar el SDK web sin Smart Banners:
- Pega el fragmento de código que has seleccionado anteriormente en la ventana Configuración de etiquetas.
- En el fragmento de código, reemplaza
WEB_DEV_KEYutilizando la clave mencionada en los requisitos previos.
- Si vas a integrar el SDK web con Smart Banners:
- Pega el fragmento de código que has seleccionado anteriormente en la ventana Configuración de etiquetas.
- En el fragmento de código, reemplaza
WEB_DEV_KEYyYOUR_BANNER_KEYutilizando las claves mencionadas en los requisitos previos.
- Si vas a integrar el SDK web sin Smart Banners:
- Haz clic en Guardar.
- Realiza una de las siguientes acciones:
- Para agregar el activador a todas las páginas:
-
Para agregar el activador a páginas específicas:
- Haz clic en Guardar etiqueta.
- En la ventana principal de GTM, selecciona Activadores. Haz clic en Nuevo.
- Haz clic en el icono de lápiz.
- Elige el tipo de activador Vista de página.
- Selecciona Algunas vistas de página.
- Configura la página y las condiciones de activación según sea necesario.
- Haz clic en Guardar.
- Asocia el activador a la etiqueta AppsFlyer Web SDK. Para ello:
- Crear una propiedad en Adobe Experience Cloud
- Agregar el SDK web a la propiedad de Adobe Launch
- Agregar la etiqueta de Adobe Launch al sitio web
- Publicar el entorno de Adobe Launch
Crear una propiedad en Adobe Experience Cloud
- Ve a Adobe Experience Cloud > Lanzar.
- En Adobe Experience Cloud Launch, haz clic en Ir al lanzamiento.
- Haz clic en Nueva propiedad.
- Dale un nombre a la propiedad.
- En Plataforma, selecciona Web.
- Ingresa el dominio de tu sitio web.
- Haz clic en Guardar.
Agregar el SDK web a la propiedad de Adobe Launch
- En la página Mi sitio web, selecciona la pestaña Reglas.
- Dale un nombre a la regla. Se recomienda el uso de Cargar SDK web.
- En la sección SÍ, en EVENTOS, haz clic en +Agregar.
- En Tipo de evento, selecciona Core - DOM Ready.
- Haz clic en Mantener cambios.
- En la sección ENTONCES, en Acciones, haz clic en +Agregar.
- En Tipo de activación > Código personalizado.
- Selecciona JavaScript > Abrir editor y pega el fragmento de código del SDK web sin las etiquetas <script>.
- Haz clic en Mantener cambios para cerrar el editor de códigos.
- Haz clic en Guardar.
Agregar la etiqueta de Adobe Launch al sitio web
- En la página My sitio web, selecciona la pestaña Entornos.
- Busca la fila con el entorno que deseas publicar (desarrollo o producción).
- En el encabezado INSTALACIÓN, haz clic en el ícono de la caja en la fila correspondiente; normalmente se trata de un entorno de producción.
- Consulta la sección sobre la publicación del entorno Adobe Launch.
- En el cuadro Instrucciones de instalación web:
- Copia el fragmento de código del script.
- Cierra el cuadro de diálogo.
- Pega el fragmento de código en la etiqueta <head> de tu sitio web.
Publicar el entorno de Adobe Launch
- En la página Mi sitio web, ve a la pestaña Publicación.
- En la sección Desarrollo, haz clic en Agregar biblioteca nueva.
- Asigna un nombre a la biblioteca y elige un entorno.
- En CAMBIOS DE RECURSOS, haz clic en Agregar un recurso.
- Haz clic en Reglas > Cargar SDK web > Más reciente > Seleccionar y crear una nueva revisión.
- Haz clic en Guardar.
- En la sección Desarrollo:
- Junto a la biblioteca recién creada, haz clic en el menú de acciones (3 puntos) y selecciona Crear para desarrollo.
- Haz clic de nuevo en el menú de acciones y selecciona Enviar para aprobación.
- En la sección Enviado:
- Haz clic en el menú de acciones y selecciona Crear para escenario.
- Haz clic de nuevo en el menú de acciones y selecciona Aprobar para publicar.
- En la sección Aprobado:
- Haz clic en el menú de acciones > selecciona Crear y publicar para producción.
- El proceso ya está completo.
Cuando el sitio web se carga en un dispositivo móvil, la creatividad activa se muestra en el banner. Para mostrar el banner en páginas específicas o según las acciones del usuario, consulta las Reglas de Adobe Launch.
Comprobar que el SDK esté funcionando
Una vez instalado, comprueba que el navegador del visitante llame al SDK web de AppsFlyer y que se envíen mensajes. Esto se hace examinando la conexión de red de mensajes reportada en el navegador.
Para comprobar que el SDK se carga y funciona:
- Ve al sitio web.
-
Abre las herramientas para desarrolladores del navegador.
- Ve a la pestaña (A) Red.
- Actualiza la página.
- Filtra por (B) wa.appsflyer.
- Selecciona el mensaje de eventos (C).
- En la pestaña Encabezados (D), asegúrate de que:
- La URL de solicitud es wa.appsflyer.com/events.
- site_id query parameter=
WEB_DEV_KEY. - (E) El estado del código es 200.
- Verifica que el valor de site_id sea igual al valor de
WEB_DEV_KEYen la configuración del paquete de marca:- En AppsFlyer, en el menú lateral, selecciona Configuración > Paquetes de marca.
- Haz clic en la Clave de desarrollador web; al hacerlo, se copia la clave.
- Pega la clave en cualquier ubicación (nueva pestaña del navegador, bloc de notas) para mostrar la clave.
- Verifica que el site_id y
WEB_DEV_KEYcoincidan.
- Asegúrate de que el SDK se cargue solo una vez. La carga múltiple del SDK puede hacer que el SDK deje de funcionar.
Aceptación/exclusión voluntaria del envío de eventos
El SDK web envía datos de los eventos de los visitantes a AppsFlyer. Puedes controlar, detener o iniciar el envío de eventos como se describe en esta sección.
Consideración:
- Configuración del estado inicial del SDK: Determina si el SDK envía eventos al cargar inicialmente la página web o si el SDK debe esperar hasta que des un comando explícito para comenzar a enviar eventos. La configuración está incluida en el fragmento web.
-
Control explícito: úsalo para detener o iniciar el envío de eventos. Por ejemplo, si implementas banners de aceptación/exclusión voluntaria de datos (también conocidos como banners de consentimiento de cookies), integra los comandos explícitos en los controles de tu banner para iniciar y detener el envío de eventos. El control explícito tiene prioridad sobre la configuración del estado inicial del SDK y utiliza cookies propias persistentes que tienen las siguientes características:
- Se establecen en el dominio del sitio web.
- Caducan después de un período establecido por el SDK web o según lo determine el navegador. Después de que caduquen las cookies, el SDK web vuelve a la configuración del estado inicial.
-
La cookie del SDK web no interfiere y siempre está sujeta a la configuración de cookies específica del navegador.
Configuración del estado inicial del SDK
| Configuración | Se requiere fragmento |
|---|---|
| [Predeterminado] Enviar eventos |
Haz el siguiente cambio en el fragmento del SDK web. Si es necesario, agrega el parámetro measurementStatus: Establece measurementStatus=true
|
|
No enviar eventos
|
Haz el siguiente cambio en el fragmento del SDK web. Si es necesario, agrega el parámetro measurementStatus: Establece measurementStatus=false |
Control explícito
| Opción | Comando |
|---|---|
| Iniciar el envío de eventos (optar por la aceptación) | window.AF_SDK.PLUGINS.PBA.enableMeasurement() |
| Detener el envío de eventos (optar por la exclusión) | window.AF_SDK.PLUGINS.PBA.disableMeasurement() |
Implementar una política de Política de Seguridad de Contenido (CSP)
Si tu sitio web requiere estrictos protocolos de seguridad o privacidad de datos, utiliza los siguientes mecanismos para configurar cómo interactúa el SDK web con tu entorno y tus datos.
Política de Seguridad de Contenido (CSP)
Si tu sitio web requiere que JavaScript esté protegido por un CSP, el SDK web admite dos enfoques según la configuración de tu CSP.
-
CSP usando self: Agrega
https://websdk.appsflyersdk.coma tu listascript-srcde permitidos. Esto funciona tanto para el Standard Web SDK como para Advanced SDK Verification. -
CSP usando nonce: Si tu política utiliza
script-src 'nonce-...', puedes utilizar la variante nonce-extended de Advanced SDK Verification. Esto reenvía el nonce a las tres etiquetas de script requeridas por el proceso de verificación. Reemplaza{{CSP_NONCE}}con tu valor nonce generado por el servidor, por solicitud.
La siguiente tabla muestra qué políticas de CSP son compatibles con la variante nonce-extended.
| Política | Funciona | Notas |
|---|---|---|
script-src 'self' |
No | No se permite el origen de CDN externo; el script en línea también se bloquea. |
script-src 'self' https://websdk.appsflyersdk.com |
Parcial | Permite el loader y el SDK, pero el script de configuración en línea sigue bloqueado. |
script-src 'nonce-...' https://websdk.appsflyersdk.com |
Sí | Nonce cubre el script en línea y el loader; la etiqueta del SDK es reenviada por el loader. |
script-src 'nonce-...' 'strict-dynamic' |
Sí (recomendado) | Nonce cubre el script en línea y el loader; strict-dynamic propaga confianza a la etiqueta del SDK inyectada dinámicamente. No se necesita origen de CDN en la lista de permitidos. |
Advanced SDK Verification con fragmentos de CSP nonce
Sin Smart Banners
<script nonce="{{CSP_NONCE}}">
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
window.AF.plugins = {};
// Manifest loader config — nonce forwarded to the injected SDK <script> tag
window.AF_LOADER_CONFIG = {
baseUrl: "https://websdk.appsflyersdk.com",
plugins: ["pba"],
nonce: "{{CSP_NONCE}}"
};
// Inject manifest loader
var loaderScript = document.createElement("script");
loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
loaderScript.crossOrigin = "anonymous";
loaderScript.nonce = "{{CSP_NONCE}}";
loaderScript.async = true;
document.head.appendChild(loaderScript);
</script>Con Smart Banners
<script nonce="{{CSP_NONCE}}">
// Queue — buffers AF() calls until the SDK is ready
window.AppsFlyerSdkObject = "AF";
window.AF = window.AF || function() {
(window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
};
window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
window.AF.plugins = {};
// Manifest loader config — nonce forwarded to the injected SDK <script> tag
window.AF_LOADER_CONFIG = {
baseUrl: "https://websdk.appsflyersdk.com",
plugins: ["banners", "pba"],
nonce: "{{CSP_NONCE}}"
};
// Inject manifest loader
var loaderScript = document.createElement("script");
loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
loaderScript.crossOrigin = "anonymous";
loaderScript.nonce = "{{CSP_NONCE}}";
loaderScript.async = true;
document.head.appendChild(loaderScript);
</script>Descartar parámetros de consulta
Si los parámetros de consulta contienen datos que no deseas que AppsFlyer registre, puedes indicar a la plataforma de AppsFlyer que descarte algunos o todos los parámetros de consulta. Al hacerlo, no estarán disponibles en el raw data ni en los reportes.
Puedes implementar los métodos descritos en relación con URL, referentes y header_referer.
Opciones de descarte de consultas
| Método | Descripción |
|---|---|
| Descartar todos los parámetros de consulta | Adjunta af_url=true a la URL. |
| Descartar parámetros de consulta especificados |
Al establecer una máscara de parámetro de consulta, especifica qué parámetros se descartan. Establece la máscara de descarte usando Ejemplo: URL con máscara:
URL después del descarte:
|
Principios de registro de eventos.
Conversión y eventos estándar
- Los eventos de usuario son registrados por el SDK, que envía el evento a la plataforma AppsFlyer.
- Utilizando la lista de eventos de conversión establecida por el marketer, AppsFlyer divide los eventos en eventos estándar y de conversión.
- Los datos de los eventos de conversión están disponibles en los paneles de control de la PBA.
- Los datos de los eventos estándar y de conversión están disponibles en los reportes de raw data.
Eventos de conversión
- Los eventos de conversión brindan insights sobre tus esfuerzos comerciales y de marketing. Los eventos de conversión incluyen compras, descargas, registros y suscripciones.
- La PBA atribuye los eventos de conversión a la fuente de medios que llevó al usuario a visitar el sitio web.
- Al identificar la fuente de medios atribuida, puedes medir y diferenciar la calidad de los usuarios aportados por diferentes fuentes de medios.
- Los eventos de conversión se utilizan para registrar los ingresos y calcular el ROI.
- Utilízalos para comparar el presupuesto de los anuncios de fuentes de medios específicas con los ingresos generados por los usuarios que provienen de estas fuentes de medios.
Eventos estándar
- Los eventos estándar se utilizan para validar la trayectoria del usuario y los embudos que generan conversiones.
- Utilízalos para medir la actividad de los usuarios y resaltar las fuentes de medios que atraen a los usuarios comprometidos.
- Registra la actividad de los usuarios para marcarlos para campañas de reengagement.
Registro de eventos
Activa el SDK web para registrar eventos cuando se cumplan ciertas condiciones, por ejemplo, cuando se carga una página de aterrizaje o cuando los usuarios interactúan con los elementos del sitio web. Consulta los ejemplos de registro de eventos.
Identificación de usuarios mediante el ID de usuario del cliente (CUID)
- Los usuarios web se identifican en AppsFlyer mediante el CUID único que les asignas. Normalmente, el CUID lo administran los servidores backend.
- Utiliza el mismo valor CUID que utilizas en el entorno móvil. Hacerlo te permitirá tener una visión holística de la actividad de los usuarios en múltiples plataformas. La función en el SDK móvil es setCustomerUserId (iOS, Android, Unity).
-
Para establecer el CUID en el SDK web:
- Establece el CUID tan pronto como tengas acceso a él. La mayoría de las veces, esto significa que debes esperar a que el usuario se identifique iniciando sesión o registrándose.
-
Activa la llamada de JavaScript a setCustomerUserId() como se muestra en el siguiente ejemplo.
Nota: Envía el CUID como una cadena incluso si es un número. Para ello, ponlo entre comillas.
- Si implementas S2S web, ten en cuenta que es posible que debas notificar a la PBA cuando asocies un CUID con un ID de visitante web en tu backend.
- Los CUID no deben contener información personal directamente identificable,como un número de teléfono o una dirección de correo electrónico.
Ejemplo: establecer el CUID
// Associate all current user web events to distinct ID 663274
AF('pba', 'setCustomerUserId' , '663274')
Parámetros de eventos del SDK web
| Nombre de parámetro | Obligatorio | Descripción |
|---|---|---|
| eventType | Sí |
Tipo de evento Formato: String Completa siempre este parámetro con EVENT. Ejemplo: eventType: "EVENT" |
| eventName | Sí |
Nombre del evento Formato: String Ejemplo: Compra, suscripción |
| No | Este parámetro está obsoleto y se eliminará del sistema en una fecha que se anunciará. En su lugar, utiliza el parámetro eventValue. | |
|
|
No | Este parámetro está obsoleto y se eliminará del sistema en una fecha que se anunciará. En su lugar, utiliza el parámetro eventValue. |
| eventRevenue | No |
Ingresos asignados a un evento de conversión Formato: Float |
| eventRevenueCurrency | No |
Moneda de ingresos
Formato: String |
| eventValue | No |
Mapa de parámetros del evento que describen el evento. Utiliza este parámetro para enviar eventos in-app enriquecidos, como el SKU del producto y el precio del artículo.
Formato: JSON
Ejemplo: Para enviar SKU ABC123, de color azul y un precio unitario de $3,99
Limitación: 1000 caracteres. si excedes el límite, se truncará. |
Escenarios de registro de eventos
Evento de ejemplo
// purchase event of shoes with associated revenue
AF('pba', 'event', {eventType: 'EVENT', eventName: 'purchase', eventRevenue: 12, eventValue: {"key1": 123, "key2": "name"}});
Los eventos que envías dependen de la naturaleza de tu aplicación web. Por ejemplo, una aplicación de tienda en línea requiere un conjunto de eventos diferentes a los de un medio de comunicación. Mira los escenarios siguientes para tener una idea de los eventos que debes enviar y cuándo.
Tienda en línea
Supongamos que administras una tienda en línea. Algunos eventos estándar que quizás quieras registrar serían:
- Buscar: evento estándar
- Agregar al carrito: evento estándar
- Quitar del carrito: evento estándar
- Comprar: evento de conversión
Medio informativo
Supongamos que estás administrando un medio informativo. Algunos eventos que quizás quieras registrar serían:
- Registro: evento de conversión
- Compra de suscripción: evento de conversión
Garantizar el envío de los eventos
Esta parte está destinada a desarrolladores web.
Prueba la integración del SDK web para la PBA: consulta los eventos de prueba en tiempo real.
Para garantizar que los eventos se envíen a AppsFlyer:
- Abre el sitio web.
- Abre las herramientas para desarrolladores del navegador.
- Cambia a la pestaña Network (Red).
- Activa el evento.
-
Filtro por mensaje.
- Busca una solicitud de red que comience con el destino wa.appsflyer.com (observa la captura de pantalla a continuación).
- Asegúrate de que:
- El código de estado es 200.
- La carga útil de solicitud se alinea con los parámetros del evento.
Ejemplos
Registro de eventos
El código proporcionado es solo para fines ilustrativos. No utilices este código tal como está.
- Supuestos: la página ya ha cargado el SDK web en el momento en que se envía el evento.
- Los escenarios de ejemplo contienen el código para registrar eventos cuando:
- se carga una página de aterrizaje.
- los usuarios interactúan con el sitio web.
Registro de eventos cuando se carga una página de aterrizaje
- Tienes una página de suscripción para boletines informativos y deseas registrar las suscripciones.
- También puedes configurar una página de agradecimiento y redirigir a los usuarios a ella después de suscribirse.
<html>
<head>
<!-- Assume that the server returns a response with details about the newly subscribed user -->
<!-- Alternatively, you can extract data from localStorage or cookies,
in case data was set in either of them during the subscription process
-->
<script>window.onload = function(){
AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category': 'holiday_promotion', eventValue: {'label' : 'newspaper'}, eventName: 'subscription',}); } </script> </head> <body> <h1>Thank You for Subscribing to Our Newsletter</h1> </body> </html>
- El código anterior contiene una página HTML básica. La página web debe cargar el SDK web para poder enviar eventos.
- Una vez que se carga la página, después de que el usuario es redirigido a ella, el método de carga de ventana llama al método AF() para enviar el evento de suscripción a AppsFlyer.
Registro de eventos cuando los usuarios interactúan con el sitio web
- Tienes un sitio web de eCommerce y deseas registrar los eventos de checkout.
- Cuando el usuario hace clic en el botón de checkout, el SDK web envía un evento a AppsFlyer.
<html>
<head>
<!-- Assume that data about products in the shopping cart
is stored in localStorage -->
<script>
window.onload = function () {
document.getElementById('checkout').addEventListener('click', function () {
AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category' : 'holiday_promotion'}, eventName: 'checkout'});
});
}
</script>
</head>
<body>
<h1>Shopping Cart</h1>
<h2>Shirt</h2>
<p>
<ul>
<li>Color: Blue</li>
<li>Quantity: 2</li>
<li>Price: $20</li>
</ul>
</p>
<h2>Pants</h2>
<p>
<ul>
<li>Color: Black</li>
<li>Quantity: 3</li>
<li>Price: $15</li>
</ul>
</p>
<button id='checkout'>Checkout</button>
</body>
</html>
El código anterior muestra una página HTML básica. La página web debe cargar el SDK web para poder enviar eventos.
- Una vez que la página se carga, vincula un listener de clics al botón Checkout.
- Cuando el usuario hace clic en el botón Checkout, la función de callback:
- recupera datos de localStorage.
- llama al método AF() y le pasa datos.
- El método AF() envía el evento a AppsFlyer.
Registro de eventos cuando se carga una página de aterrizaje
- Tienes una página de suscripción para boletines informativos y deseas registrar las suscripciones realizadas correctamente.
- Configuras una página de agradecimiento a la que se redirige a los usuarios después de suscribirse correctamente.
-
Configurar una página de agradecimiento
<html> <head> <script> // Google Tag Manager loads the Web SDK <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXXX'); </script> <script> // Assume that the server returns a response with details about the newly subscribed user function getResponseFromServer() { return JSON.stringify({ action: 'subscribe', category: 'site actions', label: userEmail }) } //Alternatively, you can extract data from localStorage or cookies, //in case data was set in either of them during the subscription process localStorage.setItem('data', JSON.stringify({ action: 'subscribe', category: 'site actions', label: 'user@email.com' })); </script> </head> <body> <h1>Thank You for Subscribing to Our Newsletter</h1> </body> </html>El código anterior carga GTM, que a su vez carga el SDK web. Luego, otras dos acciones tienen lugar en el script. Una es una función que obtiene una respuesta del servidor con los detalles del usuario. La otra establece los datos en el almacenamiento local. GTM tiene acceso tanto a la función como a localStorage. Puedes llamar a la función y acceder a localStorage usando GTM.
-
Agregar una nueva etiqueta para atribuir suscripciones después de que se cargue la página de agradecimiento
- Dale a la etiqueta un nombre distintivo y selecciona la opción de tipo de etiqueta Custom HTML (HTML personalizado).
-
Pon el siguiente código en Custom HTML (HTML personalizado).
<script> AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category' : 'holiday_promotion'}, eventName: 'subscription'}); </script> -
Expande el control Advanced Settings (Configuración avanzada) y luego el control Tag Sequencing (Secuenciación de etiquetas) debajo del área de texto y asegúrate de que esté configurado para activar la conversión después de ejecutar la etiqueta.
-
Para activar la etiqueta de conversión, configura un activador. En el ejemplo, el activador se dispara al cargar la página de agradecimiento.
Registro de eventos cuando los usuarios interactúan con el sitio web
- Tienes un sitio web de eCommerce y deseas registrar los eventos de checkout.
- Después de que el usuario hace clic en el botón de checkout, el SDK web envía un evento a AppsFlyer.
-
Configurar una página de checkout
<html> <head> <script> // Google Tag Manager loads the Web SDK <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXXX'); </script> </head> <body> <h1>Shopping Cart</h1> <h2>Shirt</h2> <p> <ul> <li>Color: Blue</li> <li>Quantity: 2</li> <li>Price: $20</li> </ul> </p> <h2>Pants</h2> <p> <ul> <li>Color: Black</li> <li>Quantity: 3</li> <li>Price: $15</li> </ul> </p> <button id='checkout'>Checkout</button> </body> </html>El código anterior carga el SDK web usando GTM. El resto es simplemente HTML que imita una página de carrito de compras. Observa el botón Checkout que tiene el ID de checkout. Es necesario al configurar GTM para manejar un clic en ese botón.
- En GTM, haz clic en Variables, haz clic en Configure (Configurar) y marca Click Element (Elemento de clic) en la lista de Built-In Variables (Variables incorporadas).
- Crea una nueva variable, dale un nombre significativo y elige el tipo de Todos los elementos.
- En la configuración del activador, elige Algunos clics, y elige un Elemento de clic que coincida con el Selector CSS de #checkout.
-
Crea una nueva etiqueta para la acción de checkout, elige el tipo Custom HTML (HTML personalizado) y configura el activador en el activador de checkout.
<script> AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category' : 'holiday_promotion'}, eventName: 'checkout'}); </script>
- Asegúrate de que la etiqueta de funciones del SDK web esté cargada antes de que se active el evento.
- No envíes caracteres especiales en los valores de los eventos, como símbolos de moneda en el valor de los ingresos.
- Las cadenas de valores deben tener menos de 50 caracteres.
Configuración del ID de usuario del cliente después del registro
El código proporcionado en estos ejemplos es solo de referencia. No utilices este código tal como está. Si no estás seguro de cómo utilizar este código, consulta a tu desarrollador web.
Supuesto: La página carga el SDK web antes de enviar el evento; no cargues el SDK nuevamente.
Situación del usuario:
- Un usuario se registra en tu sitio web.
- El código del sitio web recopila los datos del usuario y los envía a tu servidor.
- El servidor genera un CUID único para el usuario.
- En la página de agradecimiento después del registro, consultas al servidor el nuevo CUID.
- Mediante la respuesta del servidor, configuras el CUID de AppsFlyer mediante el método setCustomerUserId() del SDK web.
Configura una página de registro:
<html>
<head>
<!-- The Web SDK script loads first -->
<script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
</script>
<script>
};
// This function stores the user email sent to the server after the user reaches the thank you page
// The response from the server is a unique CUID that should be set using the web SDK setCustomerUserId method
function storeUserEmail (){
var userEmail = document.getElementById('email').value;
localStorage.setItem('user_email', userEmail);
}
</script>
</head>
<body>
<h1>Sign Up</h1>
<form onsubmit="storeUserEmail()" action="/signup" method="post">
<div><label>Name</label>
<input type="text" name="name" id="name"></div>
<br />
<div> <label>Email</label>
<input type="email" name="email" id="email"></div>
<br />
<input type="submit" id="submit">
</form>
</body>
</html>
El código anterior es un formulario de registro sencillo. Cuando se envía el formulario, el correo electrónico se almacena en localStorage. Cuando el usuario llega a la página de agradecimiento, la dirección de correo electrónico del usuario se envía al servidor para generar el CUID único para la dirección de correo electrónico.
Configura una página de agradecimiento para los usuarios que se registren:
<html>
<head>
<script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
</script>
<script>
// Using the fetch API to send the user email to the server
// and get the unique user id in return
window.onload = function () {
var userEmail = localStorage.getItem('user_email');
fetch('users/' + userEmail).then(function (res) {
res.text().then(function (id) {
console.log(id);
AF('pba', 'setCustomerUserId', id);
});
});
} </script>
</head>
<body>
<h1>Thank You for Signing Up!</h1>
</body>
</html>
El código utiliza la API Fetch. Envía al servidor la dirección de correo electrónico ingresada por el usuario. Suponiendo que el servidor crea un usuario con un CUID único al registrarse, enviar la dirección de correo electrónico al servidor tiene como objetivo recibir un CUID único. El servidor responde con un CUID único y este CUID único es el valor que se transmite con el método setCustomerUserId.
-
Configura una página de registro:
<html> <head> <script> // Google Tag Manager loads the Web SDK (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-5VJ6C7R'); // This function stores the user email to be sent to the server after the user reaches the thank you page // the response from the server is a unique CUID that should be used in the web SDK setCustomerUserId method function storeUserEmail (){ var userEmail = document.getElementById('email').value; localStorage.setItem('user_email', userEmail); } </script> </head> <body> <h1>Sign Up</h1> <form onsubmit="storeUserEmail()" action="/signup" method="post"> <div><label>Name</label> <input type="text" name="name" id="name"></div> <br /> <div> <label>Email</label> <input type="email" name="email" id="email"></div> <br /> <input type="submit" id="submit"> </form> </body> </html>El código anterior es un formulario de registro sencillo. Cuando se envía el formulario, la dirección de correo electrónico se almacena en localStorage. Cuando el usuario llega a la página de agradecimiento, la dirección de correo electrónico del usuario se envía al servidor para obtener el CUID único para ese correo electrónico.
-
Configura una página de agradecimiento para los usuarios que se registren:
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))}, t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1, o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""), p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}}) </script> <script> // using the fetch api to send the user email to the server // and get the unique user id in return window.onload = function () { var userEmail = localStorage.getItem('user_email'); fetch('users/' + userEmail).then(function (res) { res.text().then(function (id) { console.log(id); AF('pba', 'setCustomerUserId', id); }); }); } </script> </head> <body> <h1>Thank You for Signing Up!</h1> </body> </html>El código anterior es una página de agradecimiento que tiene un activador GTM que envía al servidor la dirección de correo electrónico proporcionada por el usuario en el formulario de registro.
Suponiendo que, al momento del registro, el servidor crea un usuario con un CUID único.
El correo electrónico se envía al servidor con el propósito de recibir un CUID único.
El servidor responde con un CUID único que se envía mediante el método setCustomerUserId().
Continúa con este procedimiento para crear el activador y la pestaña. - Agrega una nueva etiqueta para atribuir las suscripciones después de que se cargue la página de agradecimiento.
-
Dale a la etiqueta un nombre distintivo y selecciona la opción de tipo de etiqueta “Custom HTML”
<script> var userEmail = localStorage.getItem('user_email'); fetch('users/' + userEmail).then(function (res) { res.text().then(function (id) { console.log(id); AF('pba', 'setCustomerUserId', id); }); }); </script> -
Expande el control Advanced Settings (Configuración avanzada) y luego el control Tag Sequencing (Secuenciación de etiquetas) debajo del área de texto y asegúrate de que esté configurado para activar la conversión después de ejecutar la etiqueta.
-
Establece un activador para que la etiqueta de conversión indique cuándo se debe activar la etiqueta de conversión (en el siguiente ejemplo, se activa al cargar la página de agradecimiento).
La función setCustomerUserId se puede enviar en cualquier etapa del flujo del usuario, por ejemplo, después de iniciar sesión y registrarse. AppsFlyer utiliza el CUID más reciente enviado para actualizar al usuario observado actual para puntos de contacto y eventos pasados o futuros.
Utiliza el mismo valor CUID que utilizas en la función setCustomerUserId en la aplicación móvil (consulta el setCustomerUserId móvil para: iOS, Android, Unity)
Información adicional
Cookies del SDK web
Las cookies enumeradas en la siguiente tabla son configuradas o utilizadas por el SDK web en tu sitio web.
En la tabla se utilizan las siguientes abreviaturas:
- AMP: Páginas móviles aceleradas
- CDN: Red de entrega de contenido
- 3PC: Cookies de terceros
| Nombre de cookie | Dominio | Vida útil | Cuando se utiliza | Detalles |
|---|---|---|---|---|
| afUserid | El dominio de tu sitio web | 395 días | Sin AMP | Identificar a un usuario en el contexto de los eventos de carga web y navegación |
| AF_SYNC | El dominio de tu sitio web | 1 semana | Sin AMP |
|
| af_id | appsflyer.com | 395 días | Sin AMP cuando se permite 3PC | Identificar a un usuario en el contexto de los eventos de inicio de la aplicación y de navegación |
| af_id | onelink.me | 395 días | Sin AMP cuando se permite 3PC | Enlazar engagements de banners, engagements de OneLink o ambos a eventos de inicio de aplicaciones. |
| amp-afUserid | AMP CDN o el dominio de tu sitio web | 1 año | Para el servicio de páginas por AMP | |
| AF_DEFAULT_MEASUREMENT_STATUS | El dominio de tu sitio web | 395 días | Almacena el estado de consentimiento de la PBA. Impide el funcionamiento del SDK hasta que se otorga el consentimiento del usuario. No está configurado de forma predeterminada: se usa solo cuando se configura la puerta de consentimiento. | Sin AMP |
Notas de la versión del SDK web
| Fecha | Versión | Notas |
|---|---|---|
| 01-07-2021 | 1.0 | Descartar parámetros de consulta |
| 01-06-2021 | 1.0 | Implementar una Política de Seguridad de Contenido (CSP) |
| 31-08-2020 | 1.0 | Se agregó la funcionalidad de aceptación y exclusión opcional |
| 16-04-2020 | 1.0 | La función CustomerUserId() reemplaza el evento IDENTIFY para enviar el CUID único |
| 30-07-2020 | 1.0 |
|
Entrada en desuso
- Un aviso de entrada en desuso proporciona un aviso de nuestra intención de dejar de admitir una función o método. La función o el método continúa funcionando hasta su fecha de vencimiento.
- Considera los avisos de entrada en desuso como una oportunidad para realizar cambios en tu código.
| Fecha de desuso | Fecha de vencimiento | Detalles |
|---|---|---|
| 16-04-2020 | Pendiente de anuncio |
Método en desuso: envío del ID de usuario del cliente (CUID) en el parámetro de evento customUserId con eventType establecido en "IDENTIFY" Método actual: envío del CUID utilizando la función setCustomerUserId() . |