• UIKit
  • SDK
  • 服务端 API
Chat/
SDK/
Android/
消息/
SDK
  • 集成 SDK
  • 初始化
  • 登录登出
  • 消息
    • 介绍
    • 发送消息
    • 接收消息
    • 历史消息
    • 转发消息
    • 消息变更
    • 插入消息
    • 删除消息
    • 清空消息
    • 撤回消息
    • 在线消息
    • 已读回执
    • 查询消息
    • 群 @ 消息
    • 群定向消息
    • 消息免打套
    • 消息扩展
    • 消息回应
    • 消息翻译
    • 消息置顶
  • 会话
    • 介绍
    • 会话列表
    • 获取会话
    • 会话未读数
    • 置顶会话
    • 删除会话
    • 会话草稿
    • 会话标记
    • 会话分组
  • 群组
    • 介绍
    • 管理群组
    • 群资料
    • 管理群成员
    • 群成员资料
    • 自定义属性
    • 群计数器
  • 社群话题
    • 管理社群
    • 权限组
  • 用户
    • 用户资料
    • 用户状态
    • 管理好友
    • 好友分组
    • 黑名单
    • 关注与粉丝
  • 本地搜索
    • 搜索消息
    • 搜索好友
    • 搜索群组
    • 搜索群成员
  • 信令
  • 客户端 API
    • Java
  • 开发指引
  • 控制台指南
    • 创建和升级应用
    • 基本配置
    • 功能配置
    • 账号管理
    • 群组管理
    • 回调配置
  • 产品介绍
    • 消息管理
      • 单聊消息
      • 消息存储
      • 离线推送
      • 群消息
      • 消息格式
    • 账号系统
      • 登陆验证
      • 在线状态管理
    • 群相关
      • 群组系统
      • 群组管理
    • 用户资料和关系链
      • 资料管理
      • 关系链管理
  • 购买指南
    • 计费概述
    • 价格中心
  • 错误码

消息置顶

功能描述

消息置顶功能是指在即时通讯 App 上,将特定消息固定在列表顶部的功能,即使有新的消息进来,它也会保持在顶部。这个功能可以帮助用户更容易地找到并访问他们认为重要或频繁查看的消息。
说明:
消息置顶功能在增强版 SDK 7.9 及以上版本支持。
该功能仅对进阶版客户开放,购买进阶版 后可使用。
目前消息置顶功能仅支持普通群。

效果展示

您可以使用本功能实现如下的群聊消息置顶效果:




消息置顶/取消置顶

调用PinGroupMessage (Android / iOS & Mac / Windows) 接口可以设置消息置顶。
消息置顶接口入参详解如下:
属性
含义
说明
groupID
群ID
置顶/取消置顶的群聊ID
message
消息对象
消息必须是发送成功的状态。
isPinned
置顶/取消置顶
设置群消息是否置顶。
说明
1. 群聊最多支持 10 条 置顶消息。
2. 如果置顶消息数量超过最大限制,调用接口会报 ERR_SVR_GROUP_PINNED_MESSAGE_COUNT_LIMIT 错误。
示例代码如下:
Android
iOS & Mac
Windows
V2TIMManager.getMessageManager().pinGroupMessage(groupID, message, true, new V2TIMCallback() {
@Override
public void onSuccess() {
// 消息置顶成功
}
@Override
public void onError(int code, String desc) {
// 消息置顶失败
}
});
[[V2TIMManager sharedInstance] pinGroupMessage:self.groupID message:message isPinned:YES succ:^{
// 消息置顶成功
} fail:^(int code, NSString *desc) {
// 消息置顶失败
}];
class Callback final : public V2TIMCallback {
public:
using SuccessCallback = std::function<void()>;
using ErrorCallback = std::function<void(int, const V2TIMString &)>;
Callback() = default;
~Callback() override = default;
void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}
void OnSuccess() override {
if (success_callback_) {
success_callback_();
}
}
void OnError(int error_code, const V2TIMString &error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}
private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

auto *callback = new Callback{};
callback->SetCallback(
[=]() {
// 消息置顶成功
delete callback;
},
[=](int error_code, const V2TIMString &error_message) {
// 消息置顶失败
delete callback;
});
V2TIMManager::GetInstance()->GetMessageManager()->PinGroupMessage(groupID, message, true, callback);

获取已置顶的消息列表

调用GetPinnedGroupMessageList(Android / iOS & Mac / Windows) 接口可以获取置顶消息列表。
如果需要获取消息置顶者,可以通过 V2TIMMessage 的 pinnerInfo 字段获取消息置顶者。
消息置顶接口入参详解如下:
属性
含义
说明
groupID
群ID
需要获取置顶消息列表的群聊ID
说明
此接口用于获取置顶消息列表,如果置顶消息漫游已过期(体验版7天过期,旗舰版30天过期)不会返回。
示例代码如下:
Android
iOS & Mac
Windows
V2TIMManager.getMessageManager().getPinnedGroupMessageList(groupID, new V2TIMValueCallback<List<V2TIMMessage>>() {
@Override
public void onSuccess(List<V2TIMMessage> v2TIMMessages) {
// 获取置顶消息列表成功
}
@Override
public void onError(int code, String desc) {
// 获取置顶消息列表失败
}
});
[[V2TIMManager sharedInstance] getPinnedGroupMessageList:self.groupID succ:^(NSArray<V2TIMMessage *> *messageList) {
// 获取置顶消息列表成功
} fail:^(int code, NSString *desc) {
// 获取置顶消息列表失败
}];

template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

ValueCallback() = default;
~ValueCallback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

auto callback = new ValueCallback<V2TIMMessageVector>{};
callback->SetCallback(
[=](const V2TIMMessageVector& messageVector) {
// 获取置顶消息列表成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 获取置顶消息列表失败
delete callback;
});

V2TIMManager::GetInstance()->GetMessageManager()->GetPinnedGroupMessageList(groupID, callback);

置顶消息列表变更通知

如果您事先调用addAdvancedMsgListener添加了高级消息事件监听器,当置顶消息列表发生了更新,您会收onGroupMessagePinned
(Android / iOS & Mac/ Windows) 回调。
说明
如果变更类型为取消置顶,message 参数中只有消息发送者、序列号、随机数及时间戳为有效字段,不包含完整的消息体。
示例代码如下:
Android
iOS & Mac
Windows
V2TIMManager.getMessageManager().addAdvancedMsgListener(new V2TIMAdvancedMsgListener() {
@Override
public void onGroupMessagePinned(String groupID, V2TIMMessage message, boolean isPinned, V2TIMGroupMemberInfo opUser) {
// 收到置顶消息列表变更的通知
}
});
[[V2TIMManager sharedInstance] addAdvancedMsgListener:self];
- (void)onGroupMessagePinned:(NSString *)groupID message:(V2TIMMessage *)message isPinned:(BOOL)isPinned opUser:(V2TIMGroupMemberInfo *)opUser {
// 收到置顶消息列表变更的通知
}
V2TIMManager::GetInstance()->GetMessageManager()->AddAdvancedMsgListener(this);
void OnGroupMessagePinned(const V2TIMString &groupID, const V2TIMMessage &message,
bool isPinned, const V2TIMGroupMemberInfo &opUser) override {
// 收到置顶消息列表变更的通知
}