Buka konsol

Menyiapkan aplikasi klien Firebase Cloud Messaging dengan C++

Untuk menulis aplikasi klien Firebase Cloud Messaging lintas platform dengan C++, gunakan API Firebase Cloud Messaging. C++ SDK dapat digunakan untuk Android dan iOS, dengan beberapa penyiapan tambahan yang diwajibkan untuk setiap platform.

Menyiapkan Firebase dan FCM SDK

Android

  1. Tambahkan Firebase ke project C++ jika Anda belum melakukannya.

    • Dalam petunjuk penyiapan yang ditautkan, tinjau persyaratan perangkat dan aplikasi untuk menggunakan Firebase C++ SDK, termasuk rekomendasi penggunaan CMake untuk membuat aplikasi Anda.

    • Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.

  2. Buat objek Firebase App, dengan mengirimkan lingkungan dan Aktivitas JNI:

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

  3. Tentukan class yang mengimplementasikan antarmuka firebase::messaging::Listener.

  4. Lakukan inisialisasi FCM, dengan memasukkan Aplikasi dan Listener yang telah dibuat:

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

  5. Aplikasi yang bergantung pada SDK layanan Google Play harus memeriksa kompatibilitas perangkat terhadap APK layanan Google Play sebelum mengakses fitur tersebut. Untuk mempelajari lebih lanjut, lihat Pemeriksaan untuk APK layanan Google Play.

iOS

  1. Anda membutuhkan sertifikat APN yang valid. Jika Anda belum memilikinya, lihatMenyediakan Sertifikat SSL APN.
  2. Tambahkan Firebase ke project C++ jika Anda belum melakukannya. Lalu, untuk menyiapkan project Anda untuk FCM:
    1. Di Podfile project Anda, tambahkan dependensi FCM:
      pod 'Firebase/Messaging'
    2. Tarik firebase.framework dan firebase_messaging.framework frameworks ke project Xcode Anda dari Firebase C++ SDK.
  3. Konfigurasikan project Xcode untuk mengaktifkan Notifikasi Push:

    1. Pilih project dari Navigator area.
    2. Pilih target project dari Editor area.
    3. Pilih tab General dari Editor area.

      1. Scroll ke bawah ke Linked Frameworks and Libraries, lalu klik tombol + untuk menambahkan framework.
      2. Di jendela yang muncul, scroll ke UserNotifications.framework, klik entri tersebut, lalu klik Add.

        Framework ini hanya akan muncul di Xcode v8 dan yang lebih baru, dan diwajibkan oleh library ini.

    4. Pilih tab Capabilities dari Editor area.

      1. Alihkan Push Notifications ke On.
      2. Scroll ke bawah ke Background Modes, lalu alihkan ke On.
      3. Pilih Remote notifications di bagian Background Modes.
  4. Buat objek Firebase App:

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

  5. Tentukan class yang mengimplementasikan antarmuka firebase::messaging::Listener.

  6. Lakukan inisialisasi pada Firebase Cloud Messaging, dengan memasukkan Aplikasi dan Listener yang telah dibuat:

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

Mengakses token pendaftaran perangkat

Setelah menginisialisasi library Firebase Cloud Messaging, token pendaftaran akan diminta untuk instance aplikasi klien. Aplikasi akan menerima token tersebut dengan callback OnTokenReceived, yang harus ditentukan di class yang mengimplementasikanfirebase::messaging::Listener.

Jika 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 sebuah notifikasi, secara default pesannya tidak dirutekan melalui FCM yang dibuat dalam callback. Dalam kasus ini, payload pesan diterima melalui Intent yang digunakan untuk memulai aplikasi. Agar FCM meneruskan pesan masuk ini ke callback library C++, Anda perlu mengganti metode onNewIntent dalam 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());
    startService(message);
  }
}

Untuk pesan yang diterima saat aplikasi berada di latar belakang, isinya akan diambil dari kolom notifikasi dan digunakan untuk mengisi notifikasi baki sistem, namun isi notifikasi tersebut tidak akan disampaikan ke FCM. Artinya, Message::notification akan kosong.

