管理会话未读数
功能简介
通过 ZIM,您可以获取单个会话的消息未读数,计算所有会话消息未读数的总和,并支持清除上述数值。
获取单个会话消息未读数
ZIM 支持主动或被动获取某个会话的未读数。
主动获取
如需主动获取某个会话的未读数,请先调用 queryConversationList 或 queryConversation 获取到目标会话对象,即可从目标会话对象的 unreadMessageCount 属性了解该会话的消息未读数。
被动获取
请监听 onConversationChanged 回调,获取会话的 unreadMessageCount 属性,了解会话的最新消息未读数,详情请参考 获取会话列表 - 监听会话变更。
获取消息未读总数
用户登录后,可以查询自己当前有多少未读消息。开发者可以通过 监听的 onConversationTotalUnreadMessageCountUpdated 回调接口,获取消息的未读总数。
用户登录成功后,以下情况出现时,均会通过该接口,获取消息未读总数更新的通知:
- 用户接收到新消息、且当前会话没有开启消息免打扰。
- 用户主动清理了会话未读数量,具体请参考 清除会话消息未读数。
开发者可以通过此回调通知,调整自己应用的 UI 展示,用于提醒用户当前有多少条消息未读。
// 注册 SDK 事件通知监听
zim.setEventHandler(this);
...
// 接收消息未读总数的回调通知
public void onConversationTotalUnreadMessageCountUpdated(ZIM zim, int totalUnreadMessageCount) {
// 获取会话总未读数用于 UI 展示
// ......
}
1
// 注册 SDK 事件通知监听
[self.zim setEventHandler:self];
...
// 接收消息未读总数的回调通知
- (void)zim:(ZIM *)zim conversationTotalUnreadMessageCountUpdated:(unsigned int)totalUnreadMessageCount {
// 获取会话总未读数用于 UI 展示
// ......
}
1
// 注册 SDK 事件通知监听
zim->setEventHandler(shared_from_this());
...
// 接收消息未读总数的回调通知
virtual void onConversationTotalUnreadMessageCountUpdated(ZIM * zim, unsigned int totalUnreadMessageCount) {
// 获取会话总未读数用于 UI 展示
// ......
}
1
zim.on('conversationTotalUnreadMessageCountUpdated', function(zim, { totalUnreadMessageCount }){
// 获取会话总未读数用于 UI 展示
})
1
// 接收消息未读总数的回调通知
ZIMEventHandler.onConversationTotalUnreadMessageCountUpdated =
(zim, totalUnreadMessageCount) {
// 获取会话总未读数用于 UI 展示
// ......
};
1
清除单个会话消息未读数
用户登录并成功拉取到会话列表后,可以通过调用 clearConversationUnreadMessageCount 接口,清除某个会话的未读消息数。
由于 SDK 并不知道用户何时应该清除会话未读数,因此开发者需要在用户与某些页面交互时触发调用该接口,以下为常见的调用时机:
- 点击会话,进入了该会话的聊天界面内,需要调用该接口。
- 用户一直处于聊天界面,每次收到消息后,都需要调用该接口。
- 在会话列表界面中,标记某条未读的会话为已读时,需要调用该接口。
zim.clearConversationUnreadMessageCount("CONV_ID", ZIMConversationType.PEER, new ZIMConversationUnreadMessageCountClearedCallback() {
@Override
public void onConversationUnreadMessageCountCleared(ZIMError errorInfo) {
// 获取清除未读数的结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
}
});
1
// 清除指定会话的未读消息数量
[self.zim clearConversationUnreadMessageCount:@"CONV_ID" conversationType: ZIMConversationTypePeer callback:^(ZIMError * _Nonnull errorInfo) {
// 获取清除未读数的结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
}];
1
// 清除指定会话的未读消息数量
zim->clearConversationUnreadMessageCount("CONV_ID", ZIMConversationTypePeer, [=](ZIMError errorInfo) {
// 获取清除未读数的结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
var conversationID = '';
var conversationType = 0;
zim.clearConversationUnreadMessageCount(conversationID, conversationType)
.then(function(res){
// 操作成功
})
.catch(function(err){
// 操作失败
})
1
ZIM
.getInstance()
!.clearConversationUnreadMessageCount(
'conversationID', ZIMConversationType.peer)
.then((value) => {})
.catchError((onError) {});
1
清除全部会话消息未读数
用户登录并成功拉取到会话列表后,可以通过调用 clearConversationTotalUnreadMessageCount 接口,清除全部会话的未读消息数。
当开发者想实现清除全部会话消息未读数和消息未读总数时,可使用该接口。
// 清除全部会话的未读消息数量
zim.clearConversationTotalUnreadMessageCount(new ZIMConversationTotalUnreadMessageCountClearedCallback() {
@Override
public void onConversationTotalUnreadMessageCountCleared(ZIMError errorInfo) {
// 获取清除未读数的结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
}
});
1
// 清除全部会话的未读消息数量
[self.zim clearConversationTotalUnreadMessageCount:callback:^(ZIMError * _Nonnull errorInfo) {
// 获取清除未读数的结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
}];
1
// 清除全部会话的未读消息数量
zim->clearConversationTotalUnreadMessageCount([=](ZIMError errorInfo) {
// 获取清除操作结果
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
// 清除全部会话的未读消息数量
zim.clearConversationTotalUnreadMessageCount()
.then(function(){
// 操作成功
})
.catch(function(err){
// 操作失败
})
1
// 清除全部会话的未读消息数量
ZIM.getInstance()!.clearConversationTotalUnreadMessageCount().
then((value) => {})
.catchError((onError) {});
1