环信即时通讯 IM SDK(iOS)消息类型与发送示例
说明:以下通讯内容仅在业务代码调用对应发送接口时才会产生并上传至服务端;未调用相应 API 时不会触发对应类型的消息传输。
适用:iOS 平台,Objective‑C API 以环信 Chat SDK 为准。
1. 文本消息
用于传输文字内容。
EMTextMessageBody *textBody = [[EMTextMessageBody alloc] initWithText:@"这是一条文字消息"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:textBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
2. 图片消息
用于传输图片。
EMImageMessageBody *imgBody = [[EMImageMessageBody alloc] initWithLocalPath:@"/path/pic.jpg" displayName:@"pic.jpg"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:imgBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
3. 语音消息
用于传输语音文件。
EMVoiceMessageBody *voiceBody = [[EMVoiceMessageBody alloc] initWithLocalPath:@"/path/a.aac" displayName:@"voice.aac"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:voiceBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
4. 视频消息
用于传输视频。
EMVideoMessageBody *videoBody = [[EMVideoMessageBody alloc] initWithLocalPath:@"/path/m.mp4" displayName:@"m.mp4"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:videoBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
5. 文件消息
用于传输任意文件。
EMFileMessageBody *fileBody = [[EMFileMessageBody alloc] initWithLocalPath:@"/path/f.pdf" displayName:@"f.pdf"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:fileBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
6. 位置消息
用于传输地理位置。
EMLocationMessageBody *locBody = [[EMLocationMessageBody alloc] initWithLatitude:39.9042 longitude:116.4074 address:@"北京市东城区"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:locBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
7. 透传 / 命令消息(CMD)
用于指令类消息(是否入库等行为以 SDK 版本说明为准)。
EMCmdMessageBody *cmdBody = [[EMCmdMessageBody alloc] initWithAction:@"action"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:cmdBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
8. 自定义消息(CUSTOM)
用于业务自定义事件与扩展字段。
EMCustomMessageBody *customBody = [[EMCustomMessageBody alloc] initWithEvent:@"userCard"
customExt:@{@"uid": @"10001",
@"nickname": @"环信用户",
@"avatar": @"https://example.com/avatar.png"}];
EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to body:customBody ext:nil];
message.chatType = EMChatTypeChat;
[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];9. 合并转发消息(COMBINE)
用于合并转发多条历史消息;messageIdList 为被合并消息 ID 列表。
EMCombineMessageBody *combineMsgBody = [[EMCombineMessageBody alloc] initWithTitle:@"聊天记录" summary:@"A: 这是A的消息内容 B: 这是B的消息内容" compatibleText:@"您当前的版本不支持该消息,请升级到最新版本" messageIdList:@[@"messageId1", @"messageId2"]]; EMChatMessage *msg = [[EMChatMessage alloc] initWithConversationID:to body:combineMsgBody ext:nil]; [[EMClient sharedClient].chatManager sendMessage:msg progress:nil completion:nil];
类型与消息体对照(iOS)
| 消息类型 | 消息体类型(示例) |
|---|---|
| 文本 | EMTextMessageBody |
| 图片 | EMImageMessageBody |
| 语音 | EMVoiceMessageBody |
| 视频 | EMVideoMessageBody |
| 文件 | EMFileMessageBody |
| 位置 | EMLocationMessageBody |
| 命令 | EMCmdMessageBody |
| 自定义 | EMCustomMessageBody |
| 合并转发 | EMCombineMessageBody |