SDK do Flutter - Rastreamento de Eventos In-App

Rastreamento de Eventos In-App

Rastreie eventos in-app para analisar o desempenho de campanhas e medir indicadores-chave de desempenho (KPI), como logins de usuários, registros, conclusões de tutoriais ou marcos de progressão.

Eventos e Atributos Padrão

Entendendo os Tipos de Evento

O Singular oferece suporte a dois tipos de eventos para atender tanto às necessidades de rastreamento universal quanto às específicas do app.

  • Eventos Padrão: Eventos predefinidos (por exemplo, sngLogin , sngContentView ) reconhecidos pelo Singular e suportados por redes de anúncios para relatórios e otimização. O uso de eventos padrão simplifica a configuração, pois o Singular os adiciona automaticamente à sua lista de Eventos sem definição manual. Consulte a Lista de Eventos e Atributos Padrão para obter os nomes completos dos eventos e os atributos recomendados.
  • Eventos Personalizados: Eventos exclusivos do seu app (por exemplo, Signup , AchievementUnlocked ) que não correspondem aos eventos padrão do Singular.

Recomendação: Use eventos padrão sempre que possível para garantir a compatibilidade com redes de anúncios e o reconhecimento automático na lista de Eventos do Singular.

Sua equipe de UA, marketing ou negócios deve compilar a lista de eventos com base nos KPIs de marketing da sua organização. Consulte o guia Como Rastrear Eventos In-App: Guia para Clientes de Atribuição do Singular para planejamento.


Limitações de Eventos Personalizados

Os eventos personalizados têm restrições específicas de caracteres e codificação para garantir a compatibilidade com parceiros terceiros e soluções de análise.

Limitações de Eventos Personalizados:

  • Idioma: Passe os nomes de eventos e atributos em inglês para garantir a compatibilidade com parceiros terceiros e soluções de análise
  • Nomes de Eventos: Limitados a 32 caracteres ASCII. Strings não ASCII devem ter menos de 32 bytes quando convertidas para UTF-8
  • Atributos e Valores: Limitados a 500 caracteres ASCII

Enviando Eventos

Método Event

Rastreie eventos simples sem atributos adicionais usando o método event() .

Dart
import 'package:singular_flutter_sdk/singular.dart';

// Track a simple custom event
Singular.event('SignUp');

// Track a standard event
Singular.event('sngLogin');

Assinatura do Método:

static void event(String eventName)

Para a lista completa de métodos, consulte a referência do método event .


Método EventWithArgs

Rastreie eventos com atributos personalizados adicionais para fornecer um contexto mais rico e permitir uma segmentação detalhada nos relatórios.

Dart
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'
});

Assinatura do Método:

static void eventWithArgs(String eventName, Map args)

Para a lista completa de métodos, consulte a referência do método eventWithArgs .


Práticas Recomendadas

  • Use Eventos Padrão: Prefira eventos padrão para garantir a compatibilidade com redes de anúncios e o reconhecimento automático na lista de Eventos do Singular
  • Valide os Atributos: Verifique se os atributos correspondem ao formato esperado e aos limites de caracteres antes de enviar
  • Depure os Eventos: Ative o registro de logs do SDK durante o desenvolvimento para verificar se os eventos são enviados corretamente e acionados nos momentos apropriados
  • Coordene com as Equipes: Trabalhe com sua equipe de UA/marketing para garantir que os eventos rastreados estejam alinhados aos KPIs do seu app
  • Teste Antes da Produção: Teste os eventos em um ambiente de desenvolvimento para verificar a precisão dos dados no Singular Dashboard

Rastreamento de Receita In-App

Rastreie a receita de compras in-app (IAP), assinaturas e fontes de receita personalizadas para medir o desempenho de campanhas e o retorno sobre o investimento em publicidade (ROAS).

Os dados de receita fluem por três canais:

  • Relatórios Interativos: Visualize as métricas de receita no dashboard do Singular
  • Logs de Exportação: Acesse dados detalhados de ETL para análises personalizadas
  • Postbacks em Tempo Real: Envie eventos de receita para plataformas externas

Por Que Rastrear Eventos de Receita?

  • Análises Ricas: Capture dados detalhados de transações para aprimorar os relatórios do Singular
  • Prevenção de Fraude: Inclua recibos de transações (por exemplo, do Google Play ou da Apple App Store) para validar compras e combater fraudes in-app
  • Otimização de Campanhas: Meça o ROI vinculando a receita aos esforços de marketing

Prática Recomendada: Passe o Objeto de Compra Completo

Recomendamos fortemente passar o objeto de compra retornado pelo processo de Compra In-App (IAP) do Android (Google Play Billing) ou do iOS (StoreKit). Isso garante que o Singular receba detalhes completos da transação, incluindo:

  • Product ID
  • Preço
  • Moeda
  • Transaction ID
  • Dados do recibo (para validação)

Ao passar o objeto de compra completo, você habilita relatórios mais ricos e aproveita os recursos de detecção de fraude do Singular, particularmente para transações do Google Play.


Integração de Compra In-App

Capturar o Objeto de Compra IAP

Use o pacote in_app_purchase do Flutter para recuperar o objeto de compra com os detalhes completos da transação.

  • Flutter: Use o pacote in_app_purchase para acessar os detalhes de compra tanto do iOS StoreKit quanto do Android Google Play Billing

Método InAppPurchase

Rastreie eventos de compra in-app com detalhes da compra para validação de receita e prevenção de fraude.

Assinaturas do Método:

static void inAppPurchase(String eventName, SingularIAP purchase)
static void inAppPurchaseWithAttributes(String eventName, SingularIAP purchase, Map attributes)

