RecvNewMsgCallback is used to listen for and receive all types of messages (text, custom, and rich media).AddRecvNewMsgCallback (Details) to add a message listener. We recommend it be called early, such as after the chat page is initialized, to ensure timely message receiving in the application.RemoveRecvNewMsgCallback (Details) to remove the message listener.AddRecvNewMsgCallback to set the event listener.RecvNewMsgCallback callback to receive text messages.RemoveRecvNewMsgCallback to remove the listener. This step is optional and can be performed as needed.TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Text){string text = elem.text_elem_content;}}}})
AddRecvNewMsgCallback to set the event listener.RecvNewMsgCallback callback to receive custom messages.RemoveRecvNewMsgCallback to remove the listener. This step is optional and can be performed as needed.TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Custom){string data = elem.custom_elem_data;string desc = elem.custom_elem_desc;string ext = elem.custom_elem_ext;}}}})
AddRecvNewMsgCallback to set the event listener.RecvNewMsgCallback callback to receive rich media messages.elem_type attribute in the Message message and then parse the message again according to the type to get the specific content of the elements in the message.RemoveRecvNewMsgCallback to remove the listener. This step is optional and can be performed as needed.TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Image){string path = elem.image_elem_orig_path; // Image upload path. This field applies only to the message sender who can use it to display the image on the screen in advance to optimize the experience.switch(elem.image_elem_level){case TIMImageLevel.kTIMImageLevel_Orig: // Send the original image{string id = elem.image_elem_orig_id;int h = elem.image_elem_orig_pic_height;int w = elem.image_elem_orig_pic_width;int size = elem.image_elem_orig_pic_size;string url = elem.image_elem_orig_url;break;}case TIMImageLevel.kTIMImageLevel_HD: // Send the large image (large in size){string id = elem.image_elem_large_id;int h = elem.image_elem_large_pic_height;int w = elem.image_elem_large_pic_width;int size = elem.image_elem_large_pic_size;string url = elem.image_elem_large_url;break;}case TIMImageLevel.kTIMImageLevel_Compression: // Send the thumbnail (small in size; default){string id = elem.image_elem_thumb_id;int h = elem.image_elem_orig_thumb_height;int w = elem.image_elem_orig_thumb_width;int size = elem.image_elem_orig_thumb_size;string url = elem.image_elem_thumb_url;break;}}}}}})
Message:TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Video){// Parse the video message attributes such as thumbnail, playback address, width and height, and sizestring type = elem.video_elem_video_type;int size = elem.video_elem_video_size;int duration = elem.video_elem_video_duration;string path = elem.video_elem_video_path;string url = elem.video_elem_video_url;int imageType = elem.video_elem_image_type;int imageSize = elem.video_elem_image_size;int w = elem.video_elem_image_width;int h = elem.video_elem_image_height;string imagePath = elem.video_elem_image_path;string url = elem.video_elem_image_url;}}}})
Message:TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Sound){// Parse the audio playback address, local address, size, and durationint size = elem.sound_elem_file_size;int duration = elem.sound_elem_file_time;string path = elem.sound_elem_file_path;string url = elem.sound_elem_url;}}}})
Message:TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_File){// Parse the filename, size, URL, etc. of the file messageint size = elem.file_elem_file_size;string path = elem.file_elem_file_path;string name = elem.file_elem_file_name;string url = elem.file_elem_url;}}}})
Message:TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Location){// Parse the geographical location information such as latitude, longitude, and descriptiondouble longitude = elem.location_elem_longitude;double latitude = elem.location_elem_latitude;string desc = elem.location_elem_desc;}}}})
index and data can be customized.index to 1 and data to x12345 to indicate the smile emoji.
The receiver parses the received emoji message as 1 and x12345 and displays the message as the smile emoji according to the preset rules.Message:TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{foreach(Message message in messages){foreach (Elem elem in message.message_elem_array){// There is a next elementif (elem.elem_type == TIMElemType.kTIMElem_Face){string data = elem.face_elem_buf;int index = elem.face_elem_index;}}}})
GroupTipsElem (Details).GroupTipsElem.group_tips_elem_tip_type.type as kTIMGroupTip_GroupInfoChange, indicating that this is a notification of group profile change.
The receiver can get the operator information from group_tips_elem_op_user_info and the modified group name from group_tips_elem_group_change_info_array.
At this point, the receiver can merge the "operator" and "modified group name" to create a group tip, such as "Alice renamed the group "group123"".V2TIMMessage:if(tip.group_tips_elem_tip_type == TIMGroupTipType.kTIMGroupTip_GroupInfoChange){tip.group_tips_elem_group_id; // Groupmessage.group_tips_elem_tip_type; // Group tip typemessage.group_tips_elem_op_user_info; // Operator profilemessage.group_tips_elem_changed_user_info_array; // User profile operated onmessage.group_tips_elem_group_change_info_array; // Group information change detailsmessage.group_tips_elem_member_change_info_array; // Group member change information}
TencentIMSDK.SetMsgElemUploadProgressCallback((Message message, int index, int cur_size, int total_size, string user_data)=>{// `message` indicates the message instance being sent.// `index` indicates the number of the file being uploaded.// `cur_size` indicates the current size (in MB) of the file being uploaded.// `total_size` indicates the total size of the file being uploaded.})
Message object to parse message_elem_array.message_elem_array to get all the element objects.foreach (Elem elem in message.message_elem_array) {// There is a next element}
Feedback