Suporte ao rastreamento de reengajamento usando notificações push
O Singular suporta o rastreamento de notificações push para melhorar a medição do reengajamento. Ao integrar o Firebase Cloud Messaging (FCM) com o SDK do Singular, é possível rastrear os usuários que interagem com as notificações push e atribuí-los adequadamente.
Para garantir um rastreamento preciso, siga as diretrizes de implementação abaixo e certifique-se de que os dados de notificação sejam passados corretamente para o Singular SDK.
Por que o rastreamento de notificações push é importante?
As notificações push são uma ferramenta chave de reengajamento, mas rastreá-las requer uma integração correta. O Singular garante que os usuários que interagem com as notificações sejam devidamente atribuídos, ajudando a otimizar campanhas de marketing e estratégias de engajamento.
Guia de implementação
Etapa 1: Manipulação de notificações do Firebase Cloud Messaging (FCM)
Quando seu aplicativo recebe uma notificação push do Firebase, o método onMessageReceived() é acionado. Para rastrear notificações no Singular, atualize esse método para processar os dados da notificação.
Exemplo:
@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
super.onMessageReceived(message);
String title = "";
String body = "";
if (message.getNotification() != null) {
Log.d("===singular-app", message.getNotification().toString());
title = message.getNotification().getTitle();
body = message.getNotification().getBody();
}
Map<String, String> data = message.getData(); // Fixed the incorrect Map generic type
if (!data.isEmpty()) {
Log.d("===singular-app", data.toString());
}
// Implement processNotification method to forward payload data to intent
processNotification(title, body, data);
}
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())
}
// Implement processNotification method to forward payload data to intent
processNotification(title, body, data)
}
Isso garante que todos os dados de push relevantes sejam capturados e encaminhados para processamento.
Etapa 2: processamento de notificações push e transmissão de dados para o Singular
Uma vez que a notificação é recebida, é crucial passar seus dados para uma intenção que lança a atividade principal onde o Singular é inicializado.
Exemplo:
private void processNotification(String title, String body, Map<String, String> data) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Attach notification data to the intent
for (Map.Entry<String, String> entry : data.entrySet()) {
intent.putExtra(entry.getKey(), entry.getValue());
}
PendingIntent pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Added FLAG_IMMUTABLE for API 31+
);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "your_channel_id")
.setSmallIcon(R.drawable.info_btn)
.setContentTitle(title)
.setContentText(body)
.setPriority(NotificationCompat.PRIORITY_HIGH) // Optional: Set priority for better visibility
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.notify(0, notificationBuilder.build());
}
}
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 // For Android 12+
)
val notificationBuilder = NotificationCompat.Builder(this, "your_channel_id")
.setSmallIcon(R.drawable.info_btn)
.setContentTitle(title)
.setContentText(body)
.setPriority(NotificationCompat.PRIORITY_HIGH) // Optional for better visibility
.setAutoCancel(true)
.setContentIntent(pendingIntent)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager
notificationManager?.notify(0, notificationBuilder.build())
}
Isso garante que quando o usuário toca na notificação, ele é direcionado para a atividade apropriada com os dados de rastreamento corretos.
Etapa 3: Integrando payloads de notificação por push com o SDK do Singular
Por fim, atualize a configuração do SDK do Singular para garantir que as cargas de notificação por push sejam passadas e processadas corretamente.
Exemplo:
String[][] pushSelectors = {
{"sng_link"},
{"rootObj", "nestedObj", "anotherNested", "singularLink"}
};
config.withPushNotificationPayload(intent, pushSelectors);
Singular.init(context, config);
val pushSelectors = arrayOf(
arrayOf("sng_link"),
arrayOf("rootObj", "nestedObj", "anotherNested", "singularLink")
)
config.withPushNotificationPayload(intent, pushSelectors)
Singular.init(context, config)
Esta etapa garante que o Singular rastreie corretamente os engajamentos de notificação por push para fins de atribuição.
Guia de validação
A chamada da API do SDK da Singular garante que o link do payload da notificação push seja passado corretamente sob o parâmetro reservado singular_link na chamada da sessão inicial.
Exemplo:
https://sdk-api-v1.singular.net/api/v1/start?a=<SDK-Key>&ab=arm64-v8a&aifa=180f63a1-0955-47b4-896a-d75ae3d35955&apc=Marchv7&apg=1&aps=Intex&asid_scope=1&asid_timeinterval=0.112&av=20.0&br=samsung&c=wifi¤t_device_time=1740905574088&de=m15x&device_type=phone&device_user_agent=Dalvik/2.1.0 (Linux; U; Android 14; SM-E156B Build/UP1A.231005.007)&dnt=0&event_index=3&fi=e5bRZuVddO8:APA91bHXI3OmFZv3-r8f03zyji2kvKWbIngwf8KBDHk4Rj5q5MEeEm6EtzC-if1vpJRmuYLyGdAcSz9-nc49eIjD86xwj-n9J4jKucqMVt9mP8ICifP0arA&i=net.singular.singularsampleapp&install_time=1740905507036&is=false&k=SDID&lag=0.067&lc=en_IN&ma=samsung&mo=SM-E156B&n=Singular-TestApp-Debug&p=Android&pr=m15xnndins&pu=1&rt=json&s=1740905574084&sdk=Singular/v12.6.2&singular_install_id=2dc5dfc2-a2a8-484a-aad1-fed6cb7a3023&singular_link=https://singularassist2.sng.link/C4nw9/r1m0?_dl=singular://test&_smtype=3&src=com.android.shell&u=75f7b911-5a77-597d-8892-56f5e0e210ff&update_time=1740905507036&v=14&h=1e723fd90344d5d037059f110611ed1d84fbba88
Como alternativa, você pode usar o Console do SDK Singular para verificar o link de rastreamento da notificação por push no URL do Deeplink, conforme demonstrado abaixo.
Ao verificar isso, você pode confirmar que os compromissos de notificação por push são rastreados corretamente no Singular SDK.
Observações:
- Observe que, ao contrário do código do manipulador withSingularLink, o SDK Singular não fornece retornos de chamada de carga útil de push para esse recurso. É da responsabilidade do programador da aplicação ler os dados da notificação push e implementar a lógica de ligação profunda para redirecionar os utilizadores para páginas de produtos específicas dentro da aplicação. Nesta solução, a Singular recupera o payload da notificação push quando o utilizador toca na notificação e inclui este payload no evento de início de sessão do SDK acionado por Singular.init(). Esses dados são então processados no back-end do Singular para atribuir o ponto de toque/clique da notificação push e registrá-lo para rastreamento de reengajamento.
-
Temos um mecanismo de segurança em vigor que permite apenas domínios de link Singular do par de valores-chave personalizado passado na carga útil da notificação push. Especificamente, apenas os domínios sng.link predefinidos na página Singular Manage Links são permitidos.
Por exemplo:
https://prod_test.sng.link/B0s2a/51oi?_dl=singular%3A%2F%2Fmain
Se você pretende envolver links Singular em um domínio diferente (por exemplo, um domínio ESP para provedores de serviços de email), é necessário configurar explicitamente o domínio adicionando a seguinte opção na sua configuração: Isso garante que o domínio externo seja reconhecido e permitido dentro da estrutura Singular. Consulte o exemplo de configuração abaixo. config.withESPDomains(Arrays.asList("sl.esp.link")) ;
-
Se precisar de ativar diferentes deep links com base nas acções do utilizador a partir de uma única notificação push, pode utilizar um único link de seguimento Singular e modificar dinamicamente os redireccionamentos.
Exemplo:
Uma notificação push para notícias de última hora pode oferecer várias opções de deep link! Em vez de criar vários links de rastreamento, configure um link de rastreamento Singular e ajuste os redirecionamentos dinamicamente com base na seleção do usuário.
Ler as últimas notícias →
Tópicos em destaque →newsapp://article?id=12345
Desporto →newsapp://trending
newsapp://sports
Saiba mais sobre a substituição de redireccionamentos em ligações de seguimento Singular.
Sucesso!
Seguindo essas etapas, seu aplicativo agora está configurado para rastrear interações de notificação por push usando o Singular. Isso ajuda a melhorar os insights de desempenho da campanha e garante uma atribuição precisa de reengajamento.