Documentatie

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.

Het instellen van de credentials via de API en de volledige veldreferentie komen aan bod in de push-setupgids die bij je SDK-toegang wordt geleverd.

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 payloadjson
{
  "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).

Een tik afhandelen (per platform)text
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.

Welke token doorgeven. De backend routeert elke bezorging per platform — iOS gaat rechtstreeks naar APNs, Android gaat naar FCM — dus je moet de token van het native transport van het platform registreren, niet wat je push-library toevallig teruggeeft:
  • Android — de FCM-registratietoken van FirebaseMessaging.getToken().
  • iOS (native) — de APNs-device-token (hex) van didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS via Flutter (firebase_messaging) — gebruik getAPNSToken(), niet getToken(). 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.
Android — FirebaseMessagingServicekotlin
override fun onNewToken(token: String) {
    Respondo.setPushToken(token)
}
iOS — AppDelegateswift
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let token = deviceToken.map { String(format: "%02x", $0) }.joined()
    Respondo.setPushToken(token)
}
Flutter — firebase_messagingdart
// 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);
}