Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Siapkan aplikasi klien Firebase Cloud Messaging dengan C++

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Untuk menulis aplikasi klien Firebase Cloud Messaging lintas platform dengan C++, gunakan Firebase Cloud Messaging API. C++ SDK berfungsi untuk platform Android dan Apple, dengan beberapa penyiapan tambahan yang diperlukan untuk setiap platform.

Siapkan Firebase dan FCM SDK

Android

  1. Jika Anda belum melakukannya, tambahkan Firebase ke proyek C++ Anda .

    • Dalam petunjuk penyiapan tertaut, tinjau persyaratan perangkat dan aplikasi untuk menggunakan Firebase C++ SDK, termasuk rekomendasi untuk menggunakan CMake untuk membangun aplikasi Anda.

    • Di file build.gradle tingkat proyek Anda, pastikan untuk menyertakan repositori Maven Google di bagian skrip buildscript dan allprojects Anda.

  2. Buat objek Aplikasi Firebase, dengan meneruskan lingkungan dan Aktivitas JNI:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. Tentukan kelas yang mengimplementasikan firebase::messaging::Listener .

  4. Inisialisasi FCM, meneruskan Aplikasi dan Listener yang dibangun:

    ::firebase::messaging::Initialize(app, listener);

  5. Aplikasi yang mengandalkan SDK layanan Google Play harus memeriksa perangkat untuk APK layanan Google Play yang kompatibel sebelum mengakses fitur. Untuk mempelajari lebih lanjut, lihat Periksa APK layanan Google Play .

iOS+

  1. Anda memerlukan sertifikat APN yang valid. Jika Anda belum memilikinya, pastikan untuk membuatnya di Pusat Anggota Pengembang Apple .
  2. Jika Anda belum melakukannya, tambahkan Firebase ke proyek C++ Anda . Kemudian, untuk menyiapkan proyek Anda untuk FCM:
    1. Di Podfile proyek Anda, tambahkan ketergantungan FCM:
      pod 'FirebaseMessaging'
    2. Seret kerangka kerja firebase.framework dan firebase_messaging.framework ke dalam proyek Xcode Anda dari Firebase C++ SDK .
  3. Konfigurasikan proyek Xcode Anda untuk mengaktifkan Pemberitahuan Push:

    1. Pilih proyek dari area Navigator .
    2. Pilih target proyek dari area Editor .
    3. Pilih tab Umum dari area Editor .

      1. Gulir ke bawah ke Linked Frameworks and Libraries , lalu klik tombol + untuk menambahkan kerangka kerja.
      2. Di jendela yang muncul, gulir ke UserNotifications.framework , klik entri itu, lalu klik Tambah .

        Kerangka kerja ini hanya muncul di Xcode v8 dan yang lebih baru dan diperlukan oleh perpustakaan ini.

    4. Pilih tab Kemampuan dari area Editor .

      1. Alihkan Pemberitahuan Push ke Aktif .
      2. Gulir ke bawah ke Mode Latar Belakang , lalu alihkan ke Aktif .
      3. Pilih Notifikasi jarak jauh di bawah Mode Latar Belakang .
  4. Buat objek Aplikasi Firebase:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. Tentukan kelas yang mengimplementasikan firebase::messaging::Listener .

  6. Inisialisasi Firebase Cloud Messaging, meneruskan Aplikasi dan Listener yang dibuat:

    ::firebase::messaging::Initialize(app, listener);

Akses token pendaftaran perangkat

Setelah menginisialisasi library Firebase Cloud Messaging, token pendaftaran diminta untuk instance aplikasi klien. Aplikasi akan menerima token dengan callback OnTokenReceived , yang harus didefinisikan di kelas yang mengimplementasikan firebase::messaging::Listener .

Jika Anda ingin menargetkan perangkat tertentu, Anda memerlukan akses ke token ini.

Catatan tentang pengiriman pesan di Android

Saat aplikasi tidak berjalan sama sekali dan pengguna mengetuk notifikasi, pesan tersebut, secara default, tidak dirutekan melalui callback bawaan FCM. Dalam hal ini, muatan pesan diterima melalui Intent yang digunakan untuk memulai aplikasi. Agar FCM meneruskan pesan masuk ini ke callback library C++, Anda perlu mengganti metode onNewIntent di Activity Anda dan meneruskan Intent ke MessageForwardingService .

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    message.setData(intent.getData());
    // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`.
    // startService(message);
    MessageForwardingService.enqueueWork(this, message);
  }
}

Pesan yang diterima saat aplikasi berada di latar belakang memiliki konten bidang notifikasi yang digunakan untuk mengisi notifikasi baki sistem, tetapi konten notifikasi tersebut tidak akan dikomunikasikan ke FCM. Artinya, Message::notification akan menjadi null.

Kesimpulan:

Status aplikasi Pemberitahuan Data Keduanya
Latar depan OnMessageReceived OnMessageReceived OnMessageReceived
Latar belakang Baki sistem OnMessageReceived Pemberitahuan: baki sistem
Data: di ekstra maksud.

