ஆவணங்கள்

Flutter SDK

Respondo ஆதரவு அரட்டைக்கான முற்றிலும் Dart-இல் எழுதப்பட்ட கிளையண்ட் — தொகுக்கவோ பிழைதிருத்தவோ நேட்டிவ் தளக் குறியீடு எதுவும் இல்லை.

தேவைகள்#

  • Dart >=3.4.0 <4.0.0.
  • Flutter >=3.16.0 (3.x வரிசை).
  • முற்றிலும் Dart: நேட்டிவ் பாலங்கள் இல்லை, pod install இல்லை, Gradle திருத்தங்கள் இல்லை. transitive சார்புகள் சாதாரண Dart தொகுப்புகளே (http, web_socket_channel, uuid).

நிறுவல்#

தொகுப்பை pub.dev இலிருந்து சேருங்கள்:

pubspec.yamlyaml
dependencies:
  respondo_sdk: ^0.1.2
Dartdart
import 'package:respondo_sdk/respondo_sdk.dart';

தொடக்கமிடல்#

உங்கள் BuildContext இல்லாமலேயே SDK அரட்டைத் தாளைத் திறக்க முடியும் வகையில் Respondo.navigatorKey -ஐ உங்கள் MaterialApp-உடன் இணையுங்கள், Respondo.init-ஐ ஒரு முறை அழையுங்கள், பிறகு Respondo.open().

main.dartdart
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();

  // கோப்பு சேமிப்பு அடைவு ஹோஸ்ட் செயலியின் plugin-இலிருந்து வருகிறது; 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, // SDK அரட்டையைத் திறக்க இது அவசியம்
      home: Scaffold(
        body: Center(
          child: FilledButton(
            onPressed: () => Respondo.open(),
            child: const Text('Support'),
          ),
        ),
      ),
    );
  }
}

அனைத்து facade மெத்தட்களும் idempotent; init-க்கு முன்பே அழைப்பது பாதுகாப்பானது (அவை தற்காலிகமாகச் சேமித்து பிறகு மீண்டும் இயக்குகின்றன), மேலும் அவை உங்கள் செயலிக்குள் ஒருபோதும் பிழையை வீசுவதில்லை.

பயனர்களை அடையாளம் காணல்#

இயல்பாக ஒவ்வொரு பார்வையாளரும் அநாமதேயமானவர். முதல் முறை தொடங்கும்போது SDK நிலையான visitor_id ஒன்றை உருவாக்கி, அதை உள்ளூர் சேமிப்பில் வைத்திருக்கிறது; அதனால் திரும்பி வரும் பயனர் தன் உரையாடலை மீண்டும் கண்டடைகிறார். செயலியில் பொதிக்க API சாவி எதுவும் இல்லை — ஒவ்வொரு உரையாடலும், backend வழங்கி ஒவ்வொரு செய்தியிலும் முன்நகர்த்தும் உரையாடல்வாரியான session டோக்கனால் பாதுகாக்கப்படுகிறது; எனவே அநாமதேயப் பார்வையாளர் மீண்டும் அங்கீகாரம் பெறவே வேண்டியதில்லை.

உங்கள் பயனர் உள்நுழைந்ததும் identify-ஐ ஒரு முறை அழையுங்கள். இது அவரின் உண்மையான அடையாளத்தை இணைக்கிறது; அதனால் அவரின் வரலாறு சாதனங்களுக்கு இடையேயும் மறுநிறுவல்களுக்குப் பிறகும் அவரைத் தொடர்கிறது, மேலும் உங்கள் இன்பாக்ஸில் உரையாடலுக்கு அருகில் அநாமதேயப் பார்வையாளருக்குப் பதிலாக அவரின் பெயரும் மின்னஞ்சலும் தெரிகின்றன.