Rangkuman:

Status aplikasi Notification Data Keduanya
Latar depan OnMessageReceived OnMessageReceived OnMessageReceived
Latar Belakang Baki sistem OnMessageReceived Notifikasi: baki sistem
Data: di bagian tambahan dari intent.

Penanganan Pesan Kustom di Android

Secara default, notifikasi yang dikirim ke aplikasi diteruskan ke ::firebase::messaging::Listener::OnMessageReceived, namun dalam beberapa kasus Anda mungkin ingin mengganti perilaku default. Untuk melakukannya di Android, Anda perlu menulis class kustom yang menggunakan ekstensi com.google.firebase.messaging.cpp.ListenerService serta memperbarui project Anda AndroidManifest.xml.

Mengganti ListenerService Metode.

ListenerService adalah kelas Java yang mencegah pesan masuk yang dikirim ke aplikasi dan mengarahkannya ke library C ++. Saat aplikasi berada di latar depan (atau saat aplikasi menjadi latar belakang dan hanya menerima payload data), pesan akan diteruskan ke salah satu callback yang disediakan di class ini. Untuk menambahkan perilaku khusus ke penanganan pesan, Anda perlu menambahkan 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. Metode 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);
}

Update AndroidManifest.xml

Setelah class khusus Anda ditulis, class harus disertakan dalam AndroidManifest.xml agar berlaku. Pastikan manifes menyertakan fitur penggabung dengan menyatakan atribut yang sesuai di dalam tag <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 terdapat file AndroidManifest.xml yang menyatakan ListenerService default FCM. Manifes ini biasanya digabungkan dengan manifes project tertentu yang menunjukkan bagaimana ListenerService dapat dijalankan. ListenerService ini perlu diganti dengan layanan listener khusus. Hal itu dilakukan dengan menghapusListenerService default dan menambahkan Service khusus, yang dapat dilakukan dengan baris berikut dari file AndroidManifest.xml project 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>

Mencegah inisialisasi otomatis

FCM menghasilkan ID Instance yang digunakan sebagai token pendaftaran dalam FCM. Ketika ID Instance dibuat, library akan mengupload ID tersebut dan data konfigurasi ke Firebase. Jika ingin mendapatkan keikutsertaan eksplisit sebelum menggunakan ID Instance, Anda dapat mencegah pembuatan pada waktu konfigurasi dengan menonaktifkan FCM (dan di Android Analytics). Untuk melakukan ini, tambahkan nilai metadata ke Info.plist (bukan GoogleService-Info.plist) di iOS, 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>

iOS

FirebaseMessagingAutoInitEnabled = NO

Untuk mengaktifkan kembali FCM, Anda dapat membuat panggilan runtime:

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

Nilai ini akan tetap ada setiap kali aplikasi dimulai ulang.

FCM memungkinkan pengiriman pesan yang berisi deep link ke aplikasi Anda. Untuk menerima pesan yang berisi deep link, Anda harus menambahkan filter intent baru ke aktivitas yang menangani deep link untuk aplikasi Anda. Filter intent harus menangkap deep link dalam domain Anda. Jika pesan Anda tidak mengandung deep link, konfigurasi ini tidak diperlukan. Pada 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>

Anda juga dapat menentukan karakter pengganti agar filter intent lebih fleksibel. Misalnya:

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

Ketika pengguna menge-tap notifikasi yang berisi link ke skema dan host yang Anda tentukan, aplikasi akan memulai aktivitas dengan filter intent ini untuk menangani link.

Langkah berikutnya

Setelah menyiapkan aplikasi klien, Anda siap untuk mengirimkan pesan downstream dan topik dengan Firebase. Untuk mempelajari lebih lanjut, lihat fungsi ini sebagaimana ditunjukkan di sampel panduan mulai cepat yang dapat Anda download, jalankan, dan tinjau.

Untuk menambahkan perilaku lebih canggih lainnya ke aplikasi Anda, lihat panduan mengenai cara mengirimkan pesan dari server aplikasi:

Perlu diingat bahwa Anda memerlukan penerapan server untuk menggunakan fitur ini.