Penanganan Pesan Khusus di Android

Secara default, notifikasi yang dikirim ke aplikasi diteruskan ke ::firebase::messaging::Listener::OnMessageReceived , tetapi dalam beberapa kasus Anda mungkin ingin mengganti perilaku default. Untuk melakukan ini di Android, Anda perlu menulis kelas khusus yang memperluas com.google.firebase.messaging.cpp.ListenerService serta memperbarui AndroidManifest.xml proyek Anda.

Ganti Metode ListenerService .

ListenerService adalah kelas Java yang mencegat pesan masuk yang dikirim ke aplikasi dan merutekannya ke pustaka C++. Saat aplikasi berada di latar depan (atau saat aplikasi berada di latar belakang dan menerima muatan data saja), pesan akan melewati salah satu callback yang disediakan di kelas ini. Untuk menambahkan perilaku kustom ke penanganan pesan, Anda perlu memperluas ListenerService default FCM:

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

Dengan mengganti metode ListenerService.onMessageReceived , Anda dapat melakukan tindakan berdasarkan objek RemoteMessage yang diterima dan mendapatkan data pesan:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService juga memiliki beberapa metode lain yang jarang digunakan. Ini dapat diganti juga, untuk informasi lebih lanjut lihat referensi FirebaseMessagingService .

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

Perbarui AndroidManifest.xml

Setelah kelas khusus Anda ditulis, kelas tersebut harus disertakan dalam AndroidManifest.xml agar dapat diterapkan. Pastikan manifes menyertakan alat gabungan dengan mendeklarasikan atribut yang sesuai di dalam <manifest> , seperti:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

Dalam arsip firebase_messaging_cpp.aar ada file AndroidManifest.xml yang mendeklarasikan ListenerService default FCM. Manifes ini biasanya digabungkan dengan manifes khusus proyek yang dapat dijalankan oleh ListenerService . ListenerService ini perlu diganti dengan layanan pendengar kustom. Itu dilakukan dengan menghapus ListenerService default dan menambahkan Layanan kustom, yang dapat dilakukan dengan baris berikut file AndroidManifest.xml proyek Anda:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

Versi baru Firebase C++ SDK (7.1.0 dan seterusnya) menggunakan JobIntentService yang memerlukan modifikasi tambahan di file AndroidManifest.xml .

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

Cegah inisialisasi otomatis

FCM menghasilkan token pendaftaran untuk penargetan perangkat. Saat token dibuat, pustaka mengunggah pengidentifikasi dan data konfigurasi ke Firebase. Jika Anda ingin mendapatkan keikutsertaan eksplisit sebelum menggunakan token, Anda dapat mencegah pembuatan pada waktu konfigurasi dengan menonaktifkan FCM (dan di Android, Analytics). Untuk melakukannya, tambahkan nilai metadata ke Info.plist Anda (bukan GoogleService-Info.plist Anda) di platform Apple, atau AndroidManifest.xml Anda di Android:

Android

<?xml version="1.0" encoding="utf-8"?>
<application>
  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />
  <meta-data android:name="firebase_analytics_collection_enabled"
             android:value="false" />
</application>

Cepat

FirebaseMessagingAutoInitEnabled = NO

Untuk mengaktifkan kembali FCM, Anda dapat melakukan panggilan waktu proses:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

Nilai ini tetap ada selama aplikasi dimulai ulang setelah disetel.

FCM memungkinkan pesan dikirim yang berisi tautan dalam ke aplikasi Anda. Untuk menerima pesan yang berisi tautan dalam, Anda harus menambahkan filter maksud baru ke aktivitas yang menangani tautan dalam untuk aplikasi Anda. Filter maksud harus menangkap tautan dalam domain Anda. Jika pesan Anda tidak berisi tautan dalam, konfigurasi ini tidak diperlukan. Di AndroidManifest.xml:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/>
</intent-filter>

Dimungkinkan juga untuk menentukan karakter pengganti untuk membuat filter maksud lebih fleksibel. Sebagai contoh:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="*.example.com" android:scheme="http"/>
  <data android:host="*.example.com" android:scheme="https"/>
</intent-filter>

Saat pengguna mengetuk notifikasi yang berisi tautan ke skema dan host yang Anda tentukan, aplikasi Anda akan memulai aktivitas dengan filter maksud ini untuk menangani tautan.

Langkah selanjutnya

Setelah menyiapkan aplikasi klien, Anda siap mengirim pesan downstream dan topik dengan Firebase. Untuk mempelajari lebih lanjut, lihat fungsionalitas ini yang didemonstrasikan dalam contoh panduan memulai yang dapat Anda unduh, jalankan, dan tinjau.

Untuk menambahkan perilaku lain yang lebih canggih ke aplikasi Anda, lihat panduan untuk mengirim pesan dari server aplikasi:

Ingatlah bahwa Anda memerlukan implementasi server untuk menggunakan fitur ini.