0Pricing
Android Academy · Lezione

Inviare notifiche con Cloud Messaging

Invii e riceva notifiche FCM

Inviare notifiche con Cloud Messaging è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.

Che cos'è Cloud Messaging?

Firebase Cloud Messaging (FCM) invia notifiche push e messaggi di dati alla sua app, anche quando è chiusa.

Il flusso è semplice:

  • Ogni installazione dell'app riceve un token di registrazione univoco.
  • Il server (o la console Firebase) invia un messaggio a quel token o a un topic.
  • FCM lo inoltra al dispositivo, che lo mostra o lo gestisce.

Aggiungere la dipendenza per la messaggistica

FCM è incluso nella libreria firebase-messaging, la cui versione è gestita dal BoM configurato in precedenza.

Quando il BoM è presente, non è necessario specificare alcun numero di versione.

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

Il permesso per le notifiche

Su Android 13 (API 33) e versioni successive, per pubblicare notifiche è necessario il permesso a runtime POST_NOTIFICATIONS.

Lo dichiari nel manifest, quindi lo richieda a runtime: senza tale autorizzazione, le notifiche vengono ignorate senza alcun avviso.

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

Richiedere il permesso

Usi l'Activity Result API per richiedere POST_NOTIFICATIONS a runtime. Lo richieda solo su API 33 e successive; nelle versioni precedenti viene concesso implicitamente.

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

Il token di registrazione

Ogni installazione dispone di un token FCM univoco che la identifica come destinatario. Lo recuperi con Firebase.messaging.token.

Invii questo token al backend, così potrà inviare notifiche a quello specifico dispositivo. I token possono cambiare, quindi consideri sempre autorevole quello più recente.

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()
}

Il servizio di messaggistica

Per ricevere messaggi, estenda FirebaseMessagingService. Esegua l'override di onMessageReceived per gestire i payload in arrivo e di onNewToken per reagire alla rotazione del token.

Registri il servizio nel manifest con il filtro di intent 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) { /* ... */ }
}

Registrare il servizio

Dichiari il servizio nel manifest affinché Android possa consegnargli i messaggi. Il filtro di intent MESSAGING_EVENT è obbligatorio.

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

Messaggi di notifica e messaggi di dati

I messaggi FCM sono di due tipi:

  • Messaggi di notifica — FCM li mostra automaticamente nell'area di notifica quando l'app è in background; onMessageReceived viene attivato solo quando l'app è in primo piano.
  • Messaggi di dati — vengono sempre consegnati a onMessageReceived come mappa di coppie chiave/valore, lasciando a Lei il controllo della gestione.

Legga i campi personalizzati da 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?) {}

Creare un canale di notifica

A partire da Android 8, ogni notifica necessita di un canale. Lo crei una volta all'avvio; il sistema usa il canale per controllare suono, importanza e impostazioni dell'utente per quel canale.

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

Mostrare la notifica

Crei la notifica con NotificationCompat.Builder, associandola all'ID del canale, quindi la pubblichi con NotificationManagerCompat.

Ricordi che su API 33 e successive viene mostrata solo se l'utente ha concesso 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)
}

Sottoscrizioni ai topic

Invece di gestire singoli token, può inviare un messaggio a un topic. I client si iscrivono a un nome di topic e il server invia un unico messaggio a tutti gli iscritti.

È utile, ad esempio, per annunci relativi a news, sports o 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()
}

Verifica rapida

La sua app è in background e riceve da FCM un puro messaggio di notifica. Che cosa succede?

Riepilogo: Cloud Messaging

Ora può raggiungere gli utenti con notifiche push:

  • Aggiunga firebase-messaging e richieda POST_NOTIFICATIONS su API 33 e successive.
  • Ogni installazione dispone di un token FCM; lo carichi sul server.
  • Estenda FirebaseMessagingService ed esegua l'override di onMessageReceived / onNewToken.
  • Conosca la differenza tra messaggi di notifica e messaggi di dati.
  • Crei un canale di notifica, costruisca le notifiche con NotificationCompat oppure invii messaggi tramite i topic.

Ha completato il trio Firebase: Auth, Firestore e Messaging, un backend completo per la sua app Android.

Domande Frequenti

La lezione «Inviare notifiche con Cloud Messaging» è gratuita?

Sì — il testo completo di «Inviare notifiche con Cloud Messaging» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.

Cosa imparerò in «Inviare notifiche con Cloud Messaging»?

Invii e riceva notifiche FCM Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Android Academy?

Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Inviare notifiche con Cloud Messaging»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Android Academy?

Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Configurare Firebase
  2. Autenticazione Firebase
  3. Nozioni di base su Cloud Firestore
  4. Inviare notifiche con Cloud Messaging
← Torna a Android Academy