Flutter SDK
Respondo destek sohbeti için saf Dart bir istemci — derlenecek ya da hata ayıklanacak yerel platform kodu yok.
Gereksinimler#
- Dart
>=3.4.0 <4.0.0. - Flutter
>=3.16.0(3.x hattı). - Saf Dart: yerel köprü yok,
pod installyok, Gradle düzenlemesi yok. Geçişli bağımlılıklar sade Dart paketleridir (http, web_socket_channel, uuid).
Kurulum#
Paketi pub.dev üzerinden ekleyin:
dependencies:
respondo_sdk: ^0.1.2import 'package:respondo_sdk/respondo_sdk.dart';Başlatma#
Respondo.navigatorKey’i MaterialApp’inize bağlayın ki SDK, sohbet sayfasını sizin BuildContext’iniz olmadan açabilsin; Respondo.init’i bir kez, ardından Respondo.open()’i çağırın.
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();
// Dosya depolama dizini bir host uygulama eklentisinden gelir; SDK saf kalır.
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, // SDK'nın sohbeti açabilmesi için gereklidir
home: Scaffold(
body: Center(
child: FilledButton(
onPressed: () => Respondo.open(),
child: const Text('Destek'),
),
),
),
);
}
}Tüm cephe yöntemleri idempotenttir, init’ten önce çağrılması güvenlidir (tamponlayıp yeniden oynatırlar) ve asla uygulamanıza hata fırlatmazlar.
Kullanıcıları tanımlama#
Varsayılan olarak her ziyaretçi anonimdir. İlk açılışta SDK, kararlı bir visitor_id oluşturur ve onu yerel depoda tutar; böylece geri dönen bir kullanıcı konuşmasını yeniden bulur. Gömülecek bir API anahtarı yoktur — her konuşma, backend’in ürettiği ve her mesajda ilerlettiği konuşma başına bir oturum belirteciyle korunur; böylece anonim bir ziyaretçinin asla yeniden kimlik doğrulaması gerekmez.
Kullanıcınız oturum açtığında identify’i bir kez çağırın. Bu, gerçek kimliklerini iliştirir; böylece geçmişleri cihazlar ve yeniden kurulumlar arasında onları takip eder ve gelen kutunuzda konuşmanın yanında anonim bir ziyaretçi yerine adları ile e-postaları görünür.
userHash, backend’inizin ajanın identity_secret’ından hesapladığı bir imzadır — HMAC-SHA256(secret, userId) (veya userId yoksa e-posta), küçük harfli hex olarak kodlanır. Bu gizli anahtar, kimliğin gerçek olduğunu kanıtlar; bu yüzden yalnızca backend’inizde bulunmalı ve asla uygulamayla gönderilmemelidir. Tam formül ve sunucu tarafı örnekler için Kimlik doğrulama sayfasına bakın.
// 1. Kendi backend'inize karşı oturum açın ve önceden hesaplanmış hash'i okuyun
// (örneğin, oturum açma yanıtıyla birlikte dönen bir alan).
final session = await api.login(email, password);
// 2. Tamamlanmış userHash'i SDK'ya verin — asla uygulamada hesaplamayın.
Respondo.identify(RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash,
));
// 3. Çıkışta: oturumu iptal edin ve taze bir anonim ziyaretçi başlatın.
Respondo.reset();Hash eksik veya yanlışsa hiçbir hata fırlatılmaz: backend, ziyaretçiyi sessizce anonim tutar, sohbet çalışmaya devam eder ve geçerli bir hash sağlanana kadar yalnızca cihazlar arası bağlantıyı kaybedersiniz. Doğrulama yalnızca ajanın ayarlanmış bir identity_secret’ı olduğunda çalışır — geliştirme sırasında onu boş bırakın; o zaman userId / e-posta olduğu gibi kabul edilir.
Gözlemlenebilirler & geri çağırmalar#
Her şey bir yayın Stream’i, bir geri çağırma setter’ı ve bir güncel değer getter’ı olarak mevcuttur.
// Okunmamış sayılarının reaktif akışı (bir rozet için).
Respondo.unreadCountStream.listen((n) => setBadge(n));
// Ya da bir geri çağırma setter'ı.
Respondo.onUnreadChanged = (n) => setBadge(n);
// Bağlantıları/CTA'ları yakalayın; host URL'i kendisi açtıysa true döndürün.
Respondo.onUrlRequested = (url) {
openInAppBrowser(url);
return true;
};Ekran takibi#
Proaktif teaser’ların ve sayfa düzeyi hedeflemenin eşleşebilmesi için geçerli ekranı her gezinmede bildirin. Temizlemek için null geçirin; her değişimde proaktif teaser yeni ekran için yeniden değerlendirilir.
Respondo.setCurrentScreen('pricing');Sonraki adımlar#
Push bildirimleri’ni ve Kimlik doğrulama’yı ekleyin. Tam API yüzeyi, etkileşim yüzeyleri ve sorun giderme, pub.dev paket sayfası üzerindeki Flutter SDK başlangıç kılavuzunda ele alınır.