MsgDelete
introduction
Delete message
Both local messages and cloud messages can be deleted.
When cloud messages are deleted, such messages will be deleted both locally and from the cloud and cannot be recovered.
If the last message is deleted, the lastMessage in the conversation will become the last but one message.
Deleting a local message:
After a historical local message is deleted, the message will be marked as deleted locally by the SDK and can no longer be pulled through MsgGetMsgList.
If the application is uninstalled and reinstalled, the deletion marker will be lost locally, and the message can still be pulled through MsgGetMsgList.
Deleting a message from the cloud:
This API deletes messages both locally and from the cloud, which cannot be recovered.
Up to 30 messages can be deleted per call.
Messages to be deleted per call must be from the same conversation.
This API can be called only once per second.
If messages have been pulled on a device by an account, they will remain on the device after the API is called to delete them from the cloud; in other words, deleted messages are not synced.
Parameter details
overload1
Parameter name | Parameter type | Required | Description |
---|---|---|---|
conv_id | string | Required | Conversation ID |
conv_type | TIMConvType | Required | Conversation type |
message_delete_param | MsgDeleteParam | Required | Message deletion param |
callback | NullValueCallback | Required | Asynchronous callback |
overload2
Parameter name | Parameter type | Required | Description |
---|---|---|---|
conv_id | string | Required | Conversation ID |
conv_type | TIMConvType | Required | Conversation type |
message_delete_param | MsgDeleteParam | Required | Message deletion param |
callback | ValueCallback< string > | Required | Asynchronous callback The format of json_param in the return value is string |
Returned template
TIMResult
The parameters of the callback function after successfully calling the API:
code:int
desc:string
json_param:'' // json_ Params is an empty string ""
user_data:string
Return value details
name | type | description |
---|---|---|
TIMResult | TIMResult | Return value of calling API |
code | int | Result error code: Error Codes |
desc | string | The description of the error. |
json_param | string | Json string. Calling different API will get different Json strings. |
user_data | string | User-defined data transfered by ImSDK without any processing |
Code example
using UnityEngine;
using UnityEngine.UI;
using com.tencent.im.unity.demo.types;
using com.tencent.imsdk.unity;
using com.tencent.imsdk.unity.types;
using com.tencent.imsdk.unity.enums;
using System;
using com.tencent.im.unity.demo.utils;
using EasyUI.Toast;
using System.Collections;
using System.Collections.Generic;
public class MsgDelete : MonoBehaviour
{
public Text Header;
public Dropdown SelectedConv;
public Dropdown SelectedMsg;
public Text Result;
public Button Submit;
public Button Copy;
public Toggle PinToggle;
private List<ConvInfo> ConvList;
private List<Message> MsgList;
void Start()
{
GameObject.Find("SelectConvLabel").GetComponent<Text>().text = Utils.t("SelectConvLabel");
GameObject.Find("SelectMsgLabel").GetComponent<Text>().text = Utils.t("SelectMsgLabel");
ConvGetConvListSDK();
Header = GameObject.Find("HeaderText").GetComponent<Text>();
SelectedConv = GameObject.Find("Dropdown").GetComponent<Dropdown>();
SelectedMsg = GameObject.Find("MsgDropdown").GetComponent<Dropdown>();
Result = GameObject.Find("ResultText").GetComponent<Text>();
Submit = GameObject.Find("Submit").GetComponent<Button>();
Copy = GameObject.Find("Copy").GetComponent<Button>();
Copy.GetComponentInChildren<Text>().text = Utils.t("Copy");
Submit.onClick.AddListener(MsgDeleteSDK);
Copy.onClick.AddListener(CopyText);
SelectedConv.interactable = true;
SelectedConv.onValueChanged.AddListener(delegate
{
GroupDropdownValueChanged(SelectedConv);
});
if (CurrentSceneInfo.info != null)
{
Header.text = Utils.IsCn() ? CurrentSceneInfo.info.apiText + " " + CurrentSceneInfo.info.apiName : CurrentSceneInfo.info.apiName;
Submit.GetComponentInChildren<Text>().text = CurrentSceneInfo.info.apiName;
}
}
void GroupDropdownValueChanged(Dropdown change)
{
SelectedMsg.captionText.text = "";
SelectedMsg.ClearOptions();
SelectedMsg.value = 0;
MsgList = new List<Message>();
if (ConvList.Count > 0)
{
string conv_id = ConvList[change.value].conv_id;
TIMConvType conv_type = ConvList[change.value].conv_type;
MsgGetMsgListSDK(conv_id, conv_type);
}
}
void GetConvList(params object[] parameters)
{
try
{
ConvList = new List<ConvInfo>();
SelectedConv.ClearOptions();
string text = (string)parameters[1];
List<ConvInfo> List = Utils.FromJson<List<ConvInfo>>(text);
foreach (ConvInfo item in List)
{
print(item.conv_id);
ConvList.Add(item);
Dropdown.OptionData option = new Dropdown.OptionData();
option.text = item.conv_id;
SelectedConv.options.Add(option);
}
if (List.Count > 0)
{
SelectedConv.captionText.text = List[SelectedConv.value].conv_id;
GroupDropdownValueChanged(SelectedConv);
}
}
catch (Exception ex)
{
Toast.Show(Utils.t("getConvListFailed"));
}
}
void GetMsgList(params object[] parameters)
{
try
{
string text = (string)parameters[1];
List<Message> ListRes = Utils.FromJson<List<Message>>(text);
foreach (Message item in ListRes)
{
print(item.message_msg_id);
MsgList.Add(item);
Dropdown.OptionData option = new Dropdown.OptionData();
option.text = item.message_msg_id;
SelectedMsg.options.Add(option);
}
if (ListRes.Count > 0)
{
SelectedMsg.captionText.text = ListRes[SelectedMsg.value].message_msg_id;
}
}
catch (Exception ex)
{
Toast.Show(Utils.t("getMsgListFailed"));
}
}
void ConvGetConvListSDK()
{
TIMResult res = TencentIMSDK.ConvGetConvList(Utils.addAsyncStringDataToScreen(GetConvList));
print($"ConvGetConvListSDK {res}");
}
void MsgGetMsgListSDK(string conv_id, TIMConvType conv_type)
{
var get_message_list_param = new MsgGetMsgListParam
{
msg_getmsglist_param_count = 20
};
print(conv_id + conv_type);
TIMResult res = TencentIMSDK.MsgGetMsgList(conv_id, conv_type, get_message_list_param, Utils.addAsyncStringDataToScreen(GetMsgList));
}
void MsgDeleteSDK()
{
if (ConvList.Count < 1 || MsgList.Count < 1) return;
print(ConvList[SelectedConv.value].conv_id);
string conv_id = ConvList[SelectedConv.value].conv_id;
TIMConvType conv_type = ConvList[SelectedConv.value].conv_type;
MsgDeleteParam param = new MsgDeleteParam { msg_delete_param_msg = MsgList[SelectedMsg.value] };
TIMResult res = TencentIMSDK.MsgDelete(conv_id, conv_type, param, Utils.addAsyncNullDataToScreen(GetResult));
Result.text = Utils.SynchronizeResult(res);
}
void GetResult(params object[] parameters)
{
GroupDropdownValueChanged(SelectedConv);
Result.text += (string)parameters[0];
}
void CopyText()
{
Utils.Copy(Result.text);
}
void OnApplicationQuit()
{
TencentIMSDK.Uninit();
}
}