更新时间: 2021-03-08
# 设置状态监听
当 SDK 与融云服务器的连接状态发生变化时,开发者可通过下面方法进行处理。
实现此功能需要开发者监听 onConnectionStatusChange
回调。
# 参数说明
参数 | 类型 | 说明 |
---|---|---|
status | RCConnectionStatus | SDK 与融云服务器的连接状态 |
# 代码示例
RongIMClient.onConnectionStatusChange = (int connectionStatus) { if (RCConnectionStatus.KickedByOtherClient == connectionStatus || RCConnectionStatus.TokenIncorrect == connectionStatus || RCConnectionStatus.UserBlocked == connectionStatus) { String toast = "连接状态变化 $connectionStatus, 请退出后重新登录"; DialogUtil.showAlertDiaLog(context, toast, confirmButton: FlatButton( onPressed: () async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.remove("token"); Navigator.of(context).pushAndRemoveUntil( new MaterialPageRoute( builder: (context) => new LoginPage()), (route) => route == null); }, child: Text("重新登录"))); } else if (RCConnectionStatus.Connected == connectionStatus) { updateConversationList(); } };
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 设置消息监听
当 SDK 在接收到消息时,开发者可通过下面方法进行处理。 SDK 会通过此方法接收包含单聊、群聊、聊天室、系统类型的所有消息,开发者只需全局设置一次即可,多次设置会导致其他代理失效。 实现此功能需要开发者实现消息监听回调。
# 参数说明
参数说明:
参数 | 类型 | 说明 |
---|---|---|
message | Message | 当前接收到的消息 |
left | int | 还剩余的未接收的消息数 |
offline | BOOL | 是否是离线消息 |
hasPackage | BOOL | SDK 拉取服务器的消息以包( package )的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK 拉取 |
# 代码示例
如果离线消息量不大,可以使用下面这个回调;
//消息接收回调 RongIMClient.onMessageReceived = (Message msg,int left) { print("receive message messsageId:"+msg.messageId.toString()+" left:"+left.toString()); };
已复制
1
2
3
4
2
3
4
下面这个回调是 SDK 分批拉取离线消息,当离线消息量巨大的时候,建议当 left == 0 且 hasPackage == false 时刷新会话列表:
//消息接收回调 RongIMClient.onMessageReceivedWrapper = (Message msg, int left, bool hasPackage, bool offline) { print("receive message messsageId:"+msg.messageId.toString()+" left:"+left.toString()); };
已复制
1
2
3
4
2
3
4
注:两个消息接收监听只能按需实现一个,如果两个都实现,可能会出现重复收到消息的情况