Untuk menulis aplikasi klien Firebase Cloud Messaging lintas platform dengan C++, gunakan Firebase Cloud Messaging. C++ SDK dapat digunakan untuk Android dan Apple, dengan sejumlah penyiapan tambahan di tiap platform.
Menyiapkan Firebase dan FCM SDK
Android
Tambahkan Firebase ke project C++ jika belum melakukannya.
Dalam petunjuk penyiapan tertaut, tinjau persyaratan perangkat dan aplikasi untuk menggunakan FirebaseC++ SDK, termasuk rekomendasi penggunaan CMake untuk mem-build aplikasi Anda.
Dalam file
build.gradle
level project, pastikan Anda memasukkan repositori Maven Google di bagianbuildscript
danallprojects
.
Buat objek Firebase App, dengan meneruskan lingkungan dan Aktivitas JNI:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
Tentukan class yang mengimplementasikan antarmuka
firebase::messaging::Listener
.Lakukan inisialisasi FCM, dengan meneruskan objek Firebase App dan Pemroses yang telah dibuat:
::firebase::messaging::Initialize(app, listener);
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+
- Tambahkan Firebase ke project C++ jika belum melakukannya. Lalu,
untuk menyiapkan project untuk FCM:
- Di Podfile project, tambahkan dependensi FCM:
pod 'FirebaseMessaging'
- Tarik framework
firebase.framework
danfirebase_messaging.framework
ke project Xcode dari Firebase C++ SDK.
- Di Podfile project, tambahkan dependensi FCM:
Upload kunci autentikasi APN Anda ke Firebase. Jika Anda belum memiliki kunci autentikasi APN, pastikan untuk membuatnya di Apple Developer Member Center.
-
Pada project Anda di Firebase console, pilih ikon roda gigi, pilih Project Settings, lalu pilih tab Cloud Messaging.
-
Di APNs authentication key di bagian iOS app configuration, klik tombol Upload.
-
Cari lokasi penyimpanan kunci, pilih lokasi tersebut, lalu klik Open. Tambahkan ID kunci tersebut (tersedia di Apple Developer Member Center) dan klik Upload.
-
Konfigurasikan project Xcode untuk mengaktifkan Notifikasi Push:
- Pilih project dari Navigator area.
- Pilih target project dari Editor area.
Pilih tab General dari Editor area.
- Scroll ke bawah ke Linked Frameworks and Libraries, lalu klik tombol + untuk menambahkan framework.
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.
Pilih tab Capabilities dari Editor area.
- Alihkan Push Notifications ke On.
- Scroll ke bawah ke Background Modes, lalu alihkan ke On.
- Pilih Remote notifications di bagian Background Modes.
BUat objek Firebase App:
app = ::firebase::App::Create(::firebase::AppOptions());
Tentukan class yang mengimplementasikan antarmuka
firebase::messaging::Listener
.Lakukan inisialisasi Firebase Cloud Messaging, dengan meneruskan object Firebase App dan Pemroses 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 mengimplementasikan
firebase::messaging::Listener
.
Jika ingin menarget 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 callback bawaan FCM. 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()); // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } }
Untuk pesan yang diterima saat aplikasi berada di latar belakang, isi kolom notifikasinya akan digunakan untuk mengisi notifikasi baki sistem, namun isi notifikasi tersebut tidak akan disampaikan ke FCM. Artinya, Message::notification
akan kosong.
Rangkuman:
Status aplikasi | Notifikasi | Data | Keduanya |
---|---|---|---|
Latar depan | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Latar belakang | Baki sistem | OnMessageReceived |
Notifikasi: baki sistem Data: di bagian tambahan 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 memperluas com.google.firebase.messaging.cpp.ListenerService
serta memperbarui AndroidManifest.xml
project Anda.
Mengganti Metode ListenerService
ListenerService
adalah class Java yang mencegah pesan masuk yang dikirim ke aplikasi dan merutekannya ke library C++. Saat aplikasi berada di latar depan (atau saat aplikasi menjadi latar belakang dan menerima payload data saja), pesan akan diteruskan ke salah satu callback yang disediakan di class ini. Untuk menambahkan perilaku kustom ke penanganan pesan, Anda perlu memperluas FCM default ListenerService
:
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 ditulis, class kustom harus disertakan dalam
AndroidManifest.xml
agar dijalankan. Pastikan manifes menyertakan alat penggabung dengan mendeklarasikan 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 mendeklarasikan FCM default ListenerService
. Manifes ini biasanya digabungkan dengan manifes khusus project agar
ListenerService
dapat dijalankan. ListenerService
ini perlu diganti dengan layanan pemroses kustom. Hal itu dilakukan dengan menghapus ListenerService
default dan menambahkan layanan kustom, yang dapat dilakukan dengan baris berikut dalam 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>
Firebase C++ SDK versi baru (7.1.0 dan berikutnya) 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>
Mencegah inisialisasi otomatis
FCM membuat token pendaftaran untuk penargetan perangkat.
Saat token dibuat, library mengupload
ID dan data konfigurasi ke Firebase. Jika menginginkan keikutsertaan
eksplisit sebelum menggunakan token, 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 platform Apple, atau AndroidManifest.xml
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>
Swift
FirebaseMessagingAutoInitEnabled = NO
Untuk mengaktifkan kembali FCM, Anda dapat membuat panggilan runtime:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Nilai ini akan tetap sama setiap kali aplikasi dimulai ulang.
Menangani Pesan dengan Deep Link di Android
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 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. 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>
Ketika pengguna mengetuk 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 pesan topik dengan Firebase. Untuk mempelajari lebih lanjut, lihat fungsi ini sebagaimana ditunjukkan di sampel panduan memulai 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 pada server untuk menggunakan fitur ini.