Panduan Lengkap Integrasi Firebase Cloud Messaging di Android

Artikel ini membahas konsep dasar FCM, cara setup di Firebase Console, konfigurasi Gradle, serta implementasi kode Java untuk menerima dan menampilkan notifikasi push di aplikasi Android.


Apa Itu FCM (Firebase Cloud Messaging)?

Firebase Cloud Messaging (FCM) adalah layanan notifikasi gratis dari Google yang memungkinkan pengembang Android mengirimkan pesan push ke perangkat pengguna. Dengan FCM, Anda bisa mengirim:

  • Pesan notifikasi (ditampilkan langsung di tray notifikasi),
  • Pesan data (diproses di background oleh aplikasi),
  • Atau kombinasi keduanya.

Contohnya:

  • Memberitahu pengguna bahwa ada pesan baru,
  • Mengirim pembaruan status order,
  • Mengirimkan promosi atau pengumuman penting.

Persiapan Proyek di Firebase Console

  1. Masuk ke Firebase Console.
  2. Klik Add project, lalu buat proyek baru.
  3. Tambahkan aplikasi Android dengan menekan Add App → Android.
  4. Masukkan Application ID (sesuai di app/build.gradle).
  5. Unduh file google-services.json dan simpan di folder: app/ └── google-services.json
  6. Ikuti instruksi Firebase untuk menyelesaikan setup awal.

Konfigurasi Gradle (Groovy)

Tambahkan dependency Firebase Cloud Messaging di build.gradle berikut ini:

project-level build.gradle

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.gms:google-services:4.4.2'
    }
}

app-level build.gradle

plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}

android {
    namespace "com.example.fcmapp"
    compileSdkVersion 34

    defaultConfig {
        applicationId "com.example.fcmapp"
        minSdkVersion 24
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    implementation 'com.google.firebase:firebase-messaging:24.0.0'
}

💡 Tips: Selalu gunakan versi terbaru dari plugin google-services dan firebase-messaging untuk memastikan kompatibilitas SDK terbaru.


Mendapatkan Token FCM di Android (Java)

Setiap perangkat akan mendapatkan token unik untuk menerima pesan.
Tambahkan kode berikut di MainActivity.java:

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessaging;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "FCMApp";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // Mendapatkan token FCM
        FirebaseMessaging.getInstance().getToken()
            .addOnCompleteListener(task -> {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "Gagal mendapatkan token FCM", task.getException());
                    return;
                }

                // Token FCM perangkat
                String token = task.getResult();
                Log.d(TAG, "Token FCM: " + token);
            });
    }
}

Token ini bisa Anda kirim ke server untuk menyimpan dan mengirimkan pesan ke perangkat tertentu.


📩 Menerima Pesan FCM di Background dan Foreground

Buat class yang extends FirebaseMessagingService untuk menangani pesan masuk.

MyFirebaseMessagingService.java

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFCMService";
    private static final String CHANNEL_ID = "fcm_channel";

    @Override
    public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
        Log.d(TAG, "Pesan diterima: " + remoteMessage.getData());

        String title = remoteMessage.getNotification() != null ?
                remoteMessage.getNotification().getTitle() : "Notifikasi Baru";

        String body = remoteMessage.getNotification() != null ?
                remoteMessage.getNotification().getBody() : "Pesan kosong";

        showNotification(title, body);
    }

    private void showNotification(String title, String message) {
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        // Buat channel untuk Android 8.0+
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    CHANNEL_ID, "FCM Channel", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }

        // Intent untuk membuka aplikasi saat notifikasi diklik
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(
                this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(android.R.drawable.ic_dialog_info)
                .setContentTitle(title)
                .setContentText(message)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true);

        manager.notify(1, builder.build());
    }
}

Jenis Pesan FCM: Notification vs Data

Jenis PesanDeskripsiContoh JSON
Notification MessageDitampilkan otomatis di tray (bahkan jika app ditutup).json { "to": "<FCM_TOKEN>", "notification": { "title": "Halo!", "body": "Ada pesan baru!" } }
Data MessageDikirim ke onMessageReceived(), cocok untuk logika kustom.json { "to": "<FCM_TOKEN>", "data": { "type": "chat", "message": "Hai dari server!" } }

Mengirim Notifikasi Menggunakan Postman atau Curl

Gunakan Server Key dari Firebase Console > Project Settings > Cloud Messaging, lalu kirim request:

curl -X POST https://fcm.googleapis.com/fcm/send \
-H "Authorization: key=SERVER_KEY_KAMU" \
-H "Content-Type: application/json" \
-d '{
  "to": "TOKEN_FCM_PERANGKAT",
  "notification": {
    "title": "Pesan dari Server",
    "body": "Ini contoh notifikasi!"
  }
}'

Kesimpulan

Dengan integrasi FCM di Android, Anda dapat:

  • Mengirim notifikasi real-time ke pengguna,
  • Mengelola pesan berbasis data untuk logika aplikasi,
  • Mengoptimalkan interaksi pengguna tanpa biaya tambahan.