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

Untuk menulis aplikasi klien Firebase Cloud Messaging lintas platform Anda 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 yang ditautkan, tinjau persyaratan perangkat dan aplikasi untuk menggunakan Firebase C++ SDK, termasuk rekomendasi untuk menggunakan CMake untuk mem-build aplikasi Anda.

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

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

    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 Memeriksa APK layanan Google Play .

iOS+

  1. Anda memerlukan sertifikat APN yang valid. Jika Anda belum memilikinya, pastikan untuk membuatnya di Apple Developer Member Center .
  2. Jika Anda belum melakukannya, tambahkan Firebase ke proyek C++ Anda . Kemudian, untuk menyiapkan project Anda untuk FCM:
    1. Di Podfile proyek Anda, tambahkan dependensi FCM:
      pod 'FirebaseMessaging'
    2. Seret firebase.framework dan firebase_messaging.framework ke proyek Xcode Anda dari Firebase C++ SDK .
  3. Konfigurasi proyek Xcode Anda untuk mengaktifkan Push Notifications:

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

      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 muncul di Xcode v8 dan yang lebih baru dan diperlukan oleh library ini.

    4. Pilih tab Kemampuan dari area Editor .

      1. Alihkan Notifikasi Push ke Aktif .
      2. Gulir ke bawah ke Mode Latar Belakang , lalu aktifkan .
      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 dibangun:

    ::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 itu, 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 pustaka C++, Anda perlu mengganti metode onNewIntent dalam Aktivitas 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 kolom 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: dalam tambahan 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 melakukannya di Android, Anda perlu menulis kelas khusus yang memperluas com.google.firebase.messaging.cpp.ListenerService serta memperbarui AndroidManifest.xml proyek Anda.

Ganti Metode Layanan 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 khusus pada 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 bisa 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 lebih jarang digunakan. Ini juga dapat diganti, 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 penggabungan 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 terdapat file AndroidManifest.xml yang mendeklarasikan ListenerService default FCM. Manifes ini biasanya digabungkan dengan manifes khusus proyek yang merupakan cara ListenerService dapat dijalankan. ListenerService ini perlu diganti dengan cusom listener service. Itu dilakukan dengan menghapus ListenerService default dan menambahkan Service 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 pada 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, perpustakaan 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 runtime:

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

Nilai ini tetap ada saat aplikasi dimulai ulang setelah ditetapkan.

FCM memungkinkan pengiriman pesan 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 dari 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 wildcard 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 link ke skema dan host yang Anda tentukan, aplikasi Anda akan memulai aktivitas dengan filter intent ini untuk menangani link tersebut.

Langkah selanjutnya

Setelah menyiapkan aplikasi klien, Anda siap mengirim pesan downstream dan topik dengan Firebase. Untuk mempelajari lebih lanjut, lihat fungsi ini yang didemonstrasikan dalam contoh quickstart 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:

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