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 inicios de sesión de usuarios, registros, finalizaciones de tutoriales o hitos de progresión.
Eventos y atributos estándar
Comprender los tipos de eventos
Singular admite dos tipos de eventos para cubrir tanto las necesidades de seguimiento universales como las específicas de cada app.
-
Eventos estándar:
Eventos predefinidos (por ejemplo,
sngLogin,sngContentView) que Singular reconoce y que las ad networks admiten para reportes y optimización. Usar eventos estándar simplifica la configuración, ya que Singular los agrega automáticamente a tu lista de Events sin necesidad de definirlos manualmente. Consulta la Lista de eventos y atributos estándar para ver los nombres de eventos completos y los atributos recomendados. -
Eventos personalizados:
Eventos exclusivos de tu app (por ejemplo,
Signup,AchievementUnlocked) que no coinciden con los eventos estándar de Singular.
Recomendación: Usa eventos estándar siempre que sea posible para lograr compatibilidad con las ad networks y el reconocimiento automático en la lista de Events de Singular.
Tu equipo de UA, marketing o negocio debe elaborar la lista de eventos en función de 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 planificar.
Limitaciones de los eventos personalizados
Los eventos personalizados tienen restricciones específicas de caracteres y codificación para garantizar la compatibilidad con partners externos y soluciones de analítica.
Limitaciones de los eventos personalizados:
- Idioma: Envía los nombres de eventos y atributos en inglés para garantizar la compatibilidad con partners externos y soluciones de analítica
- Nombres de eventos: Limitados a 32 caracteres ASCII. Las cadenas que no sean ASCII deben tener menos de 32 bytes al convertirse a UTF-8
- Atributos y valores: Limitados a 500 caracteres ASCII
Envío de eventos
Método Event
Haz seguimiento de eventos simples sin atributos adicionales usando el método
event()
.
import 'package:singular_flutter_sdk/singular.dart';
// Track a simple custom event
Singular.event('SignUp');
// Track a standard event
Singular.event('sngLogin');
Firma del método:
static void event(String eventName)
Para ver la lista completa de métodos, consulta la referencia del método event .
Método EventWithArgs
Haz seguimiento de eventos con atributos personalizados adicionales para aportar más contexto y habilitar una segmentación detallada en los reportes.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom event with attributes
Singular.eventWithArgs('LevelComplete', {
'level': 5,
'score': 1250,
'time_spent': 45.3
});
// Track standard event with recommended attributes
Singular.eventWithArgs('sngTutorialComplete', {
'sngAttrContent': 'Flutter Basics',
'sngAttrContentId': '32',
'sngAttrContentType': 'video',
'sngAttrSuccess': 'yes'
});
Firma del método:
static void eventWithArgs(String eventName, Map args)
Para ver la lista completa de métodos, consulta la referencia del método eventWithArgs .
Mejores prácticas
- Usa eventos estándar: Prefiere los eventos estándar para lograr compatibilidad con las ad networks y el reconocimiento automático en la lista de Events de Singular
- Valida los atributos: Verifica que los atributos cumplan con el formato esperado y los límites de caracteres antes de enviarlos
- Depura los eventos: Habilita el registro (logging) del SDK durante el desarrollo para verificar que los eventos se envíen correctamente y se activen en los momentos adecuados
- Coordina con los equipos: Trabaja con tu equipo de UA/marketing para asegurar que los eventos rastreados se alineen con los KPI de tu app
- Prueba antes de producción: Prueba los eventos en un entorno de desarrollo para verificar la exactitud de los datos en el Singular Dashboard
Seguimiento de ingresos in-app
Haz seguimiento de los ingresos provenientes 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:
- Reportes interactivos: Consulta las métricas de ingresos en el Singular dashboard
- Export Logs: Accede a datos ETL detallados para análisis personalizados
- Postbacks en tiempo real: Envía eventos de ingresos a plataformas externas
¿Por qué hacer seguimiento de los eventos de ingresos?
- Analítica enriquecida: Captura datos detallados de transacciones para mejorar los reportes de Singular
- Prevención de fraude: Incluye los recibos de las transacciones (por ejemplo, de Google Play o Apple App Store) para validar las compras y combatir el fraude in-app
- Optimización de campañas: Mide el ROI vinculando los ingresos con las acciones de marketing
Mejor práctica: pasa el objeto de compra completo
Recomendamos encarecidamente pasar el objeto de compra que devuelve el proceso de compra in-app (IAP) de Android (Google Play Billing) o de iOS (StoreKit). Esto garantiza que Singular reciba todos los detalles de la transacción, incluyendo:
- Product ID
- Precio
- Moneda
- Transaction ID
- Datos del recibo (para validación)
Al pasar el objeto de compra completo, habilitas reportes más enriquecidos y aprovechas las capacidades de detección de fraude de Singular, especialmente para las transacciones de Google Play.
Integración de compras in-app
Captura el objeto de compra IAP
Usa el paquete in_app_purchase de Flutter para obtener el objeto de compra con todos los detalles de la transacción.
- Flutter: Usa el paquete in_app_purchase para acceder a los detalles de compra tanto de iOS StoreKit como de Android Google Play Billing
Método InAppPurchase
Haz seguimiento de los eventos de compra in-app con los detalles de la compra para la validación de ingresos y la prevención de fraude.
Firmas del método:
static void inAppPurchase(String eventName, SingularIAP purchase)
static void inAppPurchaseWithAttributes(String eventName, SingularIAP purchase, Map attributes)
Para ver la lista completa de métodos, consulta la referencia del método inAppPurchase .
Ejemplo completo de implementación de IAP
Implementa un listener de compras completo que capture los eventos de IAP y los envíe a Singular con objetos de compra específicos de cada plataforma.
import 'dart:io' show Platform;
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_iap.dart';
Future<void> handlePurchase(PurchaseDetails purchaseDetails) async {
if (purchaseDetails.status != PurchaseStatus.purchased &&
purchaseDetails.status != PurchaseStatus.restored) {
return;
}
final response = await InAppPurchase.instance
.queryProductDetails({purchaseDetails.productID});
if (response.productDetails.isEmpty) {
return;
}
final product = response.productDetails.first;
// Extract price and currency with platform-specific handling
double price = 0.0;
String currency = 'USD';
if (Platform.isAndroid && product is GooglePlayProductDetails) {
final offer = product.productDetails.oneTimePurchaseOfferDetails;
price = (offer?.priceAmountMicros ?? 0) / 1000000;
currency = offer?.priceCurrencyCode ?? 'USD';
} else if (Platform.isIOS && product is AppStoreProductDetails) {
price = product.skProduct.price;
currency = product.skProduct.priceLocale.currencyCode ?? 'USD';
}
SingularIAP? singularPurchase;
if (Platform.isAndroid && purchaseDetails is GooglePlayPurchaseDetails) {
singularPurchase = SingularAndroidIAP(
price,
currency,
purchaseDetails.billingClientPurchase.signature,
purchaseDetails.billingClientPurchase.originalJson,
);
} else if (Platform.isIOS && purchaseDetails is AppStorePurchaseDetails) {
singularPurchase = SingularIOSIAP(
price,
currency,
purchaseDetails.productID,
purchaseDetails.skPaymentTransaction.transactionIdentifier ?? '',
purchaseDetails.verificationData.serverVerificationData,
);
} else {
return;
}
const String eventName = 'iap_purchase';
// Track with attributes (use only ONE tracking method)
Singular.inAppPurchaseWithAttributes(eventName, singularPurchase, {
'user_level': 42,
'is_first_purchase': true,
'gems_balance': 1500
});
await InAppPurchase.instance.completePurchase(purchaseDetails);
}
Seguimiento manual de ingresos
Ingresos sin validación de compra
Haz seguimiento de los ingresos pasando la moneda, el monto y, opcionalmente, los detalles del producto, sin el objeto Purchase. Ten en cuenta que este método no proporciona recibos de transacción para validación.
Importante:
Cuando envías eventos de ingresos sin un objeto de compra válido, Singular no valida las transacciones. Recomendamos encarecidamente usar los métodos
inAppPurchase()
descritos anteriormente siempre que sea posible.
Nota:
Pasa la moneda como un código de moneda ISO 4217 de tres letras, por ejemplo,
USD
,
EUR
,
INR
.
Método CustomRevenue
Haz seguimiento de eventos de ingresos personalizados con un nombre de evento, moneda y monto especificados.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue event
Singular.customRevenue('PremiumUpgrade', 'USD', 9.99);
Firma del método:
static void customRevenue(String eventName, String currency, double amount)
Para ver la lista completa de métodos, consulta la referencia del método customRevenue .
Método CustomRevenueWithAttributes
Haz seguimiento de eventos de ingresos personalizados con un nombre de evento, moneda, monto y atributos personalizados adicionales especificados.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue event with attributes
Singular.customRevenueWithAttributes('PremiumBundlePurchase', 'USD', 99.99, {
'productSKU': 'premium_bundle_xyz',
'productName': 'Premium Bundle',
'productCategory': 'Bundles',
'productQuantity': 1,
'discount_applied': true
});
Firma del método:
static void customRevenueWithAttributes(
String eventName,
String currency,
double amount,
Map attributes
)
Para ver la lista completa de métodos, consulta la referencia del método customRevenueWithAttributes .
Método CustomRevenueWithAllAttributes
Haz seguimiento de eventos de ingresos personalizados con todos los atributos posibles, incluidos el SKU del producto, el nombre, la categoría, la cantidad y atributos personalizados.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue with all attributes
Singular.customRevenueWithAllAttributes(
'CoinPackagePurchase',
'USD',
4.99,
'coin_package_abc123',
'Coin Pack 10',
'Virtual Currency',
2,
{
'payment_method': 'google_play',
'transaction_id': 'T12345'
}
);
Firma del método:
static void customRevenueWithAllAttributes(
String eventName,
String currency,
double amount,
String productSKU,
String productName,
String productCategory,
int productQuantity,
Map attributes
)
Para ver la lista completa de métodos, consulta la referencia del método customRevenueWithAllAttributes .
Ingresos por suscripciones
Seguimiento de suscripciones
Singular ofrece una guía completa sobre cómo implementar eventos de suscripción usando el Singular SDK. La guía cubre el seguimiento de eventos de suscripción in-app en distintas plataformas.
- Lee la Guía técnica de implementación de eventos de suscripción si deseas hacer seguimiento de los ingresos por suscripciones
Seguimiento híbrido de eventos (avanzado)
Incompatibilidad con CDP e integraciones de terceros: SDID no es compatible con los CDP (Segment, mParticle, RudderStack) ni con proveedores de suscripciones de terceros (RevenueCat, Adapty). Si SDID está habilitado, estas plataformas no pueden usarse en paralelo para el reenvío de eventos, lo que provoca una atribución incompleta o defectuosa.
Singular recomienda enviar todos los eventos e ingresos a través del Singular SDK integrado en tu app para obtener una atribución óptima. Sin embargo, Singular puede recopilar eventos de otras fuentes cuando sea necesario.
Los eventos enviados fuera del Singular SDK deben cumplir con los requisitos de la documentación de eventos Server-to-Server de Singular y proporcionar identificadores de dispositivo coincidentes para una atribución correcta.
Importante:
Se producirán discrepancias si los identificadores de dispositivo utilizados en las solicitudes de eventos Server-to-Server no tienen un identificador de dispositivo coincidente en Singular. Ten en cuenta las siguientes posibilidades:
- Eventos tempranos: Si una solicitud de evento se recibe antes de que el Singular SDK haya registrado el identificador de dispositivo a partir de una App Session, la solicitud de evento se considerará la "primera sesión" del dispositivo desconocido, y Singular atribuirá el dispositivo como una atribución orgánica
- Identificadores no coincidentes: Si el Singular SDK registró un identificador de dispositivo, pero difiere del identificador de dispositivo especificado en la solicitud de evento Server-to-Server, entonces 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 los identificadores de dispositivo: A partir de un evento in-app de Registro o Inicio de sesión, captura y pasa los identificadores de dispositivo y almacena estos datos junto con el User ID en tu servidor. Dado que los identificadores de dispositivo pueden cambiar para un usuario, actualízalos cuando un usuario genere una app session. Esto garantiza que el evento del lado del servidor se atribuya al dispositivo correcto
- Identificadores específicos de la plataforma: Los eventos del lado del servidor son específicos de cada plataforma y solo deben enviarse con el identificador de dispositivo que coincida con la plataforma del dispositivo (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 un evento en tiempo real a tu endpoint interno y así poder actualizar el conjunto de datos del lado del servidor. 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 para más detalles
Envío de eventos desde un proveedor de ingresos
Integra proveedores de ingresos de terceros como RevenueCat o adapty para enviar ingresos por compras y suscripciones a Singular.
Proveedores compatibles:
- RevenueCat: Más información en la documentación de RevenueCat
- adapty: Más información en la documentación de adapty
- Superwall: Más información en la documentación de Superwall
- Xsolla: Más información en la documentación de Xsolla
Envío de eventos desde Segment
Habilita Segment para enviar eventos a Singular en paralelo con el Singular SDK agregando un destino "Cloud-Mode" en Segment.
Sigue la guía de implementación Integración Singular-Segment para obtener instrucciones de configuración detalladas.