EVENT

接入侧需要监听处理的事件列表,详细如下:

Members

(static) SDK_READY

SDK 进入 ready 状态时触发,接入侧监听此事件,然后可调用 SDK 发送消息等API,使用 SDK 的各项功能

注意:login 成功才会驱动 SDK 触发 SDK_READY 事件

Example
let onSdkReady = function(event) {
  let message = tim.createTextMessage({ to: 'user1', conversationType: 'C2C', payload: { text: 'Hello world!' }});
  tim.sendMessage(message);
};
tim.on(TIM.EVENT.SDK_READY, onSdkReady);

(static) SDK_NOT_READY

SDK 进入 not ready 状态时触发,此时接入侧将无法使用 SDK 发送消息等功能。
如果想恢复使用,接入侧需调用 login 接口,驱动 SDK 进入 ready 状态

注意:同一账号多端互踢场景下,避免在SDK_NOT_READY中调用tim.login,可能会造成循环互踢的情况。

Example
let onSdkNotReady = function(event) {
  // 如果想使用发送消息等功能,接入侧需驱动 SDK 进入 ready 状态,重新调用 login 接口即可,如下所示:
  // tim.login({userID: 'your userID', userSig: 'your userSig'});
};
tim.on(TIM.EVENT.SDK_NOT_READY, onSdkNotReady);

(static) MESSAGE_RECEIVED

SDK 收到推送的单聊、群聊、群提示、群系统通知的新消息,可通过遍历 event.data 获取消息列表数据并渲染到页面

Example
let onMessageReceived = function(event) {
  // event.data - 存储 Message 对象的数组 - [Message]
};
tim.on(TIM.EVENT.MESSAGE_RECEIVED, onMessageReceived);

(static) MESSAGE_MODIFIED

SDK 收到消息被第三方回调修改的通知,消息发送方可通过遍历 event.data 获取消息列表数据并更新页面上同 ID 消息的内容。
使用举例:
1、单聊用户或群成员发送了一个【Hello World】的消息并上屏,然后 SDK 收到了此消息被第三方回调修改的通知(例如被修改成了【Hello China】,对端或者其他群成员收到的是【Hello China】),此时 SDK 会触发此事件。
2、接入侧在事件回调里,遍历被修改的消息,替换页面上同 ID 消息的内容,将【Hello World】替换为【Hello China】,并重新渲染和展示。

注意:使用前需要将 SDK 版本升级至v2.12.1或以上。

Example
let onMessageModified = function(event) {
  // event.data - 存储被第三方回调修改过的 Message 对象的数组 - [Message]
};
tim.on(TIM.EVENT.MESSAGE_MODIFIED, onMessageModified);

(static) MESSAGE_REVOKED

SDK 收到消息被撤回的通知,可通过遍历 event.data 获取被撤回的消息列表数据并渲染到页面,如单聊会话内可展示为 "对方撤回了一条消息";群聊会话内可展示为 "XXX撤回了一条消息"。

注意:使用前需要将SDK版本升级至v2.4.0或以上。

Example
let onMessageRevoked = function(event) {
  // event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isRevoked 属性值为 true
};
tim.on(TIM.EVENT.MESSAGE_REVOKED, onMessageRevoked);

(static) MESSAGE_READ_BY_PEER

SDK 收到对端已读消息的通知,即已读回执。可通过遍历 event.data 获取对端已读的消息列表数据并渲染到页面,如单聊会话内可将己方发送的消息由“未读”状态改为“已读”。

注意:使用前需要将SDK版本升级至v2.7.0或以上。仅支持单聊会话。

Example
let onMessageReadByPeer = function(event) {
  // event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isPeerRead 属性值为 true
};
tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, onMessageReadByPeer);

(static) CONVERSATION_LIST_UPDATED

会话列表更新,event.data 是包含 Conversation 对象的数组

Example
let onConversationListUpdated = function(event) {
  console.log(event.data); // 包含 Conversation 实例的数组
};
tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, onConversationListUpdated);

(static) GROUP_LIST_UPDATED

SDK 群组列表更新时触发,可通过遍历 event.data 获取群组列表数据并渲染到页面

