Integrasi Push Notification Firebase dengan Kotlin

 

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


Firebase Push Notification Kotlin

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