设置会话免打扰
即时通讯服务支持会话免打扰设置。IMKit SDK 可根据会话标识设置消息提醒状态为「免打扰」。设置后如果客户端在后台运行时,会话中有新的消息,将不会进行通知提醒,可以收到消息内容。如果客户端为离线状态,将不会收到远程通知提醒。
会话的免打扰状态将会被同步到服务端。融云会为用户自动在设备间同步会话免打扰状态数据。客户端可以通过监听器获取同步通知,也可以主动获取最新数据。
PushNotificationLevel
的定义:
状态名称 | 状态值 | 说明 |
---|---|---|
All | -1 | 全部消息通知。注意:超级群设置全部消息通知时:1. @ 消息一定收到推送通知;2. 普通消息的推送频率受到服务端默认推送频率设置的影响,无法做到所有普通消息都通知。 |
Default | 0 | 未设置(向上查询群或者APP级别设置),存量数据中0表示未设置 |
Mention | 1 | 群聊和超级群 @所有人 + @自己 时通知;单聊代表消息不通知 |
MentionUsers | 2 | 群聊和超级群 @自己 时通知,其它情况不通知;单聊代表消 息不通知 |
MentionAll | 4 | 群聊和超级群 @所有人 时通知,其他情况都不通知;单聊代表消息不通知 |
Blocked | 5 | 消息通知被屏蔽,不接收任何消息通知 |
设置会话的免打扰状态
RongIM
类提供 setConversationsNotificationLevel
方法,可根据会话标识列表批量设置消息提醒状态为「免打扰」。设置成功后,客户端在后台运行时或处于用户离线状态时,均不会收到该会话的新消息通知。在会话列表页该会话的右下角将展示一个灰色小铃铛图标。
let conIdList = new List<ConversationIdentifier>();
let conId = new ConversationIdentifier()
conId.conversationType = ConversationType.Private
conId.targetId = "targetId"
conIdList.add(conId)
RongIM.getInstance().conversationService().setConversationsNotificationLevel(conIdList, PushNotificationLevel.Blocked);
监听会话的免打扰状态同步
即时通讯业务支持会话状态(置顶状态数据和免 打扰状态数据)同步机制。设置会话状态同步监听器后,如果会话状态改变,可在本端收到通知。
当会话的置顶和免打扰状态数据同步后,SDK 会触发 ConversationListEventListener
的 onSyncConversationStatus
方法; 如果是本端操作,则会触发 onConversationNotificationLevelChange
方法。
export interface ConversationListEventListener {
/**
* 当其他端修改会话的免打扰和置顶状态时
*/
onSyncConversationStatus?: (items: List<ConversationStatusInfo>) => void;
/**
* 当本端修改会话的免打扰状态时
*/
onConversationNotificationLevelChange?: (identifierList: List<ConversationIdentifier>, level: PushNotificationLevel) => void;
}
使用 RongIM
的 addConversationListEventListener
与 removeConversationListEventListener
方法添加或移除监听器。
let conversationListEventListener : ConversationListEventListener = {
onSyncConversationStatus: (items: List<ConversationStatusInfo>) => {
//其他端同步会话置顶和免打扰状态
for (let itemElement of items) {
// 根据 itemElement.level 判断 PushNotificationLevel 具体类型
}
},
onConversationNotificationLevelChange:(items: List<ConversationIdentifier>, level: PushNotificationLevel) => {
//本端同步会话置顶和免打扰状态
for (let itemElement of items) {
// 根据 level 判断 PushNotificationLevel 具体类型
}
}
}
// 设置监听
RongIM.getInstance().conversationListService().addConversationListEventListener(conversationListEventListener)
获取会话的免打扰状态
RongIM
类提供 getConversationNotificationLevel
方法,可根据会话标识列表获取消息提醒状态。
let conId = new ConversationIdentifier()
conId.conversationType = ConversationType.Private
conId.targetId = "targetId"
let service = RongIM.getInstance().conversationService()
service.getConversationNotificationLevel(this.conId)
.then((value: IAsyncResult<PushNotificationLevel>) => {
if (value.code === EngineError.Success) {
let level = value.data as PushNotificationLevel
// 根据 level 判断 PushNotificationLevel 具体类型
}
})