Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menyiapkan aplikasi klien Firebase Cloud Messaging di Android

Untuk menulis aplikasi klien Android Firebase Cloud Messaging, gunakan FirebaseMessaging API dan Android Studio 1.4 atau yang lebih baru dengan Gradle. Petunjuk di halaman ini mengasumsikan bahwa 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 men-deploy aplikasi Android melalui Google Play Store.

Menyiapkan SDK

Bagian ini membahas tugas-tugas yang mungkin telah diselesaikan jika Anda telah mengaktifkan fitur Firebase lainnya untuk aplikasi.

Sebelum memulai

  • Instal atau update Android Studio ke versi terbaru.

  • Pastikan project Anda memenuhi persyaratan berikut:

    • Menargetkan API level 16 (Jelly Bean) atau yang lebih baru
    • Menggunakan Gradle 4.1 atau yang lebih baru
    • Menggunakan Jetpack (AndroidX), termasuk memenuhi persyaratan versi berikut ini:
      • com.android.tools.build:gradle v3.2.1 atau yang lebih baru
      • compileSdkVersion 28 atau yang lebih baru
  • Siapkan perangkat fisik atau gunakan emulator untuk menjalankan aplikasi Anda.
    Perhatikan bahwa Firebase SDK yang bergantung pada layanan Google Play mengharuskan layanan Google Play diinstal di perangkat atau emulator.

  • Login ke Firebase menggunakan Akun Google Anda.

Jika Anda belum memiliki project Android dan hanya ingin mencoba produk Firebase, download salah satu contoh panduan memulai.

Membuat project Firebase

Agar dapat menambahkan Firebase ke aplikasi Android, Anda perlu membuat project Firebase yang akan dihubungkan ke aplikasi Android. Buka bagian Memahami Project Firebase untuk mempelajari project Firebase lebih lanjut.

Mendaftarkan aplikasi Anda dengan Firebase

Untuk menggunakan Firebase di aplikasi Android, Anda perlu mendaftarkan aplikasi ke project Firebase. Mendaftarkan aplikasi sering kali disebut "menambahkan" aplikasi ke project Anda.

  1. Buka Firebase console.

  2. Di bagian tengah halaman ringkasan project, klik ikon Android () atau Tambahkan aplikasi untuk meluncurkan alur kerja penyiapan.

  3. Masukkan nama paket aplikasi Anda di kolom Nama paket Android.

  4. (Opsional) Masukkan informasi aplikasi lain: Nama panggilan aplikasi dan Sertifikat penandatanganan debug SHA-1.

  5. Klik Daftarkan aplikasi.

Menambahkan file konfigurasi Firebase

  1. Tambahkan file konfigurasi Android Firebase ke aplikasi Anda:

    1. Klik Download google-services.json untuk mendapatkan file konfigurasi Android Firebase Anda (google-services.json).

    2. Pindahkan file konfigurasi ke direktori modul (level aplikasi) aplikasi Anda.

  2. Untuk mengaktifkan produk Firebase di aplikasi Anda, tambahkan plugin google-services ke file Gradle Anda.

    1. Di file Gradle (build.gradle) level root (level project), tambahkan aturan untuk menyertakan plugin Gradle Layanan Google. Pastikan Anda juga memiliki repositori Maven Google.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. Di file Gradle modul (level aplikasi) Anda (biasanya app/build.gradle), terapkan plugin Gradle Layanan Google:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Menambahkan Firebase SDK ke aplikasi Anda

  1. Dengan Firebase Android BoM, deklarasikan dependensi untuk library Android Firebase Cloud Messaging dalam file Gradle modul (level aplikasi) Anda (biasanya app/build.gradle).

    Untuk mendapatkan pengalaman yang optimal saat menggunakan Firebase Cloud Messaging, sebaiknya aktifkan Google Analytics di project Anda. Selain itu, sebagai bagian dari penyiapan Analytics, Anda perlu menambahkan Firebase SDK untuk Google Analytics ke aplikasi.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.4.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi Anda, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:21.0.1'
        implementation 'com.google.firebase:firebase-analytics:18.0.2'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.4.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi Anda, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:21.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:18.0.2'
    }
    

  2. Sinkronkan aplikasi Anda untuk memastikan bahwa semua dependensi memiliki versi yang diperlukan.

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 Anda sendiri, tetapkan default_notification_channel_id ke ID objek saluran notifikasi Anda seperti yang ditunjukkan. FCM akan menggunakan nilai ini setiap kali pesan 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 Anda ingin menargetkan satu perangkat atau membuat grup perangkat, Anda harus mengakses token ini dengan menggunakan ekstensi 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 diaktifkan kembali di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Mengambil token pendaftaran terbaru

Jika Anda perlu mengambil token saat ini, panggil FirebaseMessaging.getInstance().getToken():

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // 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+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // 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

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@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
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration 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
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Setelah memperoleh token, Anda bisa mengirimkannya ke server aplikasi dan menyimpannya menggunakan metode yang Anda pilih.

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() dan di metode onResume() dari aktivitas utama. 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

Saat token pendaftaran FCM dibuat, library mengupload data konfigurasi dan ID ke Firebase. Jika Anda lebih memilih untuk mencegah pembuatan token secara otomatis, nonaktifkan pengumpulan Analytics dan inisialisasi otomatis untuk FCM (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 init otomatis FCM, lakukan panggilan runtime:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Untuk mengaktifkan kembali pengumpulan data Analytics, panggil metode setAnalyticsCollectionEnabled() dari class FirebaseAnalytics. Contoh:

setAnalyticsCollectionEnabled(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 memulai, 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.