删除消息
功能描述
删除消息分为两种:删除本地消息和删除云端消息。
删除云端消息会在删除本地消息的基础上,同步删除云端存储的消息,且无法恢复。
如果删除的是最后一条消息,会话的
lastMessage
会变为前一条消息。如果您的 SDK 版本是 5.5.892 之前,使用了
lastMesasge
进行排序,此时会影响您的会话列表顺序。如果你的 SDK 版本是 5.5.892 及以后,并且采用了
orderKey
进行排序,此时不影响您的会话列表顺序。删除本地消息
说明
1. 该接口只能删除本地历史。消息删除后,SDK 会在本地把这条消息标记为已删除状态,调用
getHistoryMessage
不能拉取到。2. 如果程序卸载重装,本地会失去对这条消息的删除标记,调用
getHistoryMessage
能拉取到该条消息。示例代码如下:
// selectedMsg 为用户选中待删除的消息V2TIMManager.getMessageManager().deleteMessageFromLocalStorage(selectedMsg, new V2TIMCallback() {@Overridepublic void onSuccess() {// 删除本地消息成功}@Overridepublic void onError(int code, String desc) {// 删除本地消息失败}});
// selectedMsg 为用户选中待删除的消息[[V2TIMManager sharedInstance] deleteMessageFromLocalStorage:selectedMessagesucc:^{NSLog(@"删除本地消息成功");} fail:^(int code, NSString *msg) {NSLog(@"删除本地消息失败, code: %d, desc: %@", code, msg);}];
删除云端存储的消息
该接口会在删除本地消息的基础上,同步删除云端存储的消息,且无法恢复。
说明
1. 每次调用,最多只能删除 50 条消息。
2. 每次调用,待删除的消息必须属于同一会话。
3. 接口限频:1 秒钟最多只能调用 1 次该接口。
4. 如果一个账号在某设备上拉取过这些消息,那么调用该接口删除云端消息后,这些消息仍然会保存在该设备上,即删除消息不支持多端同步。
示例代码如下:
// selectedMessageList 为用户选中待删除的消息列表V2TIMManager.getMessageManager().deleteMessages(selectedMessageList, new V2TIMCallback() {@Overridepublic void onSuccess() {// 删除云端消息成功}@Overridepublic void onError(int code, String desc) {// 删除云端消息失败}});
// selectedMessageList 为用户选中待删除的消息列表NSArray *selectedMessageList = @[selectedMessage1, selectedMessage2];[[V2TIMManager sharedInstance] deleteMessages:selectedMessageListsucc:^{NSLog(@"删除云端消息成功");} fail:^(int code, NSString *desc) {NSLog(@"删除云端消息失败, code: %d, desc: %@", code, 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_;};V2TIMMessageVector messageList = 用户选中待删除的消息列表;auto callback = new Callback;callback->SetCallback([=]() {// 删除云端消息成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 删除云端消息失败delete callback;});V2TIMManager::GetInstance()->GetMessageManager()->DeleteMessages(messageList, callback);