Chat Api Client
Thông qua đối tượng PSChatApiClient
, chúng ta có thể làm việc với các Chat API.
class PSChatApiClientOptions {
final String appId;
final PSFetchToken fetchToken;
PSChatApiClientOptions({
required this.appId,
required this.fetchToken,
});
}
Tên | Mô tả | Bắt buộc |
---|---|---|
appId | Tham số AppId | ✓ |
fetchToken | Tham số gọi lại để lấy PiScale Token. Đây là 1 function sẽ được gọi khi chưa có token hoặc mỗi khi token hết hạn | ✓ |
Bạn cần định nghĩa cách lấy PiScale Token trong hàm fetchToken
. Luồng làm việc thông thường sẽ như sau:
- Khi chưa có
PiScale Token
hoặc mỗi khiPiScale Token
hết hạn,PiScale Chat SDK
sẽ chủ động gọi đến hàmfetchToken
để nhận được token mới. - Function
fetchToken
sẽ thực hiện gọi đến api ở BE của bạn để yêu cầuPiScale Token
mới. - Api ở BE của bạn sẽ thực hiện gọi đến Api Token của PiScale để lấy
PiScale Token
, sau đó trả về kết quả. - Hàm
fetchToken
nhận đượcPiScale Token
trả về choPiScale Chat SDK
, từ đâyPiScale Chat SDK
có thể thực hiện các hành động khác.
Chú ý
Quá trình đồng bộ User giữa BE của bạn là PiScale là bất đồng bộ nên ở bước 3 có thể không nhận được PiScale Token
do đó cần phải triển khai chức năng thử lại ở hàm fetchToken
Ví dụ
Dưới đây là ví dụ việc triển khai hàm fetchToken
ở client.
Future<String> fetchToken() async {
try {
final response = await authApi.fetchPSToken();
final token = response.data?.token;
if (token != null && token.isNotEmpty) {
return token;
} else {
throw Exception('Invalid Token');
}
} catch (e) {
await Future.delayed(const Duration(seconds: 1));
final isLoggedIn = await AuthCache.instance.isLoggedIn();
if (!isLoggedIn) {
return "";
}
final token = await AuthCache.instance.getAccessToken();
if (token != null && token.isNotEmpty) {
return await fetchToken();
}
}
return "";
}