Meta Description:
Panduan lengkap integrasi Firebase Cloud Messaging atau FCM dengan Kotlin Android untuk membuat push notification, mendapatkan device token, request permission Android 13+, dan kirim notifikasi dari Firebase Console.
Apa Itu Firebase Cloud Messaging?
Firebase Cloud Messaging atau FCM adalah layanan dari Firebase untuk mengirim pesan dan push notification ke aplikasi Android, iOS, Web, Flutter, Unity, dan platform lain. FCM bisa digunakan untuk notifikasi login, reminder, approval, transaksi, chat, dan update sistem.
Fitur yang Akan Dibuat
Pada tutorial ini kita akan membuat:
✅ Integrasi Firebase ke project Kotlin Android
✅ Menambahkan Firebase Cloud Messaging
✅ Mendapatkan FCM device token
✅ Membuat FirebaseMessagingService
✅ Menampilkan notification saat pesan masuk
✅ Request permission Android 13+
✅ Test kirim push notification dari Firebase Console
Prompt AI image:
Firebase push notification integration with Kotlin Android app, smartphone receiving notification, modern developer workspace, Android Studio, ultra HD 4K
1. Buat Project Firebase
Masuk ke Firebase Console:
https://console.firebase.google.com
Lalu pilih:
Add project
Isi nama project:
Kotlin Push Notification App
Setelah project dibuat, tambahkan aplikasi Android.
Isi package name sesuai project Android kamu, contoh:
com.example.pushnotifapp
Download file:
google-services.json
Letakkan file tersebut di folder:
app/google-services.json
2. Tambahkan Plugin Firebase di Gradle
File:
settings.gradle.kts
Pastikan repository ada:
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
File root:
build.gradle.kts
Tambahkan:
plugins {
id("com.google.gms.google-services") version "4.4.2" apply false
}
File module app:
app/build.gradle.kts
Tambahkan plugin:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.gms.google-services")
}
Tambahkan dependency:
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
implementation("com.google.firebase:firebase-messaging")
}
Firebase merekomendasikan setup FCM Android melalui SDK dan konfigurasi Firebase di aplikasi Android.
3. Tambahkan Permission di AndroidManifest
File:
app/src/main/AndroidManifest.xml
Tambahkan permission:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Untuk Android 13 atau API 33 ke atas, aplikasi harus meminta runtime permission POST_NOTIFICATIONS agar notifikasi bisa tampil.
4. Buat Firebase Messaging Service
Buat file:
MyFirebaseMessagingService.kt
Isi kode:
package com.example.pushnotifapp
import android.app.NotificationChannel
import android.app.NotificationManager
import android.os.Build
import androidx.core.app.NotificationCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
println("FCM Token: $token")
// Kirim token ini ke backend jika aplikasi kamu punya server
// Contoh:
// apiService.saveFcmToken(token)
}
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
val title = message.notification?.title ?: "Notifikasi Baru"
val body = message.notification?.body ?: "Ada pesan masuk"
showNotification(title, body)
}
private fun showNotification(
title: String,
message: String
) {
val channelId = "default_channel"
val notificationManager =
getSystemService(NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
channelId,
"Default Notification",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
}
val notification = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.build()
notificationManager.notify(
System.currentTimeMillis().toInt(),
notification
)
}
}
Untuk menerima pesan FCM, Android menggunakan service yang extends FirebaseMessagingService, lalu override onMessageReceived dan onNewToken.
5. Daftarkan Service di Manifest
Masih di:
AndroidManifest.xml
Tambahkan di dalam tag <application>:
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Contoh lengkap:
<application
android:allowBackup="true"
android:theme="@style/Theme.PushNotifApp">
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
6. Request Permission Android 13+
Di MainActivity.kt:
package com.example.pushnotifapp
import android.Manifest
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.result.contract.ActivityResultContracts
class MainActivity : ComponentActivity() {
private val requestPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
println("Notification permission granted")
} else {
println("Notification permission denied")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestNotificationPermission()
}
private fun requestNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermissionLauncher.launch(
Manifest.permission.POST_NOTIFICATIONS
)
}
}
}
Android 13 memperkenalkan runtime permission khusus untuk notifikasi, sehingga permission harus dideklarasikan dan diminta saat runtime.
7. Ambil FCM Token Manual
Tambahkan di MainActivity.kt:
import com.google.firebase.messaging.FirebaseMessaging
Lalu panggil:
FirebaseMessaging.getInstance().token
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
println("Fetching FCM token failed")
return@addOnCompleteListener
}
val token = task.result
println("FCM Token: $token")
}
Token ini adalah identitas device untuk menerima push notification.
Simpan token ke backend jika aplikasi kamu punya sistem login:
user_id
device_token
platform
created_at
updated_at
8. Kirim Notifikasi dari Firebase Console
Buka Firebase Console:
Engage
→ Messaging
→ Create your first campaign
→ Firebase Notification messages
Isi:
Notification title: Reminder Approval
Notification text: Ada asset yang perlu kamu approve
Pilih target:
Android App
Lalu klik:
Review
Publish
9. Kirim Notifikasi ke Token Tertentu dari Backend
Untuk aplikasi production, biasanya backend yang mengirim notifikasi ke FCM.
Contoh payload:
{
"message": {
"token": "FCM_DEVICE_TOKEN",
"notification": {
"title": "Approval Baru",
"body": "Ada pengajuan asset yang perlu disetujui"
},
"data": {
"type": "APPROVAL",
"asset_id": "123"
}
}
}
FCM mendukung pesan notification dan data payload untuk kebutuhan sinkronisasi, notifikasi, dan fitur seperti chat. Payload pesan bisa membawa data sampai 4096 bytes untuk use case tertentu.
10. Subscribe Topic
Kalau ingin kirim notifikasi ke banyak user berdasarkan role, gunakan topic.
Contoh:
FirebaseMessaging.getInstance()
.subscribeToTopic("admin")
.addOnCompleteListener { task ->
if (task.isSuccessful) {
println("Subscribe topic admin berhasil")
}
}
Contoh topic:
admin
manager
approval
asset-tracker
finance
FCM topic messaging digunakan untuk mengirim pesan ke banyak device yang sudah subscribe ke topic tertentu.
11. Contoh Use Case Enterprise
Push notification Firebase cocok untuk:
✅ Approval asset
✅ Reminder pembayaran
✅ Reminder tenor
✅ Notifikasi login
✅ Notifikasi task project
✅ Chat internal
✅ Update status pengajuan
✅ Alert transaksi
Contoh untuk aplikasi Asset Tracker:
User mengajukan asset
↓
Backend menyimpan data
↓
Backend kirim push notification ke manager
↓
Manager menerima notifikasi
↓
Manager approve/reject
12. Struktur Project Final
app/
├── google-services.json
├── build.gradle.kts
└── src/main/
├── AndroidManifest.xml
└── java/com/example/pushnotifapp/
├── MainActivity.kt
└── MyFirebaseMessagingService.kt
13. Error yang Sering Terjadi
Notifikasi Tidak Muncul
Cek:
✅ Permission POST_NOTIFICATIONS sudah diizinkan
✅ Notification channel sudah dibuat
✅ Icon notification tersedia
✅ google-services.json benar
✅ Device punya internet
✅ Firebase project sesuai package name
Token Tidak Keluar
Cek:
✅ Firebase dependency sudah benar
✅ Plugin google-services aktif
✅ Internet permission ada
✅ Gradle sync berhasil
Notifikasi Masuk Saat Background Tapi Tidak Saat Foreground
Saat aplikasi foreground, notifikasi harus ditampilkan manual lewat onMessageReceived.
14. Best Practice Production
Gunakan best practice berikut:
✅ Simpan FCM token ke backend
✅ Update token saat onNewToken terpanggil
✅ Hapus token saat logout
✅ Gunakan topic berdasarkan role
✅ Gunakan data payload untuk navigasi screen
✅ Jangan simpan server key di aplikasi Android
✅ Kirim notifikasi dari backend, bukan dari app client
Firebase juga menyediakan panduan pengelolaan registration token agar pengiriman pesan tetap efisien dan tidak banyak mengirim ke token yang sudah tidak aktif.
Kesimpulan
Integrasi Firebase Push Notification dengan Kotlin Android sangat penting untuk aplikasi modern. Dengan FCM, aplikasi bisa mengirim notifikasi realtime untuk reminder, approval, transaksi, chat, dan update sistem.
Ringkasan langkah:
1. Buat project Firebase
2. Tambahkan google-services.json
3. Tambahkan dependency Firebase Messaging
4. Buat FirebaseMessagingService
5. Request permission Android 13+
6. Ambil FCM token
7. Kirim notifikasi dari Firebase Console atau backend
0 komentar:
Posting Komentar