userHash என்பது முகவரின் identity_secret-இலிருந்து உங்கள் backend கணக்கிடும் கையொப்பம் — HMAC-SHA256(secret, userId) (userId இல்லாதபோது மின்னஞ்சல்), சிறிய எழுத்து hex ஆகக் குறியீடு செய்யப்பட்டது. இந்த ரகசியம் அடையாளம் உண்மையானது என்பதை நிரூபிக்கிறது; எனவே அது உங்கள் backend-இல் மட்டுமே இருக்க வேண்டும், செயலியுடன் ஒருபோதும் அனுப்பப்படுவதில்லை. முழு சூத்திரத்தையும் சர்வர் பக்க எடுத்துக்காட்டுகளையும் அடையாளச் சரிபார்ப்பு பக்கத்தில் பாருங்கள்.

Dartdart
// 1. உங்கள் சொந்த backend-இல் உள்நுழைந்து, முன்கூட்டியே கணக்கிடப்பட்ட ஹாஷைப் படியுங்கள்
//    (எடுத்துக்காட்டாக, login பதிலுடன் சேர்த்துத் திரும்பும் ஒரு புலம்).
final session = await api.login(email, password);

// 2. தயாரான userHash-ஐ SDK-க்கு அனுப்புங்கள் — அதை ஒருபோதும் செயலிக்குள் கணக்கிட வேண்டாம்.
Respondo.identify(RespondoIdentity(
  userId: session.userId,
  email: session.email,
  name: session.fullName,
  userHash: session.respondoUserHash,
));

// 3. வெளியேறும்போது: session-ஐ ரத்து செய்து, புதிய அநாமதேயப் பார்வையாளராகத் தொடங்குங்கள்.
Respondo.reset();

ஹாஷ் இல்லாவிட்டாலோ தவறாக இருந்தாலோ எந்தப் பிழையும் வீசப்படுவதில்லை: backend அமைதியாகவே பார்வையாளரை அநாமதேயமாக வைத்திருக்கும், அரட்டை தொடர்ந்து இயங்கும், சரியான ஹாஷ் வழங்கப்படும் வரை சாதனங்களுக்கு இடையிலான தொடர்பை மட்டும் இழப்பீர்கள். முகவருக்கு identity_secret அமைக்கப்பட்டிருந்தால் மட்டுமே சரிபார்ப்பு நடக்கும் — உருவாக்கத்தின்போது அதைக் காலியாக விடுங்கள், அப்போது userId / மின்னஞ்சல் உள்ளபடியே ஏற்கப்படும்.

கவனிக்கத்தக்க மதிப்புகளும் callback-களும்#

ஒவ்வொன்றும் broadcast Stream ஆகவும், callback setter ஆகவும், தற்போதைய மதிப்பைத் தரும் getter ஆகவும் கிடைக்கிறது.

Dartdart
// படிக்காதவற்றின் எண்ணிக்கைக்கான reactive stream (பேட்ஜுக்கு).
Respondo.unreadCountStream.listen((n) => setBadge(n));

// அல்லது ஒரு callback setter.
Respondo.onUnreadChanged = (n) => setBadge(n);

// இணைப்புகளையும் CTA-க்களையும் இடைமறியுங்கள்; ஹோஸ்டே URL-ஐத் திறந்தால் true திருப்புங்கள்.
Respondo.onUrlRequested = (url) {
  openInAppBrowser(url);
  return true;
};

திரைக் கண்காணிப்பு#

முன்முனைப்பான டீஸர்களும் பக்க அளவிலான இலக்கிடலும் பொருத்திப் பார்க்க, ஒவ்வொரு navigation-இலும் தற்போதைய திரையைத் தெரிவியுங்கள். null அனுப்பினால் அது அழிக்கப்படும்; ஒவ்வொரு மாற்றத்திலும் புதிய திரைக்காக முன்முனைப்பான டீஸர் மீண்டும் மதிப்பீடு செய்யப்படுகிறது.

Dartdart
Respondo.setCurrentScreen('pricing');

அடுத்த படிகள்#

புஷ் அறிவிப்புகளையும் அடையாளச் சரிபார்ப்பையும் சேருங்கள். முழு API பரப்பு, ஈடுபாட்டுப் பரப்புகள், சிக்கல் தீர்வு ஆகியவை pub.dev தொகுப்புப் பக்கத்தில் உள்ள Flutter SDK தொடக்க வழிகாட்டியில் விளக்கப்பட்டுள்ளன.