Seguimiento de eventos in-app
Haz seguimiento de los eventos in-app para analizar el rendimiento de las campañas y medir indicadores clave de rendimiento (KPI) como los inicios de sesión de usuarios, los registros, las finalizaciones de tutoriales o los hitos de progresión.
Eventos estándar y atributos
Uso de eventos estándar
Singular admite eventos estándar que las redes publicitarias reconocen para la generación de informes y la optimización. Usa nombres de eventos estándar siempre que sea posible para lograr el reconocimiento automático y simplificar la configuración.
Tu equipo de UA, marketing o negocio debe elaborar la lista de eventos según los KPI de marketing de tu organización. Consulta la guía Cómo hacer seguimiento de eventos in-app: guía para clientes de atribución de Singular para la planificación.
Cada evento admite varios atributos. Consulta los atributos estándar recomendados por evento para conocer los detalles de implementación.
Envío de eventos
Directrices de implementación de eventos
Envía eventos a Singular con el método
Event()
y atributos opcionales
para enriquecer los datos.
-
Eventos estándar:
Usa el
nombre del evento en Unity
de la lista de eventos estándar, por ejemplo,
Events.sngLogin - Eventos personalizados: Para eventos exclusivos de tu app que no coincidan con eventos estándar, usa cualquier cadena descriptiva que cumpla con las limitaciones de caracteres
Limitaciones de los eventos personalizados:
- Idioma: Envía los nombres y atributos de los eventos en inglés para garantizar la compatibilidad con socios externos y soluciones de analítica
- Nombres de eventos: Limitados a 32 caracteres ASCII. Las cadenas no ASCII deben tener menos de 32 bytes al convertirse a UTF-8
- Atributos y valores: Limitados a 500 caracteres ASCII
Método Event
Reporta los eventos de usuario con o sin información adicional usando argumentos variables o el formato Dictionary.
Firmas del método:
public static void Event(string name)
public static void Event(string name, params object[] args)
public static void Event(Dictionary<string, object> args, string name)
Nota:
Al usar la firma
params object[] args
, la lista de argumentos debe contener
un número par de elementos (pares clave-valor) o el evento será
rechazado. Al pasar diccionarios, los valores
deben ser uno de estos tipos: string, int, long, float, double, null,
ArrayList, Dictionary<string, object>
Ejemplos de uso
// Example 1: Standard event without attributes
SingularSDK.Event(Events.sngLogin);
// Example 2: Standard event with recommended attributes (key-value pairs)
SingularSDK.Event(Events.sngTutorialComplete,
Attributes.sngAttrContent, "Unity Basics",
Attributes.sngAttrContentId, 32,
Attributes.sngAttrContentType, "video",
Attributes.sngAttrSuccess, "yes"
);
// Example 3: Standard event with attributes using Dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
[Attributes.sngAttrContent] = "Unity Basics",
[Attributes.sngAttrContentId] = 32,
[Attributes.sngAttrContentType] = "video",
[Attributes.sngAttrSuccess] = "yes"
};
SingularSDK.Event(attributes, Events.sngTutorialComplete);
// Example 4: Custom event without attributes
SingularSDK.Event("SignUp");
// Example 5: Custom event with custom attributes
SingularSDK.Event("Bonus Points Earned", "Points", 500, "Level", 5);
Seguimiento de ingresos in-app
Haz seguimiento de los ingresos de compras in-app (IAP), suscripciones y fuentes de ingresos personalizadas para medir el rendimiento de las campañas y el retorno de la inversión publicitaria (ROAS).
Los datos de ingresos fluyen a través de tres canales:
- Informes interactivos: Consulta las métricas de ingresos en el panel de Singular
- Logs de exportación: Accede a datos ETL detallados para análisis personalizados
- Postbacks en tiempo real: Envía eventos de ingresos a plataformas externas
Limitaciones de los eventos de ingresos:
- Nombres de eventos: Los nombres de eventos de ingresos personalizados están limitados a 32 caracteres ASCII (o 32 bytes para caracteres no ASCII al convertirse a UTF-8)
- Atributos: Los nombres y valores de los atributos de eventos están limitados a 500 caracteres ASCII
- Códigos de moneda: Deben estar EN MAYÚSCULAS y seguir el estándar de tres letras ISO 4217 (por ejemplo, USD, EUR, INR)
Nota: Los ingresos en diferentes monedas se convierten automáticamente a la moneda preferida de tu organización configurada en tu cuenta de Singular.
Buenas prácticas
- Nomenclatura estándar: Usa la convención de nomenclatura de eventos y atributos estándar de Singular
- Idioma: Envía los nombres de eventos de ingresos personalizados en inglés para mejorar la compatibilidad de los postbacks a redes publicitarias
- Importes distintos de cero: Envía eventos de ingresos solo cuando el importe sea mayor o menor que 0
Integración con Unity IAP
Compra in-app con Unity IAP
Pasa el objeto Purchase u Order de IAP de Unity al método
InAppPurchase()
para obtener informes enriquecidos y
validación de transacciones.
Ventajas:
- Datos enriquecidos: Singular recibe los detalles completos de la transacción para informes exhaustivos
- Prevención de fraude: Los recibos de transacciones permiten la validación para combatir el fraude in-app
Compatibilidad de versiones de Unity IAP:
-
Unity IAP v5:
Usa la nueva
API de Unity Purchasing
con Google Play Billing Library 7+. Compatible con Unity 2021.3
LTS y versiones posteriores. Usa los métodos
InAppPurchase(Order) -
Unity IAP v4:
Usa la
API de Unity IAP
más antigua con Google Play Billing Library 6. Compatible con Unity 2018.4
LTS hasta 2020.3 LTS. Usa los métodos
InAppPurchase(Product)
Método InAppPurchase (Unity IAP v5)
Envía eventos de IAP usando el objeto Order de Unity IAP v5 para la validación automática y datos enriquecidos.
Firmas del método:
public static void InAppPurchase(Order order)
public static void InAppPurchase(Order order, Dictionary<string, object> attributes)
public static void InAppPurchase(Order order, bool isRestored)
public static void InAppPurchase(Order order, string eventName, Dictionary<string, object> attributes)
Ejemplos de uso
// Example 1: IAP with order object only
SingularSDK.InAppPurchase(order);
// Example 2: IAP with order and additional attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
["promo_code"] = "SUMMER2025",
["user_tier"] = "premium"
};
SingularSDK.InAppPurchase(order, attr);
// Example 3: IAP with restored transaction flag
SingularSDK.InAppPurchase(order, true);
// Example 4: IAP with custom event name and attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
["subscription_tier"] = "gold",
["billing_period"] = "monthly"
};
SingularSDK.InAppPurchase(order, "PremiumSubscription", attr);
Método InAppPurchase (Unity IAP v4)
Envía eventos de IAP usando el objeto Product de Unity IAP v4 para la validación automática y datos enriquecidos.
Firmas del método:
public static void InAppPurchase(Product product, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(string eventName, Product product, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(IEnumerable<Product> products, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(string eventName, IEnumerable<Product> products, Dictionary<string, object> attributes, bool isRestored = false)
Ejemplos de uso
// Example 1: IAP with single product, no extra attributes
SingularSDK.InAppPurchase(myProduct, null);
// Example 2: IAP with single product and attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
["promo_code"] = "SUMMER2025",
["user_tier"] = "premium"
};
SingularSDK.InAppPurchase(myProduct, attr);
// Example 3: IAP with custom event name
SingularSDK.InAppPurchase("PremiumUpgrade", myProduct, null);
// Example 4: IAP with list of products
SingularSDK.InAppPurchase(myProductList, null);
// Example 5: IAP with list of products and custom event name
SingularSDK.InAppPurchase("BundlePurchase", myProductList, null);
Ingresos personalizados sin validación de compra
Seguimiento manual de ingresos
Haz seguimiento de los ingresos pasando la moneda, el importe y los detalles opcionales del producto sin el objeto Purchase u Order. Ten en cuenta que este método no proporciona recibos de transacciones para su validación.
Importante: Al usar estos métodos, Singular no puede validar las transacciones. Recomendamos encarecidamente usar los métodos de Unity IAP descritos anteriormente siempre que sea posible.
Método Revenue
Envía eventos de ingresos con la moneda, el importe y los detalles opcionales del producto.
Firmas del método:
public static void Revenue(string currency, double amount)
public static void Revenue(string currency, double amount, string productSKU, string productName, string productCategory, int productQuantity, double productPrice)
public static void Revenue(string currency, double amount, Dictionary<string, object> attributes)
Ejemplos de uso
// Example 1: Revenue without product details
SingularSDK.Revenue("USD", 1.99);
// Example 2: Revenue with product details
SingularSDK.Revenue("USD", 4.99, "coin_package_abc123", "Coin Pack 5", "Bundles", 1, 4.99);
// Example 3: Revenue with attributes dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
["productSKU"] = "coin_package_abc123",
["productName"] = "Coin Pack 5",
["productCategory"] = "Bundles",
["productQuantity"] = 2,
["productPrice"] = 4.99,
["transaction_id"] = "T12345"
};
SingularSDK.Revenue("USD", 9.98, attributes);
Método CustomRevenue
Envía eventos de ingresos personalizados con un nombre de evento especificado, moneda, importe y atributos de transacción opcionales.
Firmas del método:
public static void CustomRevenue(string eventName, string currency, double amount)
public static void CustomRevenue(string eventName, string currency, double amount, string productSKU, string productName, string productCategory, int productQuantity, double productPrice)
public static void CustomRevenue(string eventName, string currency, double amount, Dictionary<string, object> attributes)
Ejemplos de uso
// Example 1: Custom revenue without product details
SingularSDK.CustomRevenue("MyCustomRevenue", "USD", 9.99);
// Example 2: Custom revenue with product details
SingularSDK.CustomRevenue("MyCustomRevenue", "USD", 50.50, "abc123", "Premium Item", "Virtual Goods", 2, 25.50);
// Example 3: Custom revenue with attributes dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
["productSKU"] = "premium_bundle_xyz",
["productName"] = "Premium Bundle",
["productCategory"] = "Bundles",
["productQuantity"] = 1,
["productPrice"] = 99.99,
["discount_applied"] = true
};
SingularSDK.CustomRevenue("PremiumBundlePurchase", "USD", 99.99, attributes);
Compatibilidad con StoreKit2
El SDK de Unity de Singular no acepta directamente las representaciones JSON de transacciones o productos de StoreKit2.
Para hacer seguimiento de las compras de iOS realizadas a través de StoreKit2, con
validación automática y datos enriquecidos, usa el
método InAppPurchase (Unity IAP v5)
descrito anteriormente y pasa el objeto
Order
de Unity IAP.
Seguimiento híbrido de eventos (avanzado)
Envía todos los eventos y los ingresos a través del SDK de Singular integrado en tu app para una atribución óptima. Sin embargo, Singular puede recopilar eventos de otras fuentes cuando sea necesario.
Los eventos enviados fuera del SDK de Singular deben cumplir con la documentación de eventos Server-to-Server de Singular y proporcionar identificadores de dispositivo coincidentes para una atribución correcta.
Importante:
Las discrepancias ocurren cuando los identificadores de dispositivo en las solicitudes server-to-server no coinciden con los identificadores registrados por el SDK de Singular:
- Eventos tempranos: Si un evento llega antes de que el SDK de Singular registre el identificador de dispositivo, el evento se convierte en la "primera sesión" de un dispositivo desconocido, lo que resulta en una atribución orgánica
- Identificadores no coincidentes: Si el SDK de Singular registró un identificador de dispositivo diferente al de la solicitud server-to-server, el evento se atribuirá de forma incorrecta
Guías de seguimiento híbrido de eventos
Envío de eventos desde un servidor interno
Recopila datos de ingresos desde tu servidor interno para analizar el rendimiento de las campañas y el ROI.
Requisitos:
- Captura de identificadores de dispositivo: Durante los eventos de registro o inicio de sesión in-app, captura y pasa los identificadores de dispositivo, y luego almacena estos datos con el User ID en tu servidor. Actualiza los identificadores cuando los usuarios generen nuevas sesiones de la app para garantizar una atribución correcta
- Identificadores específicos de la plataforma: Envía los eventos del lado del servidor con el identificador de dispositivo correspondiente a la plataforma (por ejemplo, IDFA o IDFV para dispositivos iOS, GAID para dispositivos Android)
- Actualizaciones en tiempo real: Usa el mecanismo de postback de Internal BI de Singular para enviar eventos en tiempo real a tu endpoint. Consulta las Preguntas frecuentes sobre el postback de Internal BI
- Detalles de implementación: Revisa la sección "Seguimiento de ingresos" de la guía de integración Server-to-Server
Envío de eventos desde un proveedor de ingresos
Integra proveedores de ingresos externos como RevenueCat o adapty para enviar ingresos de compras y suscripciones a Singular.
Proveedores compatibles:
- RevenueCat: Obtén más información en la documentación de RevenueCat
- adapty: Obtén más información en la documentación de adapty
Envío de eventos desde Segment
Habilita Segment para enviar eventos a Singular en paralelo con el SDK de Singular agregando un destino en "modo nube" (Cloud-Mode) en Segment.
Sigue la guía de implementación Integración de Singular con Segment para obtener instrucciones detalladas de configuración.