Flutter SDK
Een pure-Dart-client voor de Respondo-supportchat — geen native platformcode om te compileren of te debuggen.
Vereisten#
- Dart
>=3.4.0 <4.0.0. - Flutter
>=3.16.0(de 3.x-lijn). - Pure Dart: geen native bridges, geen
pod install, geen Gradle-aanpassingen. Transitieve deps zijn gewone Dart-packages (http, web_socket_channel, uuid).
Installatie#
Voeg het pakket toe vanaf pub.dev:
dependencies:
respondo_sdk: ^0.1.2import 'package:respondo_sdk/respondo_sdk.dart';Initialiseren#
Koppel Respondo.navigatorKey aan je MaterialApp zodat de SDK de chat-sheet kan openen zonder je BuildContext, roep Respondo.init één keer aan en daarna Respondo.open().
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:respondo_sdk/respondo_sdk.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// De opslagmap voor bestanden komt van een plugin in de host-app; de SDK blijft puur.
final dir = await getApplicationSupportDirectory();
await Respondo.init(
RespondoConfig(
agentId: '<agent-uuid>',
channelId: '<channel-uuid>',
storageDirectory: dir.path,
),
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: Respondo.navigatorKey, // vereist zodat de SDK de chat kan openen
home: Scaffold(
body: Center(
child: FilledButton(
onPressed: () => Respondo.open(),
child: const Text('Support'),
),
),
),
);
}
}Alle facade-methoden zijn idempotent, veilig om vóór init aan te roepen (ze bufferen en spelen opnieuw af) en gooien nooit iets naar je app.
Gebruikers identificeren#
Standaard is elke bezoeker anoniem. Bij de eerste start genereert de SDK een stabiele visitor_id en bewaart die in de lokale opslag, zodat een terugkerende gebruiker zijn gesprek terugvindt. Er is geen API-sleutel om in te bedden — elk gesprek wordt beschermd door een sessietoken per gesprek dat de backend uitgeeft en bij elk bericht vooruit schuift, zodat een anonieme bezoeker zich nooit opnieuw hoeft te authenticeren.
Roep identify aan zodra je gebruiker is ingelogd. Dit koppelt zijn echte identiteit, zodat zijn geschiedenis hem volgt over apparaten en herinstallaties heen, en zijn naam en e-mail naast het gesprek in je inbox verschijnen in plaats van een anonieme bezoeker.
De userHash is een handtekening die je backend berekent uit de identity_secret van de agent — HMAC-SHA256(secret, userId) (of het e-mailadres als er geen userId is), gecodeerd als kleine-letter-hex. Het secret bewijst dat de identiteit echt is, dus het mag alleen op je backend leven en wordt nooit met de app meegeleverd. Zie de pagina Identiteitsverificatie voor de volledige formule en voorbeelden aan de serverkant.
// 1. Log in tegen je eigen backend en lees de vooraf berekende hash
// (bijvoorbeeld een veld dat samen met de login-respons wordt teruggegeven).
final session = await api.login(email, password);
// 2. Geef de afgeronde userHash aan de SDK — bereken hem nooit in de app.
Respondo.identify(RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash,
));
// 3. Bij uitloggen: trek de sessie in en start een verse anonieme bezoeker.
Respondo.reset();Als de hash ontbreekt of onjuist is, wordt er niets gegooid: de backend houdt de bezoeker stil anoniem, de chat blijft werken, en je verliest simpelweg de koppeling tussen apparaten totdat een geldige hash wordt aangeleverd. Verificatie draait alleen wanneer de agent een identity_secret heeft ingesteld — laat die leeg tijdens de ontwikkeling en userId / e-mail worden as-is geaccepteerd.
Observables & callbacks#
Alles is beschikbaar als een broadcast- Stream, een callback-setter en een getter voor de huidige waarde.
// Reactieve stream van aantallen ongelezen (voor een badge).
Respondo.unreadCountStream.listen((n) => setBadge(n));
// Of een callback-setter.
Respondo.onUnreadChanged = (n) => setBadge(n);
// Onderschep links/CTA's; retourneer true als de host de URL zelf heeft geopend.
Respondo.onUrlRequested = (url) {
openInAppBrowser(url);
return true;
};Schermtracking#
Meld het huidige scherm bij elke navigatie, zodat proactieve teasers en targeting op paginaniveau ertegen kunnen matchen. Geef null door om het te wissen; bij elke wijziging wordt de proactieve teaser opnieuw geëvalueerd voor het nieuwe scherm.
Respondo.setCurrentScreen('pricing');Volgende stappen#
Voeg Push-notificaties en Identiteitsverificatie toe. Het volledige API-oppervlak, de engagement-oppervlakken en het oplossen van problemen komen aan bod in de getting-startedgids van de Flutter SDK op de pub.dev-packagepagina.