跳到主要内容

处理会话未读消息数

您可以使用 IMLib SDK 提供的接口直接获取会话中的未读消息数。具体能力如下:

  • 获取所有会话(不含聊天室)中的未读消息总数(getTotalUnreadCount
  • 获取指定会话中的总未读消息数,或指定会话中指定消息类型的总未读消息数,或按会话类型获取总未读消息总数(getUnreadCount

在用户使用您的 App 时,UI 上未读计数可能需要发生变化,此时您可以清除会话中的未读数(clearMessagesUnreadStatus)。

获取所有会话总未读消息数

您可以使用 getTotalUnreadCount 获取所有类型会话(不含聊天室)中未读消息的总数。

接口原型

TypeScript
public getTotalUnreadCount(): Promise<IAsyncResult<number>>;

示例代码

TypeScript
    IMEngine.getInstance()
.getTotalUnreadCount()
.then(result => {
if (EngineError.Success !== result.code) {
// 获取未读数失败
return;
}
if (!result.data) {
// 未读数为 null
return;
}
let unreadCount = result.data as number;
})

获取指定会话的总未读消息数

您可以获取指定会话中的未读消息总数。

接口原型

TypeScript
public getUnreadCount(conId: ConversationIdentifier): Promise<IAsyncResult<number>>;

参数说明

参数类型说明
conIdConversationIdentifier会话标识,包含会话类型,会话 id

示例代码

TypeScript
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";

IMEngine.getInstance().getUnreadCount(conId)
.then(result => {
if (EngineError.Success !== result.code) {
// 获取未读数失败
return;
}
if (!result.data) {
// 未读数为 null
return;
}
let unreadCount = result.data as number;
});

按会话类型获取总未读消息数

您可以获取多个指定会话类型的未读数。

接口原型

TypeScript
public getUnreadCountByTypes(typeList: List<ConversationType>, isContainBlocked: boolean): Promise<IAsyncResult<number>>;

参数说明

参数类型说明
typeListList<ConversationType>会话类型数组。
isContainBlockedboolean是否包含免打扰。

示例代码

TypeScript
let conTypeList = new List<ConversationType>();
conTypeList.add(ConversationType.Private);
conTypeList.add(ConversationType.Group);

let isContainBlocked = false;

IMEngine.getInstance().getUnreadCountByTypes(conTypeList, isContainBlocked)
.then(result => {
if (EngineError.Success !== result.code) {
// 获取未读数失败
return;
}
if (!result.data) {
// 未读数为 null
return;
}
let unreadCount = result.data as number;
});

获取多个会话的未读消息数

您可以获取多个指定会话的未读数。

接口原型

TypeScript
public  etTotalUnreadCountByIds(conIds: List<ConversationIdentifier>): Promise<IAsyncResult<number>>;

参数说明

参数类型说明
conIdsList<ConversationIdentifier>会话标识集合。不适用于聊天室、超级群。

示例代码

TypeScript
let conIdList = new List<ConversationIdentifier>();
let conId1 = new ConversationIdentifier();
conId1.conversationType = ConversationType.Private;
conId1.targetId = "会话 id";
conIdList.add(conId1)

let conId2 = new ConversationIdentifier();
conId2.conversationType = ConversationType.Private;
conId2.targetId = "会话 id";
conIdList.add(conId2)


IMEngine.getInstance()
.getTotalUnreadCountByIds(conIdList)
.then(result => {
if (EngineError.Success !== result.code) {
// 获取未读数失败
return;
}
if (!result.data) {
// 未读数为 null
return;
}
let unreadCount = result.data as number;
})

清空指定会话未读数

您可以主动清除指定会话的未读数。IMLib SDK 会将所有消息的未读状态全部清除。

接口原型

TypeScript
public clearMessagesUnreadStatus(conId: ConversationIdentifier): Promise<IAsyncResult<void>>

参数说明

参数类型说明
conIdConversationIdentifier会话标识,含会话类型,会话 id。不适用于聊天室、超级群。

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";


IMEngine.getInstance().clearMessagesUnreadStatus(conId)
.then(result => {
if (EngineError.Success !== result.code) {
// 清空未读数失败
return;
}

})

清除指定会话特定时间之前的未读数

您可以主动清除指定会话特定时间之前的未读数。IMLib SDK 会将所有消息的未读状态全部清除。

接口原型

TypeScript
public clearMessagesUnreadStatusByTime(conId: ConversationIdentifier,
time: number): Promise<IAsyncResult<void>>

参数说明

参数类型说明
conIdConversationIdentifier会话标识,含会话类型,会话 id。不适用于聊天室、超级群。
timenumber时间戳,毫秒。

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";

let time = Date.now();

IMEngine.getInstance().clearMessagesUnreadStatusByTime(conId, time)
.then(result => {
if (EngineError.Success !== result.code) {
// 清空未读数失败
return;
}
})