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;
onMessageReceivedviene attivato solo quando l'app è in primo piano. - Messaggi di dati — vengono sempre consegnati a
onMessageReceivedcome 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-messaginge richieda POST_NOTIFICATIONS su API 33 e successive. - Ogni installazione dispone di un token FCM; lo carichi sul server.
- Estenda
FirebaseMessagingServiceed esegua l'override dionMessageReceived/onNewToken. - Conosca la differenza tra messaggi di notifica e messaggi di dati.
- Crei un canale di notifica, costruisca le notifiche con
NotificationCompatoppure 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
- Configurare Firebase
- Autenticazione Firebase
- Nozioni di base su Cloud Firestore
- Inviare notifiche con Cloud Messaging