Seguimiento de eventos dentro de la aplicación
Singular puede recopilar datos sobre eventos dentro de la aplicación para ayudar a analizar el rendimiento de sus campañas y medir los KPI. Por ejemplo, es posible que su organización desee recopilar datos sobre inicios de sesión, registros, finalización de tutoriales o subidas de nivel en una aplicación de juegos.
Eventos y atributos estándar
Singular admite una serie de eventos estándar. Estos eventos de uso común suelen ser compatibles con las redes publicitarias para la generación de informes y la optimización. Otra ventaja es que cuando utiliza nombres de eventos estándar, Singular los reconoce automáticamente y los añade a la lista de eventos sin que tenga que definirlos manualmente. Recomendamos utilizar eventos estándar siempre que sea posible.
La lista de eventos enviados a Singular (con los atributos que los acompañan) debe ser compilada por el equipo de UA/marketing/negocio basándose en los KPI de marketing de su organización. El equipo comercial puede seguir la guía Cómo realizar el seguimiento de los eventos In-App: Guía para clientes de Singular Attribution.
Con cada evento que rastree, puede pasar varios atributos. Consulte los atributos estándar recomendados por evento.
Envío de eventos
En su código, envíe eventos a Singular utilizando los métodos eventJSON o event (recomendamos eventJSON para facilitar la lectura).
- Para los eventos estándar, utilice el nombre Android del evento tal y como aparece en la lista de eventos y atributos estándar del SDK de Android, por ejemplo, sngTutorialComplete. Consulte los siguientes ejemplos de código.
- Si envía eventos personalizados (eventos que su organización desea medir y que no coinciden con ninguno de los eventos estándar de Singular), utilice cualquier cadena que desee y que cumpla con las limitaciones.
Limitaciones de eventos personalizados:
- Recomendamos encarecidamente pasar los nombres y atributos de los eventos en inglés para garantizar la compatibilidad con socios y soluciones de análisis de terceros si tiene previsto utilizarlos.
- Losnombres de eventos están limitados a 32 caracteres ASCII. Las cadenas en caracteres no ASCII deben tener menos de 32 bytes una vez convertidas a UTF-8.
- Los atributos y valores están limitados a 500 caracteres ASCII.
Método Singular.eventJSON
Notifica un evento de usuario a Singular con información adicional en formato JSONObject.
Firmas
Singular.eventJSON(String name, JSONObject args)
Ejemplos de uso
// Example 1:
// Send the standard event sng_tutorial_complete with the
// recommended standard attributes
JSONObject att = new JSONObject();
try {
att.put(Attributes.sngAttrContent.toString(), "Telugu");
att.put(Attributes.sngAttrContentId.toString(), 32);
att.put(Attributes.sngAttrContentType.toString(), "video");
att.put(Attributes.sngAttrSuccess.toString(), 92);
} catch (JSONException e) {
e.printStackTrace(); // Or log the exception
}
Singular.eventJSON(Events.sngTutorialComplete.toString(), att);
// Example 2:
// Send a custom event named "bonus_points_earned" with custom attributes
JSONObject att = new JSONObject();
try {
att.put("Points", 500);
att.put("score", 650);
} catch (JSONException e) {
e.printStackTrace(); // Or log the exception
}
Singular.eventJSON("Bonus Points Earned", att);
// Example 1:
// Send the standard event sng_tutorial_complete with the
// recommended standard attributes
val att = JSONObject().apply {
put(Attributes.sngAttrContent.toString(), "Telugu")
put(Attributes.sngAttrContentId.toString(), 32)
put(Attributes.sngAttrContentType.toString(), "video")
put(Attributes.sngAttrSuccess.toString(), 75)
}
Singular.eventJSON(Events.sngTutorialComplete.toString(), att)
// Example 2:
// Send a custom event named "bonus_points_earned" with custom attributes
val att = JSONObject().apply {
put("Points", 500)
put("score",650)
}
Singular.eventJSON("Bonus Points Earned", att)
Método Singular.event
Notifica un evento de usuario a Singular con o sin información adicional.
Firmas
Singular.event(String eventName)
Singular.event(String eventName, Object... args)
Nota: 'args' es uno o varios pares clave-valor (véase el ejemplo siguiente). La clave es una cadena y el valor puede ser cualquier tipo permitido como valor JSONObject (es decir, JSONObject, JSONArray, String, Boolean, Integer, Long, Double o NULL).
La lista 'args' debe contener un número par de elementos o el evento será rechazado por Singular.
Ejemplos de uso
// Example 1:
// Send the standard event "Subscribe" (sng_subscribe) without any attributes
Singular.event(Events.sngSubscribe.toString());
// Example 2:
// Send the standard event "sng_tutorial_complete" with the
//recommended standard attributes
Singular.event(Events.sngTutorialComplete.toString(),
Attributes.sngAttrContent.toString(), "Spanish",
Attributes.sngAttrContentId.toString(), 52,
Attributes.sngAttrContentType.toString(), "video",
Attributes.sngAttrSuccess.toString(), 46
);
// Example 3:
// Send a custom event named "SignUp" without any custom attributes
Singular.event("SignUp");
// Example 4:
// Send a custom event named "bonus_points_earned" with a custom attribute
Singular.event("Bonus Points Earned", "Points", 500);
// Example 1:
// Send the standard event "Subscribe" (sng_subscribe) with no attributes
Singular.event(Events.sngSubscribe.toString())
// Example 2:
// Send the standard event sng_tutorial_complete with the
// recommended standard attributes
Singular.event(Events.sngTutorialComplete.toString(),
Attributes.sngAttrContent.toString(), "Telugu",
Attributes.sngAttrContentId.toString(), "32",
Attributes.sngAttrContentType.toString(), "video",
Attributes.sngAttrSuccess.toString(), "yes"
)
// Example 3:
// Send a custom event named "SignUp" with no custom attributes
Singular.event("SignUp")
// Example 4:
// Send a custom event named "bonus_points_earned" with a custom attribute
Singular.event("Bonus Points Earned", "Points", 500)
Seguimiento de ingresos en la aplicación
Singular captura eventos de ingresos de compras dentro de la aplicación (IAP), suscripciones e ingresos personalizados para medir el rendimiento de la campaña y el retorno de la inversión publicitaria (ROAS). Los datos de ingresos están disponibles a través de tres canales clave:
- Informes interactivos en el panel de control de Singular
- Registros de exportación detallados y destinos de datos ETL para análisis personalizados
- Postbacks en tiempo real a plataformas externas
Este seguimiento exhaustivo de los ingresos permite tomar decisiones basadas en datos sobre el gasto en marketing y la optimización de campañas, al tiempo que proporciona flexibilidad en la forma de consumir y analizar los datos.
- Si se utilizan nombres de eventos de ingresos personalizados, éstos están limitados a 32 caracteres ASCII. Para caracteres no ASCII, el límite es de 32 bytes una vez convertidos a UTF-8.
- Los nombres de atributos de eventos y los valores de atributos están limitados a 500 caracteres ASCII.
-
Los códigos de moneda deben escribirse TODO EN MAYÚSCULAS y ajustarse al código de moneda ISO 4217 de tres letras:
USD, EUR, INR
Mejores prácticas
- Singular recomienda pasar eventos utilizando la convención de nomenclatura de eventos y atributos estándar de Singular.
- Si se utilizan nombres de eventos de ingresos personalizados, deben enviarse en inglés para mejorar la compatibilidad con las devoluciones de la red publicitaria.
- Los eventos de ingresos sólo deben enviarse a Singular cuando el importe de ingresos sea mayor o menor que 0.
Compras dentro de la aplicación sin suscripción
Para informar de eventos de ingresos a Singular, pase el objeto Purchase recibido de la biblioteca de facturación de Google a los métodos SDK revenue o customRevenue. Esto tiene dos ventajas:
- Singular obtiene todos los detalles de la transacción, lo que enriquece sus informes de Singular.
- Singular obtiene el recibo de la transacción de Google, que puede utilizarse para validar la transacción en el contexto de la lucha contra el fraude dentro de la aplicación.
Notas:
- customRevenue te permite pasar un nombre de evento personalizado, de modo que podrás ver los ingresos en los informes de Singular desglosados por los diferentes tipos de eventos de ingresos.
- Cualquier ingreso informado en una moneda diferente se convertirá automáticamente a la moneda preferida de su organización, según lo establecido en su cuenta de Singular.
Método de ingresos
Envíe un evento de ingresos a Singular con el objeto Purchase.
Firmas
Singular.revenue(String currency, double amount, Object purchase)
Ejemplos de uso
Singular.revenue("USD", 5.50, purchase);
Singular.revenue("USD", 5.50, purchase)
Método customRevenue
Envía un evento de ingresos a Singular con un nombre de evento personalizado y el objeto Purchase.
Firmas
Singular.customRevenue(String eventName, String currency, double amount, Object purchase)
Ejemplos de uso
Singular.customRevenue("MyCustomRevenue", "USD", 5.50, purchase);
Singular.customRevenue("MyCustomRevenue", "USD", 5.50, purchase)
Ingresos de Suscripción
Seguimiento de suscripciones:
Singular le permite realizar un seguimiento de sus suscripciones y renovaciones dentro de su aplicación, proporcionando información sobre el comportamiento del usuario y la generación de ingresos. Consulte nuestra completa guía sobre cómo implementar eventos de suscripción utilizando el SDK de Singular. [Guía técnica de implementación de eventos de suscripción]
Ingresos personalizados sin validación de compra
Aunque recomendamos encarecidamente informar de los eventos de ingresos de la forma descrita anteriormente, también puede utilizar revenue y customRevenue sin pasar el objeto de compra. En su lugar, puede pasar la divisa y el importe de la transacción, así como detalles opcionales del producto.
El método customRevenue también permite pasar un nombre de evento personalizado.
Tenga en cuenta que si utiliza estos métodos, Singular no obtiene el recibo de la transacción y no puede validar la transacción.
Método revenue
Envía un evento de ingresos a Singular con el importe de los ingresos, la moneda y detalles opcionales.
Firmas
Singular.revenue(String currency, double amount)
Singular.revenue(String currency, double amount, String productSKU, String productName, String productCategory, int productQuantity, double productPrice)
Singular.revenue(String currency, double amount, Map<String, Object> attributes)
Ejemplos de uso
Sin detalles del producto
Singular.revenue("USD", 5.50);
Con detalles del producto
Singular.revenue("EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee" , 1, 5.00);
Con detalles del producto en un mapa de atributos
Map<string, object="Object"> attributes = new HashMap<>();
attributes.put("product_id", "com.app.premium");
attributes.put("transaction_id", "T12345");
attributes.put("quantity", 1);
attributes.put("is_trial", false);
// Call the revenue method
Singular.revenue("USD", 9.99, attributes);
Sin detalles del producto
Singular.revenue("USD", 5.50)
Con detalles del producto
Singular.revenue("EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee" , 1, 5.00)
Con detalles del producto en un mapa de atributos
val attributes = mutableMapOf<String, Any>().apply {
put("product_id", "com.app.premium")
put("transaction_id", "T12345")
put("quantity", 1)
put("is_trial", false)
}
// Call the revenue method
Singular.revenue("USD", 9.99, attributes)
Método customRevenue
Envía eventos de ingresos personalizados a Singular especificando el nombre del evento, el importe de los ingresos, el código de moneda y cualquier atributo de transacción adicional. Singular procesa estos eventos para realizar un seguimiento de los ingresos dentro de la aplicación.
Firmas
Singular.customRevenue(String eventName, String currency, double amount)
Singular.customRevenue(String eventName, String currency, double amount, String productSKU, String productName, String productCategory, int productQuantity, double productPrice)
Singular.customRevenue(String eventName, String currency, double amount, Map<String, Object> attributes)
Ejemplos de uso
Sin detalles del producto
Singular.customRevenue("MyCustomRevenue", "USD", 5.50);
Con detalles del producto
Singular.customRevenue("MyCustomRevenue", "EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee" , 1, 5.00);
Con detalles del producto en un mapa de atributos
Map<string, object="Object"> attributes = new HashMap<>();
attributes.put("product_id", "com.app.premium");
attributes.put("transaction_id", "T12345");
attributes.put("quantity", 1);
attributes.put("is_trial", false);
// Call the revenue method
Singular.customRevenue("MyCustomRevenue", "USD", 9.99, attributes);
Sin detalles del producto
Singular.customRevenue("MyCustomRevenue", "USD", 5.50)
Con detalles del producto
Singular.customRevenue("MyCustomRevenue", "EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee" , 1, 5.00)
Con detalles del producto en un mapa de atributos
val attributes = mutableMapOf<String, Any>().apply {
put("product_id", "com.app.premium")
put("transaction_id", "T12345")
put("quantity", 1)
put("is_trial", false)
}
// Call the revenue method
Singular.customRevenue("MyCustomRevenue", "USD", 9.99, attributes)
Seguimiento de Eventos Híbrido (Avanzado)
Singular recomienda enviar todos los eventos e ingresos a través del SDK de Singular integrado en su aplicación. Sin embargo, Singular puede recopilar eventos e ingresos de otras fuentes.
Cualquier evento NO enviado desde el SDK de Singular debe cumplir con los requisitos de documentación de eventos de servidor a servidor de Singular y proporcionar el identificador de dispositivo correspondiente para atribuir correctamente un evento.
Importante:
Se producirán discrepancias si los identificadores de dispositivo utilizados en las solicitudes de eventos de servidor a servidor no tienen un identificador de dispositivo coincidente en Singular. Tenga en cuenta las siguientes posibilidades:
- Si se recibe una solicitud de evento "antes" de que Singular SDK haya registrado el identificador de dispositivo, desde una App Session, entonces la solicitud de evento se considerará la "primera sesión" para el dispositivo desconocido, y Singular atribuirá el dispositivo como una atribución orgánica.
- Si Singular SDK registró un identificador de dispositivo, pero el identificador de Singular SDK difiere del identificador de dispositivo especificado en la solicitud de evento de servidor a servidor, entonces el evento se atribuirá incorrectamente.
Guías de seguimiento de eventos híbridos
Envío de Eventos desde un Servidor Interno
Singular puede recopilar datos sobre los ingresos de su Servidor para ayudar a analizar el rendimiento y el ROI de sus campañas.
Requisitos:
- Desde un Evento de Registro o Inicio de Sesión in-app, capture y pase los identificadores de dispositivo y almacene estos datos con el ID de Usuario en su servidor. Dado que los identificadores de dispositivo pueden cambiar para un usuario, asegúrese de actualizar los identificadores cuando un usuario genere una sesión de aplicación. Esto garantiza que el evento del lado del servidor se atribuya al dispositivo correcto.
- Los eventos del lado del servidor son específicos de cada plataforma y sólo deben enviarse con el identificador de dispositivo que coincida con la plataforma del dispositivo (por ejemplo, IDFA o IDFV para dispositivos iOS).
- Puede utilizar el mecanismo de postback de Singular Internal BI para enviar un evento en tiempo real a su endpoint interno para que pueda actualizar el conjunto de datos en el lado del servidor. Consulte las Preguntas Frecuentes sobre Postback de BI Interno.
- Revise la sección "Seguimiento de Ingresos" en la guía de Integración Servidor-a-Servidor para más detalles.
Envío de Eventos desde un Proveedor de Ingresos
Proveedores de terceros como RevenueCat o adapty pueden proporcionar Ingresos por Compras y Suscripciones a Singular.
Siga los siguientes enlaces para obtener más información sobre cómo habilitar a estos socios.
Envío de eventos desde Segment
Para habilitar Segment para enviar eventos a Singular, en paralelo con el SDK de Singular, debe añadir un Destino "Cloud-Mode " en Segment. Siga nuestra guía AQUÍ.