To connect to Stringee Server, 3-party authentication is required as described here: Client authentication
For testing, go to Dashboard -> Tools -> Generate Access token and generate an access_token. In production, your server should generate the access_token. See the access token examples.
Initialize StringeeClient, StringeeChat:
import 'dart:async';
import 'package:stringee_plugin/stringee_plugin.dart';
...
final StringeeClient client = StringeeClient();
final StringeeChat chat = StringeeChat(client);
StreamSubscription? clientSubscription;
StreamSubscription? chatSubscription;
Register the client's events in your State
// Listen for the StringeeClient event
clientSubscription = client.eventStreamController.stream.listen((event) {
Map<dynamic, dynamic> map = event;
switch (map['eventType']) {
case StringeeClientEvents.didConnect:
handleDidConnectEvent();
break;
case StringeeClientEvents.didDisconnect:
handleDidDisconnectEvent();
break;
case StringeeClientEvents.didFailWithError:
int code = map['body']['code'];
String msg = map['body']['message'];
handleDidFailWithErrorEvent(code,msg);
break;
case StringeeClientEvents.requestAccessToken:
handleRequestAccessTokenEvent();
break;
case StringeeClientEvents.didReceiveCustomMessage:
handleDidReceiveCustomMessageEvent(map['body']);
break;
case StringeeClientEvents.userBeginTyping:
handleUserBeginTypingEvent(map['body']);
break;
case StringeeClientEvents.userEndTyping:
handleUserEndTypingEvent(map['body']);
break;
default:
break;
}
});
...
chatSubscription = chat.eventStreamController.stream.listen((event) {
Map<dynamic, dynamic> map = event;
if (map['eventType'] == StringeeChatEvents.didReceiveObjectChange) {
handleDidReceiveObjectChangeEvent(map['body']);
}
});
...
/// Invoked when the StringeeClient is connected
void handleDidConnectEvent() {}
/// Invoked when the StringeeClient is disconnected
void handleDidDisconnectEvent() {}
/// Invoked when the StringeeClient connection fails
void handleDidFailWithErrorEvent(int code, String message) {}
/// Invoked when your token is expired
void handleRequestAccessTokenEvent() {}
/// Invoked when get Custom message
void handleDidReceiveCustomMessageEvent(Map<dynamic, dynamic> map) {}
/// Invoked when a user sends a begin typing event
void handleUserBeginTypingEvent(Map<dynamic, dynamic> map) {}
/// Invoked when a user sends an end typing event
void handleUserEndTypingEvent(Map<dynamic, dynamic> map) {}
/// Invoked when a chat change event is received
void handleDidReceiveObjectChangeEvent(StringeeObjectChange stringeeObjectChange) {}
Connect
String token = 'PUT YOUR TOKEN HERE';
client.connect(token);
Before connecting as a different authenticated user, call disconnect() on the StringeeClient object and clearDb() on the StringeeChat object:
await client.disconnect();
await chat.clearDb();
client.connect(newUserToken);