Example
let onGroupListUpdated = function(event) {
   console.log(event.data);// 包含 Group 实例的数组
};
tim.on(TIM.EVENT.GROUP_LIST_UPDATED, onGroupListUpdated);

(static) PROFILE_UPDATED

自己或好友的资料发生变更时触发,event.data 是包含 Profile 对象的数组

Example
let onProfileUpdated = function(event) {
  console.log(event.data); // 包含 Profile 对象的数组
};
tim.on(TIM.EVENT.PROFILE_UPDATED, onProfileUpdated);

(static) BLACKLIST_UPDATED

SDK 黑名单列表更新时触发

Example
let onBlacklistUpdated = function(event) {
  console.log(event.data); // 我的黑名单列表,结构为包含用户 userID 的数组
};
tim.on(TIM.EVENT.BLACKLIST_UPDATED, onBlacklistUpdated);

(static) FRIEND_LIST_UPDATED

好友列表更新时触发

Example
let onFriendListUpdated = function(event) {
  console.log(event.data);
}
tim.on(TIM.EVENT.FRIEND_LIST_UPDATED, onFriendListUpdated);

(static) FRIEND_GROUP_LIST_UPDATED

好友分组列表更新时触发

Example
let onFriendGroupListUpdated = function(event) {
  console.log(event.data);
}
tim.on(TIM.EVENT.FRIEND_LIST_UPDATED, onFriendGroupListUpdated);

(static) FRIEND_APPLICATION_LIST_UPDATED

SDK 好友申请列表更新时触发

Example
let onFriendApplicationListUpdated = function(event) {
  // friendApplicationList - 好友申请列表 - [FriendApplication]
  // unreadCount - 好友申请的未读数
  const { friendApplicationList, unreadCount } = event.data;
  // 发送给我的好友申请(即别人申请加我为好友)
  const applicationSentToMe = friendApplicationList.filter((friendApplication) => friendApplication.type === TIM.TYPES.SNS_APPLICATION_SENT_TO_ME);
  // 我发送出去的好友申请(即我申请加别人为好友)
  const applicationSentByMe = friendApplicationList.filter((friendApplication) => friendApplication.type === TIM.TYPES.SNS_APPLICATION_SENT_BY_ME);
};
tim.on(TIM.EVENT.FRIEND_APPLICATION_LIST_UPDATED, onFriendApplicationListUpdated);

(static) KICKED_OUT

用户被踢下线时触发

Example
let onKickedOut = function(event) {
  console.log(event.data.type);
  // TIM.TYPES.KICKED_OUT_MULT_ACCOUNT(Web端,同一账号,多页面登录被踢)
  // TIM.TYPES.KICKED_OUT_MULT_DEVICE(同一账号,多端登录被踢)
  // TIM.TYPES.KICKED_OUT_USERSIG_EXPIRED(签名过期。使用前需要将SDK版本升级至v2.4.0或以上)
};
tim.on(TIM.EVENT.KICKED_OUT, onKickedOut);

(static) ERROR

SDK 遇到错误时触发

Example
let onError = function(event) {
  // event.data.code - 错误码
  // event.data.message - 错误信息
};
tim.on(TIM.EVENT.ERROR, onError);

(static) NET_STATE_CHANGE

网络状态发生改变

Example
let onNetStateChange = function(event) {
  // v2.5.0 起支持
  // event.data.state 当前网络状态,枚举值及说明如下:
  // TIM.TYPES.NET_STATE_CONNECTED - 已接入网络
  // TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动,SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
  // TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试,若用户网络恢复,SDK 会自动同步消息
};
tim.on(TIM.EVENT.NET_STATE_CHANGE, onNetStateChange);

(static) SDK_RELOAD

长时间断网后重新接入网络或者小程序长时间切后台又切回前台,SDK 为了和 IM 服务器进行状态及消息同步,需要重载,此时 SDK 会自动登录。如果重载前加入了直播群(AVChatRoom),重载成功后 SDK 会重新加入直播群。
一般情况下接入侧不需要监听处理此事件,当接入侧想要拉回断网或者小程序切后台期间的消息时,可以监听处理此事件,并使用 getMessageList 接口主动拉取历史消息。

Example
// v2.7.7 起支持
let onSDKReload = function(event) {
};
tim.on(TIM.EVENT.SDK_RELOAD, onSDKReload);