Para a lista completa de métodos, consulte a referência do método inAppPurchase .


Exemplo Completo de Implementação de IAP

Implemente um listener de compra completo que captura eventos de IAP e os envia para o Singular com objetos de compra específicos da plataforma.

Dart
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);
}

Rastreamento Manual de Receita

Receita sem Validação de Compra

Rastreie a receita passando a moeda, o valor e os detalhes opcionais do produto sem o objeto de Compra. Observe que este método não fornece recibos de transação para validação.

Importante: Ao enviar eventos de receita sem um objeto de compra válido, o Singular não valida as transações. Recomendamos fortemente usar os métodos inAppPurchase() descritos acima sempre que possível.

Observação: Passe a moeda como um código de moeda ISO 4217 de três letras, por exemplo, USD , EUR , INR .


Método CustomRevenue

Rastreie eventos de receita personalizada com um nome de evento, moeda e valor especificados.

Dart
import 'package:singular_flutter_sdk/singular.dart';

// Track custom revenue event
Singular.customRevenue('PremiumUpgrade', 'USD', 9.99);

Assinatura do Método:

static void customRevenue(String eventName, String currency, double amount)

Para a lista completa de métodos, consulte a referência do método customRevenue .


Método CustomRevenueWithAttributes

Rastreie eventos de receita personalizada com um nome de evento, moeda, valor e atributos personalizados adicionais especificados.

Dart
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
});

Assinatura do Método:

static void customRevenueWithAttributes(
  String eventName,
  String currency,
  double amount,
  Map attributes
)

Para a lista completa de métodos, consulte a referência do método customRevenueWithAttributes .


Método CustomRevenueWithAllAttributes

Rastreie eventos de receita personalizada com todos os atributos possíveis, incluindo SKU do produto, nome, categoria, quantidade e atributos personalizados.

Dart
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'
  }
);

Assinatura do Método:

static void customRevenueWithAllAttributes(
  String eventName,
  String currency,
  double amount,
  String productSKU,
  String productName,
  String productCategory,
  int productQuantity,
  Map attributes
)

Para a lista completa de métodos, consulte a referência do método customRevenueWithAllAttributes .


Receita de Assinatura

Rastreando Assinaturas

O Singular oferece um guia completo sobre a implementação de eventos de assinatura usando o Singular SDK. O guia aborda o rastreamento de eventos de assinatura in-app em diversas plataformas.


Rastreamento Híbrido de Eventos (Avançado)

Incompatibilidade com CDP e integração de terceiros: O SDID não é compatível com CDPs (Segment, mParticle, RudderStack) nem com provedores de assinatura terceiros (RevenueCat, Adapty). Se o SDID estiver habilitado, essas plataformas não podem ser usadas em paralelo para o encaminhamento de eventos, o que leva a uma atribuição incompleta ou quebrada.

O Singular recomenda enviar todos os eventos e a receita por meio do Singular SDK integrado ao seu app para uma atribuição ideal. No entanto, o Singular pode coletar eventos de outras fontes quando necessário.

Os eventos enviados fora do Singular SDK devem estar em conformidade com os requisitos da documentação de Eventos Server-to-Server do Singular e fornecer identificadores de dispositivo correspondentes para uma atribuição correta.

Importante:

Ocorrerão discrepâncias se os identificadores de dispositivo usados nas solicitações de eventos Server-to-Server não tiverem um identificador de dispositivo correspondente no Singular. Esteja ciente das seguintes possibilidades:

  • Eventos Antecipados: Se uma solicitação de evento for recebida antes de o Singular SDK ter registrado o identificador de dispositivo a partir de uma App Session, a solicitação de evento será considerada a "primeira sessão" para o dispositivo desconhecido, e o Singular atribuirá o dispositivo como uma atribuição orgânica
  • Identificadores Incompatíveis: Se o Singular SDK registrou um identificador de dispositivo, mas ele difere do identificador de dispositivo especificado na solicitação de evento Server-to-Server, então o evento será atribuído incorretamente

Guias de Rastreamento Híbrido de Eventos

Enviando Eventos de um Servidor Interno

Colete dados de receita do seu servidor interno para analisar o desempenho de campanhas e o ROI.

Requisitos:

  • Capturar Identificadores de Dispositivo: A partir de um Evento de Registro ou Login in-app, capture e passe os identificadores de dispositivo e armazene esses dados com o User ID no seu servidor. Como os identificadores de dispositivo podem mudar para um usuário, atualize os identificadores quando um usuário gerar uma app session. Isso garante que o evento do lado do servidor seja atribuído ao dispositivo correto
  • Identificadores Específicos da Plataforma: Os eventos do lado do servidor são específicos da plataforma e devem ser enviados apenas com o identificador de dispositivo correspondente à plataforma do dispositivo (por exemplo, IDFA ou IDFV para dispositivos iOS, GAID para dispositivos Android)
  • Atualizações em Tempo Real: Use o mecanismo de postback de BI Interno do Singular para enviar um evento em tempo real para o seu endpoint interno, de modo que você possa atualizar o conjunto de dados no lado do servidor. Consulte o FAQ de Postback de BI Interno
  • Detalhes de Implementação: Revise a seção Rastreamento de Receita no guia de Integração Server-to-Server para obter detalhes

Enviando Eventos de um Provedor de Receita

Integre provedores de receita terceiros como RevenueCat ou adapty para enviar receita de compras e assinaturas ao Singular.

Provedores Suportados:


Enviando Eventos do Segment

Habilite o Segment para enviar eventos ao Singular em paralelo com o Singular SDK adicionando um destino "Cloud-Mode" no Segment.

Siga o guia de implementação Integração Singular-Segment para obter instruções detalhadas de configuração.