Pemberitahuan Tolak dengan Cloud Messaging
Hantar dan terima pemberitahuan FCM.
Pemberitahuan Tolak dengan Cloud Messaging ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah Cloud Messaging?
Firebase Cloud Messaging (FCM) menghantar pemberitahuan tolak dan mesej data kepada apl anda — walaupun apl itu ditutup.
Alirannya mudah:
- Setiap pemasangan apl mendapat token pendaftaran yang unik.
- Pelayan anda (atau konsol Firebase) menghantar mesej kepada token itu (atau kepada topik).
- FCM menghalakannya ke peranti, yang kemudiannya memaparkan atau mengendalikannya.
Tambahkan Kebergantungan Messaging
FCM disediakan dalam pustaka firebase-messaging, yang versinya ditentukan oleh BoM yang anda sediakan sebelum ini.
Nombor versi tidak diperlukan apabila BoM tersedia.
// app/build.gradle.kts
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-messaging")
}Kebenaran Pemberitahuan
Pada Android 13 (API 33) dan ke atas, penghantaran pemberitahuan memerlukan kebenaran masa jalan POST_NOTIFICATIONS.
Isytiharkannya dalam manifes, kemudian minta kebenaran itu pada masa jalan — tanpa pemberian kebenaran, pemberitahuan anda akan digugurkan secara senyap.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />Meminta Kebenaran
Gunakan API Activity Result untuk meminta POST_NOTIFICATIONS pada masa jalan. Minta kebenaran itu hanya pada API 33 ke atas; versi terdahulu memberikannya secara tersirat.
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)
}
}Token Pendaftaran
Setiap pemasangan mempunyai token FCM unik yang mengenal pastinya sebagai sasaran. Dapatkannya dengan Firebase.messaging.token.
Hantar token ini kepada bahagian belakang anda supaya ia boleh menghantar pemberitahuan tolak kepada peranti tertentu itu. Token boleh berubah, jadi sentiasa anggap token terbaharu sebagai token yang sah.
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()
}Perkhidmatan Messaging
Untuk menerima mesej, lanjutkan FirebaseMessagingService. Gantikan onMessageReceived untuk mengendalikan muatan masuk dan onNewToken untuk bertindak balas apabila token berubah.
Daftarkan perkhidmatan itu dalam manifes dengan penapis niat 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) { /* ... */ }
}Mendaftarkan Perkhidmatan
Isytiharkan perkhidmatan anda dalam manifes supaya Android boleh menghantar mesej kepadanya. Penapis niat MESSAGING_EVENT diperlukan.
<!-- AndroidManifest.xml inside <application> -->
<service
android:name=".MyFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>Mesej Pemberitahuan berbanding Mesej Data
Mesej FCM hadir dalam dua bentuk:
- Mesej pemberitahuan — FCM memaparkannya secara automatik dalam dulang apabila apl berada di latar belakang;
onMessageReceivedhanya dicetuskan apabila apl berada di latar depan. - Mesej data — sentiasa dihantar kepada
onMessageReceivedsebagai peta kunci/nilai supaya anda mengawal pengendaliannya.
Baca medan tersuai daripada 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?) {}Membina Saluran Pemberitahuan
Sejak Android 8, setiap pemberitahuan memerlukan saluran. Ciptakannya sekali semasa permulaan; sistem menggunakan saluran itu untuk mengawal bunyi, kepentingan dan tetapan pengguna bagi setiap saluran.
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)
}Memaparkan Pemberitahuan
Bina pemberitahuan dengan NotificationCompat.Builder yang dikaitkan dengan ID saluran anda, kemudian hantarkannya dengan NotificationManagerCompat.
Ingat: pada API 33 ke atas, pemberitahuan ini hanya muncul jika pengguna memberikan 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)
}Langganan Topik
Daripada menjejaki token secara individu, anda boleh menyiarkan kepada topik. Klien melanggan nama topik, kemudian pelayan anda menghantar satu mesej kepada semua pelanggan.
Sesuai untuk perkara seperti pengumuman news, sports atau 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()
}Semakan Pantas
Apl anda berada di latar belakang dan menerima mesej pemberitahuan tulen daripada FCM. Apakah yang berlaku?
Imbas Kembali: Cloud Messaging
- Tambahkan
firebase-messagingdan minta POST_NOTIFICATIONS pada API 33 ke atas. - Setiap pemasangan mempunyai token FCM; muat naik token itu ke pelayan anda.
- Lanjutkan
FirebaseMessagingServicedan gantikanonMessageReceived/onNewToken. - Ketahui perbezaan antara mesej pemberitahuan dan data.
- Cipta saluran pemberitahuan, bina dengan
NotificationCompatatau siarkan melalui topik.
Dengan ini, lengkaplah rangkaian Firebase: Auth, Firestore dan Messaging — bahagian belakang lengkap untuk apl Android anda.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “Pemberitahuan Tolak dengan Cloud Messaging” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Pemberitahuan Tolak dengan Cloud Messaging”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemberitahuan Tolak dengan Cloud Messaging”?
Hantar dan terima pemberitahuan FCM. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Pemberitahuan Tolak dengan Cloud Messaging” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menyediakan Firebase
- Pengesahan Firebase
- Asas Cloud Firestore
- Pemberitahuan Tolak dengan Cloud Messaging