0Pricing
Android Academy · Pelajaran

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; onMessageReceived hanya dipanggil saat aplikasi berada di latar depan.
  • Pesan data — selalu dikirimkan ke onMessageReceived sebagai 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-messaging dan minta POST_NOTIFICATIONS pada API 33 ke atas.
  • Setiap pemasangan memiliki token FCM; unggah token tersebut ke server Anda.
  • Perluas FirebaseMessagingService dan ganti implementasi onMessageReceived / 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

  1. Menyiapkan Firebase
  2. Autentikasi Firebase
  3. Dasar-Dasar Cloud Firestore
  4. Push dengan Cloud Messaging
← Kembali ke Android Academy