Skip to main content

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ênMô tảBắt buộc
appIdTham số AppId
fetchTokenTham 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:

luồng lấy PiScale Token mới mỗi khi token hết hạn

  1. Khi chưa có PiScale Token hoặc mỗi khi PiScale Token hết hạn, PiScale Chat SDK sẽ chủ động gọi đến hàm fetchToken để nhận được token mới.
  2. Function fetchToken sẽ thực hiện gọi đến api ở BE của bạn để yêu cầu PiScale Token mới.
  3. 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ả.
  4. Hàm fetchToken nhận được PiScale Token trả về cho PiScale Chat SDK, từ đây PiScale 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 "";
}