Push-сповіщення
Доставляйте відповіді операторів і кампанії, поки застосунок закритий, із глибоким посиланням прямісінько в потрібну розмову. Ваш застосунок володіє push-підсистемою; SDK реєструє токени й відкриває розмови.
Що надсилає Respondo#
- Push повідомлень — відповідь оператора або AI в розмові, у якій бере участь відвідувач.
- Push кампаній — вихідні push-кампанії, які також повідомляють про відкриття маячком (beacon).
Push повідомлень завжди несуть глибоке посилання виду respondo://conversation/<id>. Push кампаній несуть глибоке посилання, налаштоване на кампанії — воно необов’язкове, і коли його не задано, push не містить глибокого посилання.
Apple (APNs)#
Push для iOS працює безпосередньо через APNs — без залежності від Firebase. У своєму обліковому записі Apple Developer отримайте:
- Ключ автентифікації APNs (токен-ключ
.p8). - Key ID цього ключа.
- Ваш Team ID.
- Bundle id застосунку.
Google (FCM)#
Push для Android іде через Firebase Cloud Messaging. У своєму проєкті Firebase отримайте:
- JSON сервісного акаунта з роллю Cloud Messaging.
- Firebase project ID (консоль Firebase → Project settings) — вводиться окремим полем у формі push у дашборді поряд із JSON сервісного акаунта.
- Назву пакета Android-застосунку й підключіть застосунок до того самого проєкту Firebase (
google-services.json).
Налаштування в Respondo#
Додайте ключ APNs і сервісний акаунт FCM з його project ID до каналу свого віджета в дашборді. Це все, що потрібно Respondo, щоб надсилати на обидві платформи.
Формат payload#
Payload завжди лежить під кореневим ключем respondo — саме за його наявністю SDK відрізняє власний push від чужих (на iOS у userInfo, на Android як JSON-рядок у 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"
}
}Усі значення — плоскі рядки. Заголовок і тіло сповіщення доставляються платформенним транспортом — aps.alert в APNs і message.notification у FCM — а не всередині об’єкта respondo.
Push кампаній також містять delivery_id, що використовується для повідомлення про відкриття маячком, і можуть нести додаткові плоскі рядкові ключі з push-даних кампанії.
Обробка натискань і переднього плану#
При натисканні на сповіщення передайте сирий payload у SDK. Він розбирає payload і відкриває потрібну розмову, повертаючи false, якщо push не є push від Respondo (у такому разі обробіть його самі).
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)Дублікати згортаються за message_id, а поки та сама розмова відкрита на передньому плані, системне сповіщення пригнічується — SDK обробляє і те, і те автоматично.
Реєстрація токенів пристроїв#
Ваш застосунок отримує токен пристрою від своєї push-підсистеми й передає його в setPushToken. Викликайте clearPushToken при виході.
- Android — реєстраційний токен FCM із
FirebaseMessaging.getToken(). - iOS (нативно) — токен пристрою APNs (hex) із
didRegisterForRemoteNotificationsWithDeviceToken. - iOS через Flutter (firebase_messaging) — використовуйте
getAPNSToken(), а неgetToken(). Передавання токена FCM на iOS надсилає його в APNs, де він не є валідним токеном пристрою, і push ніколи не приходять.getAPNSToken()може бути null у перші миті після запуску — у такому разі повторіть спробу після короткої затримки.
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 потрібен токен APNs; Android потрібен токен FCM.
final token = Platform.isIOS
? await FirebaseMessaging.instance.getAPNSToken()
: await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);
// FCM ротує свій реєстраційний токен; тримайте Android у синхроні.
if (!Platform.isIOS) {
FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}