Пуш-уведомления
Доставляйте ответы операторов и кампании, пока приложение закрыто, с диплинком прямо в нужный диалог. Пуш-подсистемой владеет ваше приложение; SDK регистрирует токены и открывает диалоги.
Что отправляет Respondo#
- Пуши сообщений — ответ оператора или ИИ в диалоге, в котором участвует посетитель.
- Пуши кампаний — исходящие пуш-кампании, которые также сообщают маячок открытия.
Пуши сообщений всегда несут диплинк вида respondo://conversation/<id>. Пуши кампаний несут диплинк, настроенный в кампании, — он необязателен, и если не задан, пуш не содержит диплинка.
Apple (APNs)#
Пуш на iOS работает напрямую через APNs — без зависимости от Firebase. Из своего аккаунта Apple Developer получите:
- Ключ APNs Auth Key (токен-ключ
.p8). - Key ID этого ключа.
- Ваш Team ID.
- bundle id приложения.
Google (FCM)#
Пуш на Android идёт через Firebase Cloud Messaging. Из своего проекта Firebase получите:
- service account JSON с ролью Cloud Messaging.
- ID проекта Firebase (консоль Firebase → Project settings) — вводится отдельным полем в форме пуша в панели управления рядом с service-account JSON.
- package name Android-приложения и подключите приложение к тому же проекту Firebase (
google-services.json).
Настройка в Respondo#
Добавьте ключ APNs и service account FCM с его ID проекта в канал вашего виджета в панели управления. Это всё, что нужно Respondo, чтобы отправлять на обе платформы.
Формат payload#
Payload всегда лежит под корневым ключом respondo — по его наличию SDK отличает свой пуш от чужих (на 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.
Пуши кампаний также включают delivery_id, который используется для отправки маячка открытия, и могут нести дополнительные плоские строковые ключи из push-данных кампании.
Обработка тапов и переднего плана#
По тапу на уведомлении передайте сырой payload в SDK. Он разбирает payload и открывает нужный диалог, возвращая false, если это не пуш Respondo (в этом случае обработайте его сами).
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)Дубли схлопываются по message_id, а пока тот же диалог открыт на переднем плане, системное уведомление подавляется — SDK делает и то, и другое автоматически.
Регистрация токенов устройства#
Ваше приложение получает токен устройства из своей пуш-подсистемы и передаёт его в setPushToken. При выходе вызывайте clearPushToken.
- Android — регистрационный токен FCM из
FirebaseMessaging.getToken(). - iOS (нативно) — токен устройства APNs (hex) из
didRegisterForRemoteNotificationsWithDeviceToken. - iOS через Flutter (firebase_messaging) — используйте
getAPNSToken(), а неgetToken(). Передача FCM-токена на iOS отправляет его в APNs, где он не является валидным токеном устройства, и пуши никогда не приходят.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);
}