Push dengan Cloud Messaging
Kirim dan terima notifikasi FCM.
Push dengan Cloud Messaging adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.
Apa Itu Cloud Messaging?
Firebase Cloud Messaging (FCM) mengirimkan notifikasi push dan pesan data ke aplikasi Anda — bahkan saat aplikasi ditutup.
Alurnya sederhana:
- Setiap pemasangan aplikasi mendapatkan token pendaftaran unik.
- Server Anda (atau konsol Firebase) mengirim pesan ke token tersebut (atau ke sebuah topik).
- FCM merutekannya ke perangkat, yang kemudian menampilkan atau menanganinya.
Menambahkan Dependensi Messaging
FCM tersedia dalam pustaka firebase-messaging, dengan versinya ditentukan oleh BoM yang Anda siapkan sebelumnya.
Nomor versi tidak diperlukan jika BoM tersedia.
// app/build.gradle.kts
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-messaging")
}Izin Notifikasi
Pada Android 13 (API 33) dan versi lebih baru, pengiriman notifikasi memerlukan izin saat runtime POST_NOTIFICATIONS.
Deklarasikan izin tersebut di manifes, lalu minta saat runtime — tanpa pemberian izin, notifikasi Anda akan dibuang secara diam-diam.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />Meminta Izin
Gunakan Activity Result API untuk meminta POST_NOTIFICATIONS saat runtime. Minta izin ini hanya pada API 33 ke atas; versi yang lebih lama memberikannya secara implisit.
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 memiliki token FCM unik yang mengidentifikasinya sebagai target. Ambil token tersebut dengan Firebase.messaging.token.
Kirim token ini ke backend Anda agar dapat mengirim pesan ke perangkat tertentu tersebut. Token dapat berubah, jadi selalu anggap token terbaru sebagai token yang berlaku.
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()
}Layanan Messaging
Untuk menerima pesan, perluas FirebaseMessagingService. Ganti implementasi onMessageReceived untuk menangani muatan yang masuk dan onNewToken untuk merespons saat token berubah.
Daftarkan layanan tersebut di manifes dengan penyaring 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) { /* ... */ }
}Mendaftarkan Layanan
Deklarasikan layanan Anda di manifes agar Android dapat mengirimkan pesan kepadanya. Penyaring intent MESSAGING_EVENT wajib digunakan.
<!-- AndroidManifest.xml inside <application> -->
<service
android:name=".MyFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>Pesan Notifikasi vs Pesan Data
Pesan FCM memiliki dua jenis:
- Pesan notifikasi — FCM otomatis menampilkannya di bilah notifikasi saat aplikasi berada di latar belakang;
onMessageReceivedhanya dipanggil saat aplikasi berada di latar depan. - Pesan data — selalu dikirimkan ke
onMessageReceivedsebagai peta kunci/nilai sehingga Anda dapat mengatur penanganannya.
Baca kolom khusus dari 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?) {}Membuat Saluran Notifikasi
Sejak Android 8, setiap notifikasi memerlukan saluran. Buat saluran tersebut sekali saat aplikasi dimulai; sistem menggunakannya untuk mengatur suara, tingkat kepentingan, dan pengaturan pengguna per 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)
}Menampilkan Notifikasi
Buat notifikasi dengan NotificationCompat.Builder yang dikaitkan dengan ID saluran Anda, lalu kirimkan dengan NotificationManagerCompat.
Ingat: pada API 33 ke atas, notifikasi 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)
}Berlangganan Topik
Daripada melacak token satu per satu, Anda dapat menyiarkan pesan ke sebuah topik. Klien berlangganan nama topik, lalu server Anda mengirim satu pesan kepada semua pelanggan.
Cocok untuk hal-hal 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()
}Pemeriksaan Singkat
Aplikasi Anda berada di latar belakang dan menerima pesan notifikasi murni dari FCM. Apa yang terjadi?
Ringkasan: Cloud Messaging
Sekarang Anda dapat menjangkau pengguna dengan notifikasi push:
- Tambahkan
firebase-messagingdan minta POST_NOTIFICATIONS pada API 33 ke atas. - Setiap pemasangan memiliki token FCM; unggah token tersebut ke server Anda.
- Perluas
FirebaseMessagingServicedan ganti implementasionMessageReceived/onNewToken. - Pahami perbedaan antara pesan notifikasi dan data.
- Buat saluran notifikasi, buat notifikasi dengan
NotificationCompat, atau siarkan melalui topik.
Dengan demikian, tiga komponen Firebase telah selesai: Autentikasi, Firestore, dan Messaging — backend lengkap untuk aplikasi Android Anda.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Push dengan Cloud Messaging” gratis?
Ya — teks lengkap “Push dengan Cloud Messaging” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Push dengan Cloud Messaging”?
Kirim dan terima notifikasi FCM. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Push dengan Cloud Messaging” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyiapkan Firebase
- Autentikasi Firebase
- Dasar-Dasar Cloud Firestore
- Push dengan Cloud Messaging