Buka konsol

Menyiapkan aplikasi klien Firebase Cloud Messaging di Android

Untuk menulis aplikasi klien Firebase Cloud Messaging di Android, gunakan FirebaseMessaging API dan Android Studio 1.4 atau yang lebih baru dengan Gradle. Petunjuk di halaman ini mengasumsikan Anda telah menyelesaikan langkah-langkah menambahkan Firebase ke project Android.

Klien FCM memerlukan perangkat yang menjalankan Android 4.1 atau versi lebih tinggi yang sudah dilengkapi Google Play Store, atau emulator yang menjalankan Android 4.1 dengan Google API. Perlu diperhatikan bahwa Anda tidak dibatasi pada menerapkan aplikasi Android melalui Google Play Store.

Menyiapkan Firebase dan FCM SDK

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.
  2. Pada file build.gradle tingkat project, pastikan untuk menyertakan repositori Maven Google di bagian buildscript dan allprojects Anda.
  3. Tambahkan dependensi untuk library Android Cloud Messaging ke file Gradle modul (level aplikasi) Anda (biasanya app/build.gradle):
    implementation 'com.google.firebase:firebase-messaging:20.0.0'

Mengedit manifes aplikasi

Tambahkan hal berikut ini ke manifes aplikasi Anda:

  • Layanan yang memperluas FirebaseMessagingService. Ini diperlukan jika Anda ingin melakukan setiap penanganan pesan, tidak hanya menerima notifikasi pada aplikasi di latar belakang. Untuk menerima notifikasi di aplikasi latar depan, menerima payload data, mengirim pesan upstream, dan lain-lain, Anda harus memperluas layanan ini.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Opsional) Dalam komponen aplikasi, elemen metadata untuk menetapkan ikon dan warna default notifikasi. Android menggunakan nilai ini setiap kali ada pesan masuk yang tidak secara eksplisit menetapkan ikon atau warna.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Opsional) Dari Android 8.0 (API level 26) dan yang lebih tinggi, saluran notifikasi didukung dan direkomendasikan. FCM menyediakan saluran notifikasi default dengan setelan dasar. Jika Anda ingin membuat dan menggunakan saluran default sendiri, tetapkan default_notification_channel_id ke ID objek saluran notifikasi seperti yang ditunjukkan. FCM akan menggunakan nilai ini setiap kali pesan yang masuk tidak menetapkan saluran notifikasi secara eksplisit. Untuk mempelajari lebih lanjut, lihat Mengelola saluran notifikasi.
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Mengakses token pendaftaran perangkat

Saat aplikasi dijalankan untuk pertama kalinya, FCM SDK akan menghasilkan token pendaftaran untuk instance aplikasi klien. Jika ingin menargetkan satu perangkat atau membuat grup perangkat, Anda harus mengakses token ini dengan memberikan FirebaseMessagingService dan mengganti onNewToken.

Bagian ini menjelaskan cara mengambil token dan memantau perubahan token. Karena token bisa dirotasikan setelah startup awal, Anda sangat dianjurkan untuk mengambil token pendaftaran terbaru.

Token pendaftaran dapat berubah jika:

  • Aplikasi menghapus ID Instance
  • Aplikasi diaktifkan kembali di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Mengambil token pendaftaran saat ini

Jika Anda perlu mengambil token saat ini, panggil FirebaseInstanceId.getInstance().getInstanceId():

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Memantau pembuatan token

Callback onNewToken diaktifkan setiap kali token baru dibuat.

Java

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Kotlin

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token)
}

Setelah memperoleh token, Anda bisa mengirimkannya ke server aplikasi dan menyimpannya menggunakan metode yang Anda pilih. Lihat referensi API ID Instance untuk detail lengkap mengenai API.

Memeriksa layanan Google Play

Aplikasi yang mengandalkan SDK Layanan Play harus selalu memeriksa perangkat untuk memastikan adanya APK layanan Google Play yang kompatibel sebelum mengakses fitur layanan Google Play. Sebaiknya lakukan hal ini di dua tempat: di metode onCreate() aktivitas utama, dan di metode onResume(). Pemeriksaan di onCreate() memastikan bahwa aplikasi tidak dapat digunakan tanpa pemeriksaan yang berhasil. Pemeriksaan di onResume() memastikan bahwa jika pengguna kembali ke aplikasi yang sedang berjalan melalui cara lain, misalnya dengan tombol kembali, maka pemeriksaan tetap dilakukan.

Jika perangkat tidak memiliki versi layanan Google Play yang kompatibel, aplikasi Anda dapat memanggil GoogleApiAvailability.makeGooglePlayServicesAvailable() agar pengguna dapat mendownload layanan Google Play dari Play Store.

Mencegah inisialisasi otomatis

Firebase menghasilkan ID Instance, yang digunakan FCM untuk membuat token pendaftaran dan digunakan Analytics untuk pengumpulan data. Ketika ID Instance dibuat, library akan mengupload ID tersebut dan data konfigurasi ke Firebase. Jika Anda lebih memilih untuk mencegah pembuatan ID Instance secara otomatis, nonaktifkan inisialisasi otomatis untuk FCM dan Analytics (Anda harus menonaktifkan keduanya) dengan menambahkan nilai metadata ini ke AndroidManifest.xml Anda:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Untuk mengaktifkan kembali FCM, lakukan panggilan runtime:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin

FirebaseMessaging.getInstance().isAutoInitEnabled = true
Nilai ini akan tetap ada setiap kali aplikasi dimulai ulang.

Langkah berikutnya

Setelah aplikasi klien disiapkan, Anda siap untuk mulai mengirim pesan downstream dengan Notifications Composer. Fungsi ini ditunjukkan dalam contoh panduan mulai cepat, yang dapat Anda download, jalankan, dan tinjau.

Untuk menambahkan perilaku lain yang lebih canggih ke aplikasi, Anda bisa menyatakan filter intent dan mengimplementasikan aktivitas untuk merespons pesan masuk. Untuk mengetahui lebih lanjut, lihat panduan mengirim pesan dari server aplikasi:

Perlu diingat bahwa untuk memanfaatkan fitur ini, Anda memerlukan implementasi server dan protokol server (HTTP atau XMPP), atau implementasi Admin SDK.