Flutter SDK
Purong Dart na kliyente para sa support chat ng Respondo — walang native na code ng platform na kailangang i-compile o i-debug.
Mga kinakailangan#
- Dart
>=3.4.0 <4.0.0. - Flutter
>=3.16.0(ang linyang 3.x). - Purong Dart: walang native bridge, walang
pod install, walang pag-edit sa Gradle. Payak na Dart package ang mga transitive dependency (http, web_socket_channel, uuid).
Pag-install#
Idagdag ang package mula sa pub.dev:
dependencies:
respondo_sdk: ^0.1.2import 'package:respondo_sdk/respondo_sdk.dart';Pag-initialize#
Ikabit ang Respondo.navigatorKey sa MaterialApp ninyo para mabuksan ng SDK ang chat sheet nang hindi kailangan ang BuildContext ninyo, tawagin ang Respondo.init nang isang beses, tapos ang 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();
// Mula sa plugin ng host app ang direktoryo ng imbakan ng file; nananatiling purong Dart ang SDK.
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, // kailangan para mabuksan ng SDK ang chat
home: Scaffold(
body: Center(
child: FilledButton(
onPressed: () => Respondo.open(),
child: const Text('Support'),
),
),
),
);
}
}Idempotent ang lahat ng method ng facade, ligtas silang tawagin bago pa ang init (binubufer at inuulit nila ang tawag), at hindi sila kailanman naghahagis ng exception papasok sa app ninyo.
Pagkilala sa mga user#
Bilang default, anonymous ang bawat bisita. Sa unang paglulunsad, gumagawa ang SDK ng matatag na visitor_id at itinatago ito sa lokal na imbakan, kaya nahahanap muli ng bumabalik na user ang usapan niya. Walang API key na kailangang ilagay sa app — ang bawat usapan ay pinoprotektahan ng session token na para lang sa usapang iyon, na ginagawa ng backend at isinusulong nito sa bawat mensahe, kaya hindi na kailangang mag-authenticate ulit ang anonymous na bisita.
Tawagin ang identify sa sandaling naka-sign in na ang user ninyo. Ikinakabit nito ang totoong identity niya, kaya sumusunod sa kanya ang kasaysayan niya sa iba't ibang device at pagkatapos ng muling pag-install, at lumalabas ang pangalan at email niya sa tabi ng usapan sa Inbox ninyo sa halip na anonymous na bisita.
Ang userHash ay lagdang tinutuos ng backend ninyo mula sa identity_secret ng ahente — HMAC-SHA256(secret, userId) (o ang email kung walang userId), naka-encode bilang maliliit na letrang hex. Ang secret ang nagpapatunay na tunay ang identity, kaya sa backend lang ninyo ito dapat manatili at hindi kailanman ipinapadala kasama ng app. Tingnan ang pahinang Pagpapatunay ng identity para sa buong pormula at sa mga halimbawa sa server.
// 1. Mag-sign in sa sarili ninyong backend at basahin ang naunang tinuos na hash
// (halimbawa, isang field na ibinabalik kasama ng tugon sa login).
final session = await api.login(email, password);
// 2. Ibigay ang tapos nang userHash sa SDK — huwag kailanman itong tuusin sa app.
Respondo.identify(RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash,
));
// 3. Sa pag-logout: bawiin ang session at magsimula ng bagong anonymous na bisita.
Respondo.reset();Kung wala o mali ang hash, walang nagkakamali: tahimik na iniiwang anonymous ng backend ang bisita, patuloy na gumagana ang chat, at ang mawawala lang sa inyo ay ang ugnayan sa iba pang device hanggang may maibigay na wastong hash. Tumatakbo lang ang pagpapatunay kapag may nakatakdang identity_secret ang ahente — iwanan itong walang laman habang nagde-develop at tatanggapin nang buo ang userId / email.
Observables at callback#
Available ang lahat bilang broadcast na Stream, bilang setter ng callback, at bilang getter ng kasalukuyang halaga.
// Reaktibong stream ng bilang ng hindi pa nababasa (para sa badge).
Respondo.unreadCountStream.listen((n) => setBadge(n));
// O setter ng callback.
Respondo.onUnreadChanged = (n) => setBadge(n);
// Salain ang mga link/CTA; magbalik ng true kung ang host mismo ang nagbukas ng URL.
Respondo.onUrlRequested = (url) {
openInAppBrowser(url);
return true;
};Pagsubaybay sa screen#
Iulat ang kasalukuyang screen sa bawat navigation para makatugma rito ang mga proactive na teaser at ang page-level na targeting. Magpasa ng null para burahin ito; sa bawat pagbabago, muling sinusuri ang proactive na teaser para sa bagong screen.
Respondo.setCurrentScreen('pricing');Mga susunod na hakbang#
Idagdag ang Push notification at ang Pagpapatunay ng identity. Ang buong API surface, ang mga surface ng engagement, at ang paglutas ng problema ay nakadetalye sa gabay sa pagsisimula ng Flutter SDK sa pahina ng package sa pub.dev.