SDK do Android - Suporte a notificações push

Suporte a notificações push

Acompanhe as interações dos usuários com notificações push para medir campanhas de re-engajamento e atribuir conversões com precisão, integrando o Firebase Cloud Messaging (FCM) ao SDK do Singular.

Siga as diretrizes de implementação abaixo para garantir que os dados das notificações sejam corretamente passados ao SDK do Singular para a atribuição adequada.

Por que acompanhar notificações push: As notificações push impulsionam o re-engajamento, mas o rastreamento exige integração correta. O Singular garante que usuários que interagem com notificações sejam atribuídos corretamente, otimizando as campanhas de marketing e as estratégias de engajamento.


Guia de implementação

Tratar notificações do FCM

Sobrescreva o método onMessageReceived() no seu FirebaseMessagingService para capturar os dados da notificação quando as mensagens push chegarem.

Kotlin Java
override fun onMessageReceived(message: RemoteMessage) {
    super.onMessageReceived(message)
    var title = ""
    var body = ""

    message.notification?.let {
        Log.d("singular-app", it.toString())
        title = it.title ?: ""
        body = it.body ?: ""
    }

    val data: Map<String, String> = message.data
    if (data.isNotEmpty()) {
        Log.d("singular-app", data.toString())
    }

    // Forward payload data to intent
    processNotification(title, body, data)
}

Melhor prática: Capture tanto o conteúdo da notificação (title, body) quanto o payload de dados para garantir que as informações completas de rastreamento estejam disponíveis para a atribuição.


Processar e encaminhar os dados da notificação

Crie um intent que inicie sua MainActivity com o payload da notificação anexado, garantindo que o Singular receba os dados de rastreamento.

Kotlin Java
private fun processNotification(title: String, body: String, data: Map<String, String>) {
    val intent = Intent(this, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

        // Attach notification data to the intent
        data.forEach { (key, value) ->
            putExtra(key, value)
        }
    }

    val pendingIntent = PendingIntent.getActivity(
        this,
        0,
        intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )

    val notificationBuilder = NotificationCompat.Builder(this, "your_channel_id")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle(title)
        .setContentText(body)
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setAutoCancel(true)
        .setContentIntent(pendingIntent)

    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager
    notificationManager?.notify(0, notificationBuilder.build())
}

Requisito para Android 12+: Use PendingIntent.FLAG_IMMUTABLE para Android API 31+ para atender aos requisitos de segurança.


Configurar o SDK para payloads de push

Adicione seletores de payload de notificação push à sua configuração do SDK para especificar onde os links do Singular estão localizados na estrutura de dados da notificação.

Como funciona a atribuição de push. O SDK não analisa os payloads de push recebidos dentro de onMessageReceived . Em vez disso, o link é extraído quando uma activity é iniciada a partir de uma notificação — o SO passa os dados da notificação como o intent de inicialização, que você encaminha para Singular.init() via SingularConfig . O ciclo de vida é:

  1. A notificação chega → onMessageReceived a exibe (seu código).
  2. O usuário toca na notificação → o Android inicia sua activity com os dados da notificação anexados ao intent.
  3. Sua activity chama Singular.init(context, config) , passando o intent por withPushNotificationPayload(intent, selectors) .
  4. O SDK percorre os seletores, encontra o link do Singular e registra a sessão atribuída ao push.

A atribuição de push depende de Singular.init() ser alcançado após a activity ser iniciada pela notificação. Sem withPushNotificationPayload configurado, o link não é extraído, independentemente de como a notificação é construída. O rastreamento de desinstalações via setFCMDeviceToken é independente e não é necessário para a atribuição de push.

Kotlin Java
val pushSelectors = arrayOf(
    arrayOf("sng_link"),
    arrayOf("rootObj", "nestedObj", "anotherNested", "singularLink")
)

val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withPushNotificationPayload(intent, pushSelectors)

Singular.init(applicationContext, config)

Configuração de seletores:

  • Chaves simples: Use arrayOf("sng_link") para chaves de nível superior no payload.
  • Chaves aninhadas: Use arrayOf("rootObj", "nestedObj", "key") para percorrer estruturas JSON aninhadas.
  • Vários caminhos: Defina múltiplos arrays de seletores para verificar diferentes locais possíveis onde os links do Singular podem estar.

Guia de validação

Verificar o payload no Start Session

Confirme se os links de notificações push estão sendo passados corretamente ao Singular inspecionando a chamada da API de Start Session.

O SDK do Singular inclui o payload da notificação push no parâmetro singular_link na solicitação de Start Session quando os usuários tocam em notificações.

Exemplo de uso de solicitação de Start Session:

https://sdk-api-v1.singular.net/api/v1/start?
a=<SDK-Key>
&singular_link=https://singularassist2.sng.link/C4nw9/r1m0?_dl=singular://test&_smtype=3
&i=net.singular.singularsampleapp
&s=1740905574084
&sdk=Singular/v12.6.2

Verificação alternativa: Use o Singular SDK Console para verificar o rastreamento de notificações push. Verifique o campo Deeplink URL para confirmar se o link de rastreamento foi capturado corretamente.


Configuração avançada

Configuração de domínios ESP

Configure domínios externos se você encapsular links do Singular dentro de domínios de provedores de serviços de email (ESP) ou outros domínios de terceiros.

Kotlin Java
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withESPDomains(listOf("sl.esp.link", "custom.domain.com"))

Nota de segurança: Por padrão, apenas os domínios sng.link predefinidos na página Manage Links do Singular são permitidos. Configure os domínios ESP explicitamente se estiver usando links encapsulados.


Roteamento dinâmico de deep links

Implemente vários destinos de deep link a partir de uma única notificação configurando um link de rastreamento do Singular com overrides dinâmicos de redirecionamento.

Exemplo de uso: Uma notificação de notícia urgente com várias opções de ação

  • Ler as últimas notícias: newsapp://article?id=12345
  • Tópicos em alta: newsapp://trending
  • Esportes: newsapp://sports

Em vez de criar vários links de rastreamento, use um único link do Singular e sobrescreva os redirecionamentos dinamicamente com base na escolha do usuário. Consulte Sobrescrever redirecionamentos em links de rastreamento do Singular para detalhes de implementação.


Considerações importantes

Notas de implementação

  • Sem manipulador de callback: Ao contrário de withSingularLink , o recurso de notificações push não fornece callbacks de payload. Implemente sua própria lógica de deep linking para encaminhar os usuários para conteúdo específico dentro do seu app.
  • Fluxo de atribuição: Quando os usuários tocam nas notificações, o Singular recupera o payload e o inclui no evento de Start Session disparado por Singular.init() . O backend processa esses dados para atribuir o touchpoint da notificação push e registrar o rastreamento de re-engajamento.
  • Restrições de domínio: Apenas os domínios de links do Singular ( sng.link ) da página Manage Links são permitidos por padrão. Configure os domínios ESP explicitamente para links encapsulados usando withESPDomains()

Pronto: Seguindo essas etapas, seu app agora rastreia as interações com notificações push pelo Singular, melhorando os insights de desempenho de campanhas e garantindo uma atribuição de re-engajamento precisa.