Notifikasi push
Kirimkan balasan agen dan kampanye saat aplikasi tertutup, dengan deep link langsung ke percakapan yang tepat. Aplikasi Anda memiliki subsistem push; SDK mendaftarkan token dan membuka percakapan.
Apa yang dikirim Respondo#
- Push pesan — balasan agen atau AI dalam percakapan yang diikuti pengunjung.
- Push kampanye — kampanye push keluar, yang juga melaporkan beacon pembukaan.
Push pesan selalu membawa deep link berbentuk respondo://conversation/<id>. Push kampanye membawa deep link yang dikonfigurasi pada kampanye — bersifat opsional, dan jika tidak disetel, push tidak berisi deep link.
Apple (APNs)#
Push iOS berjalan langsung di APNs — tanpa dependensi Firebase. Dari akun Apple Developer Anda, dapatkan:
- Sebuah APNs Auth Key (kunci token
.p8). - Key ID dari kunci tersebut.
- Team ID Anda.
- bundle id aplikasi.
Google (FCM)#
Push Android berjalan melalui Firebase Cloud Messaging. Dari proyek Firebase Anda, dapatkan:
- Sebuah JSON service account dengan peran Cloud Messaging.
- Firebase project ID (Firebase console → Project settings) — dimasukkan sebagai field tersendiri di formulir push dashboard bersama JSON service account.
- package name aplikasi Android, dan hubungkan aplikasi ke proyek Firebase yang sama (
google-services.json).
Konfigurasi di Respondo#
Tambahkan kunci APNs dan service account FCM beserta project ID-nya ke channel widget Anda di dashboard. Hanya itu yang dibutuhkan Respondo untuk mengirim ke kedua platform.
Format payload#
Payload selalu berada di bawah kunci root respondo — keberadaannya adalah cara SDK membedakan push miliknya dari yang lain (di iOS pada userInfo, di Android sebagai string JSON dalam data["respondo"]).
{
"respondo": {
"type": "message",
"conversation_id": "a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90",
"message_id": "e9a3c1f6-4b8d-4e0a-b5f3-1d7b2a4e9c63",
"deep_link": "respondo://conversation/a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90"
}
}Semua nilai berupa string datar. Judul dan isi notifikasi dikirim oleh transport platform — aps.alert di APNs dan message.notification di FCM — bukan di dalam objek respondo.
Push kampanye juga menyertakan delivery_id yang digunakan untuk melaporkan beacon pembukaan, dan dapat membawa key string datar tambahan dari data push kampanye.
Menangani ketukan & foreground#
Saat notifikasi diketuk, serahkan payload mentah ke SDK. SDK mem-parse payload dan membuka percakapan yang tepat, mengembalikan false jika push bukan push Respondo (tangani sendiri dalam kasus itu).
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)Duplikat digabungkan berdasarkan message_id, dan selama percakapan yang sama terbuka di foreground notifikasi sistem ditekan — SDK menangani keduanya secara otomatis.
Mendaftarkan token perangkat#
Aplikasi Anda memperoleh token perangkat dari subsistem push-nya dan meneruskannya ke setPushToken. Panggil clearPushToken saat logout.
- Android — token registrasi FCM dari
FirebaseMessaging.getToken(). - iOS (native) — token perangkat APNs (hex) dari
didRegisterForRemoteNotificationsWithDeviceToken. - iOS via Flutter (firebase_messaging) — gunakan
getAPNSToken(), bukangetToken(). Meneruskan token FCM di iOS mengirimkannya ke APNs, di mana ia bukan token perangkat yang valid dan push tidak pernah tiba.getAPNSToken()bisa bernilai null pada saat-saat pertama setelah peluncuran — coba lagi setelah jeda singkat bila demikian.
override fun onNewToken(token: String) {
Respondo.setPushToken(token)
}func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let token = deviceToken.map { String(format: "%02x", $0) }.joined()
Respondo.setPushToken(token)
}// iOS memerlukan token APNs; Android memerlukan token FCM.
final token = Platform.isIOS
? await FirebaseMessaging.instance.getAPNSToken()
: await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);
// FCM merotasi token registrasinya; jaga Android tetap sinkron.
if (!Platform.isIOS) {
FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}