🚀 5.5 Notificações Premium e PendingIntents

A barra de status é o centro de comunicações do Android. Para que seu aplicativo envie alertas de forma profissional e segura, é necessário seguir os padrões modernos de Canais de Notificação e PendingIntents.

O Papel da PendingIntent

Uma PendingIntent é um token que você entrega ao sistema Android. Ele permite que o sistema execute uma ação (como abrir uma Activity) em nome do seu aplicativo, mesmo que seu app não esteja rodando no momento.

CAUTION

Imutabilidade (Android 12+): A partir do Android 12, você deve especificar se uma PendingIntent é mutável ou imutável usando as flags FLAG_IMMUTABLE ou FLAG_MUTABLE. A recomendação de segurança é sempre usar IMMUTABLE a menos que haja uma necessidade específica de alteração.

Implementando a Notificação (Java 17)

private void enviarNotificacao(String usuario, String texto, int id) {
    var intent = new Intent(this, TweetActivity.class);
    intent.putExtra("usuario", usuario);
    intent.putExtra("texto", texto);
 
    // PendingIntent com flag de imutabilidade obrigatória
    var pendingIntent = PendingIntent.getActivity(
            this, 
            id, 
            intent, 
        PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
);

var builder = new NotificationCompat.Builder(this, "MENCOES_CHANNEL")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("Nova menção de " + usuario)
        .setContentText(texto)
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent) // Ação ao clicar
        .setAutoCancel(true); // Remove a notificação ao clicar

NotificationManagerCompat.from(this).notify(id, builder.build());

}

## Configurando o Canal (Mandatório API 26+)
 

Sem um canal, sua notificação não será exibida em versões modernas do Android:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    var nome = "Alertas de Menção";
    var importancia = NotificationManager.IMPORTANCE_DEFAULT;
    var canal = new NotificationChannel("MENCOES_CHANNEL", nome, importancia);
    
    var manager = getSystemService(NotificationManager.class);
    manager.createNotificationChannel(canal);
}

IMPORTANT

Permissão de Notificações (Android 13+): No Android 13 (API 33), o usuário deve conceder a permissão POST_NOTIFICATIONS. Certifique-se de solicitá-la em tempo de execução, seguindo o padrão que aprendemos no módulo de Content Providers.

TIP

Utilize o Notification History nas configurações do Android para debugar notificações que foram disparadas mas não apareceram na tela (geralmente por falta de canal ou prioridade incorreta).


⬅️ Capítulo Anterior | Próximo Capítulo ➡️