Push-notificaties
Lever antwoorden van medewerkers en campagnes terwijl de app gesloten is, met een deep link rechtstreeks naar het juiste gesprek. Je app bezit het push-subsysteem; de SDK registreert tokens en opent gesprekken.
Wat Respondo verstuurt#
- Bericht-pushes — een antwoord van een medewerker of AI in een gesprek waar de bezoeker deel van uitmaakt.
- Campagne-pushes — uitgaande push-campagnes, die ook een open-beacon rapporteren.
Bericht-pushes dragen altijd een deep link van de vorm respondo://conversation/<id>. Campagne-pushes dragen de deep link die op de campagne is ingesteld — die is optioneel, en als hij niet is ingesteld, bevat de push geen deep link.
Apple (APNs)#
iOS-push loopt rechtstreeks over APNs — geen Firebase-afhankelijkheid. Verkrijg vanuit je Apple Developer-account:
- Een APNs Auth Key (
.p8-tokensleutel). - De Key ID van die sleutel.
- Je Team ID.
- De bundle id van de app.
Google (FCM)#
Android-push loopt via Firebase Cloud Messaging. Verkrijg vanuit je Firebase-project:
- Een service-account-JSON met de rol Cloud Messaging.
- De Firebase-project-ID (Firebase-console → Projectinstellingen) — in te vullen als eigen veld in het pushformulier van het dashboard, naast de service-account-JSON.
- De package name van de Android-app, en verbind de app met hetzelfde Firebase-project (
google-services.json).
Configureren in Respondo#
Voeg de APNs-sleutel en het FCM-service-account met zijn project-ID toe aan je widgetkanaal in het dashboard. Meer heeft Respondo niet nodig om naar beide platforms te versturen.
Payload-formaat#
De payload leeft altijd onder een root-sleutel respondo — de aanwezigheid ervan is hoe de SDK zijn eigen push van andere onderscheidt (op iOS in userInfo, op Android als een JSON-string in 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"
}
}Alle waarden zijn platte strings. De titel en body van de notificatie worden bezorgd via het platformtransport — aps.alert op APNs en message.notification op FCM — niet binnen het respondo-object.
Campagne-pushes bevatten ook een delivery_id die wordt gebruikt om de open-beacon te rapporteren, en kunnen extra platte stringsleutels uit de pushdata van de campagne dragen.
Tikken & voorgrond afhandelen#
Bij een tik op een notificatie geef je de ruwe payload aan de SDK. Die parseert de payload en opent het juiste gesprek, en retourneert false als de push geen Respondo-push is (handel die in dat geval zelf af).
Android: RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS: Respondo.handlePush(userInfo: userInfo)
Flutter: Respondo.handlePushData(message.data)Duplicaten worden samengevoegd op message_id, en zolang hetzelfde gesprek op de voorgrond open is, wordt de systeemnotificatie onderdrukt — de SDK regelt beide automatisch.
Device-tokens registreren#
Je app verkrijgt de device-token van zijn push-subsysteem en geeft die door aan setPushToken. Roep clearPushToken aan bij uitloggen.
- Android — de FCM-registratietoken van
FirebaseMessaging.getToken(). - iOS (native) — de APNs-device-token (hex) van
didRegisterForRemoteNotificationsWithDeviceToken. - iOS via Flutter (firebase_messaging) — gebruik
getAPNSToken(), nietgetToken(). De FCM-token op iOS doorgeven stuurt hem naar APNs, waar het geen geldige device-token is en pushes nooit aankomen.getAPNSToken()kan de eerste momenten na het opstarten null zijn — probeer in dat geval na een korte vertraging opnieuw.
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 heeft de APNs-token nodig; Android heeft de FCM-token nodig.
final token = Platform.isIOS
? await FirebaseMessaging.instance.getAPNSToken()
: await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);
// FCM roteert zijn registratietoken; houd Android in sync.
if (!Platform.isIOS) {
FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}