一、功能描述
注意:说明:
二、效果展示
你可以使用本功能实现如下的群聊消息置顶效果:
三、消息置顶/取消置顶
调用 PinGroupMessage (Java / Swift / Objective-C / C++) 接口可以设置消息置顶。
消息置顶接口入参详解如下:
| 属性 | 含义 | 说明 |
| groupID | 群 ID | 置顶/取消置顶的群聊 ID。 |
| message | 消息对象 | 消息必须是发送成功的状态。 |
| isPinned | 置顶/取消置顶 | 设置群消息是否置顶。 |
注意:说明:
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getMessageManager().pinGroupMessage(groupID, message, true, new V2TIMCallback() { @Override public void onSuccess() { // 消息置顶成功 } @Override public void onError(int code, String desc) { // 消息置顶失败 }});V2TIMManager.shared.pinGroupMessage(groupID: "groupID", message: message, isPinned: true) { print("pinGroupMessage succ")} fail: { code, desc in print("pinGroupMessage fail, \\(code), \\(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(Java / Swift / Objective-C / C++) 接口可以获取置顶消息列表。
如果需要获取消息置顶者,可以通过 V2TIMMessage 的 pinnerInfo 字段获取消息置顶者。
消息置顶接口入参详解如下:
| 属性 | 含义 | 说明 |
| groupID | 群 ID | 需要获取置顶消息列表的群聊 ID。 |
注意:说明:
注意:此接口用于获取置顶消息列表,如果置顶消息漫游已过期(体验版 7 天过期,旗舰版或企业版 30 天过期)不会返回。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getMessageManager().getPinnedGroupMessageList(groupID, new V2TIMValueCallback<List<V2TIMMessage>>() { @Override public void onSuccess(List<V2TIMMessage> v2TIMMessages) { // 获取置顶消息列表成功 } @Override public void onError(int code, String desc) { // 获取置顶消息列表失败 }});V2TIMManager.shared.getPinnedGroupMessageList(groupID: "groupID") { msgs in msgs.forEach { item in print( "\\(item.description)") if let info = item.revokerInfo { print( "exist, id:\\(info.userID)") } else { print("not exist") } }} fail: { code, desc in print("getGroupCounters fail, \\(code), \\(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(Java / Swift / Objective-C/ C++) 回调。
注意:说明:
注意:如果变更类型为取消置顶,message 参数中只有消息发送者、序列号、随机数及时间戳为有效字段,不包含完整的消息体。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getMessageManager().addAdvancedMsgListener(new V2TIMAdvancedMsgListener() { @Override public void onGroupMessagePinned(String groupID, V2TIMMessage message, boolean isPinned, V2TIMGroupMemberInfo opUser) { // 收到置顶消息列表变更的通知 }});V2TIMManager.shared.addAdvancedMsgListener(listener: self)func onGroupMessagePinned(groupID: String, message: V2TIMMessage, isPinned: Bool, opUser: V2TIMGroupMemberInfo) { // 收到置顶消息列表变更的通知}[[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 { // 收到置顶消息列表变更的通知}