0Pricing
Android Academy · Leçon

Notifications avec Cloud Messaging

Envoyez et recevez des notifications FCM.

Notifications avec Cloud Messaging est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.

Qu'est-ce que Cloud Messaging ?

Firebase Cloud Messaging (FCM) envoie des notifications push et des messages de données à votre application — même lorsqu'elle est fermée.

Le fonctionnement est simple :

  • Chaque installation de l'application reçoit un jeton d'enregistrement unique.
  • Votre serveur (ou la console Firebase) envoie un message à ce jeton ou à un sujet.
  • FCM l'achemine vers l'appareil, qui l'affiche ou le traite.

Ajouter la dépendance de messagerie

FCM est fourni dans la bibliothèque firebase-messaging, dont la version est gérée par la BoM que vous avez configurée précédemment.

Aucun numéro de version n'est nécessaire lorsque la BoM est présente.

// app/build.gradle.kts
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-messaging")
}

L'autorisation d'envoyer des notifications

Sur Android 13 (API 33) et les versions ultérieures, l'envoi de notifications nécessite l'autorisation d'exécution POST_NOTIFICATIONS.

Déclarez-la dans le manifeste, puis demandez-la lors de l'exécution — sans cette autorisation, vos notifications sont ignorées silencieusement.

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Demander l'autorisation

Utilisez l'API Activity Result pour demander POST_NOTIFICATIONS lors de l'exécution. Faites cette demande uniquement sur l'API 33 et les versions ultérieures ; les anciennes versions l'accordent implicitement.

import android.Manifest
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts

val requestPermission = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { granted ->
    println(if (granted) "Notifications allowed" else "Notifications denied")
}

fun askNotificationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        requestPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}

Le jeton d'enregistrement

Chaque installation possède un jeton FCM unique qui l'identifie comme cible. Récupérez-le avec Firebase.messaging.token.

Envoyez ce jeton à votre serveur afin qu'il puisse envoyer des notifications à cet appareil précis. Les jetons peuvent changer : considérez donc toujours le plus récent comme la référence.

import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await

suspend fun currentToken(): String {
    return Firebase.messaging.token.await()
}

Le service de messagerie

Pour recevoir des messages, étendez FirebaseMessagingService. Redéfinissez onMessageReceived pour traiter les données entrantes et onNewToken pour réagir lorsque le jeton est renouvelé.

Enregistrez le service dans le manifeste avec le filtre d'intention FCM.

import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyFcmService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        // Upload the fresh token to your backend
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        val title = message.notification?.title ?: "New message"
        val body = message.notification?.body ?: ""
        showNotification(title, body)
    }

    private fun sendTokenToServer(token: String) { /* ... */ }
    private fun showNotification(title: String, body: String) { /* ... */ }
}

Enregistrer le service

Déclarez votre service dans le manifeste afin qu'Android puisse lui transmettre les messages. Le filtre d'intention MESSAGING_EVENT est obligatoire.

<!-- AndroidManifest.xml inside <application> -->
<service
    android:name=".MyFcmService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Messages de notification et messages de données

Les messages FCM se présentent sous deux formes :

  • Messages de notification — FCM les affiche automatiquement dans la barre de notifications lorsque l'application est en arrière-plan ; onMessageReceived n'est appelé que lorsque l'application est au premier plan.
  • Messages de données — ils sont toujours transmis à onMessageReceived sous forme de carte clé/valeur, ce qui vous permet de contrôler leur traitement.

Lisez les champs personnalisés depuis message.data.

import com.google.firebase.messaging.RemoteMessage

fun handle(message: RemoteMessage) {
    val type = message.data["type"]      // your custom field
    val itemId = message.data["itemId"]
    when (type) {
        "chat" -> openChat(itemId)
        "promo" -> openPromo(itemId)
    }
}
fun openChat(id: String?) {}
fun openPromo(id: String?) {}

Créer un canal de notification

Depuis Android 8, chaque notification doit être associée à un canal. Créez-le une fois au démarrage ; le système utilise ce canal pour contrôler le son, l'importance et les paramètres propres à l'utilisateur.

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context

fun createChannel(context: Context) {
    val channel = NotificationChannel(
        "messages",
        "Messages",
        NotificationManager.IMPORTANCE_HIGH
    )
    val manager = context.getSystemService(NotificationManager::class.java)
    manager.createNotificationChannel(channel)
}

Afficher la notification

Créez la notification avec NotificationCompat.Builder, en l'associant à l'identifiant de votre canal, puis publiez-la avec NotificationManagerCompat.

N'oubliez pas que sur l'API 33 et les versions ultérieures, elle ne s'affichera que si l'utilisateur a accordé POST_NOTIFICATIONS.

import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat

fun showNotification(context: Context, title: String, body: String) {
    val notification = NotificationCompat.Builder(context, "messages")
        .setSmallIcon(android.R.drawable.ic_dialog_info)
        .setContentTitle(title)
        .setContentText(body)
        .setAutoCancel(true)
        .build()

    NotificationManagerCompat.from(context).notify(1, notification)
}

Abonnements aux sujets

Au lieu de suivre les jetons individuellement, vous pouvez diffuser un message à un sujet. Les clients s'abonnent à un nom de sujet, puis votre serveur envoie un seul message à toutes les personnes abonnées.

C'est pratique pour des annonces telles que news, sports ou all-users.

import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await

suspend fun subscribeToNews() {
    Firebase.messaging.subscribeToTopic("news").await()
}

suspend fun unsubscribeFromNews() {
    Firebase.messaging.unsubscribeFromTopic("news").await()
}

Vérification rapide

Votre application est en arrière-plan et reçoit un message de notification pur de FCM. Que se passe-t-il ?

Récapitulatif : Cloud Messaging

Vous savez maintenant atteindre les utilisateurs avec des notifications push :

  • Ajoutez firebase-messaging et demandez POST_NOTIFICATIONS sur l'API 33 et les versions ultérieures.
  • Chaque installation possède un jeton FCM ; envoyez-le à votre serveur.
  • Étendez FirebaseMessagingService et redéfinissez onMessageReceived / onNewToken.
  • Connaissez la différence entre les messages de notification et les messages de données.
  • Créez un canal de notification, construisez les notifications avec NotificationCompat ou diffusez-les via des sujets.

Vous avez terminé le trio Firebase : Auth, Firestore et Messaging — un backend complet pour votre application Android.

Questions Fréquemment Posées

La leçon « Notifications avec Cloud Messaging » est-elle gratuite ?

Oui — le texte complet de « Notifications avec Cloud Messaging » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Notifications avec Cloud Messaging » ?

Envoyez et recevez des notifications FCM. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Android Academy ?

Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Notifications avec Cloud Messaging » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?

Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configurer Firebase
  2. Authentification Firebase
  3. Principes de Cloud Firestore
  4. Notifications avec Cloud Messaging
← Retour à Android Academy