1、消息EMMessage
环信支持文字、图片、位置、语音、视频、文件、透传、自定义八种消息构造。消息,即IM交互实体,在SDK中对应的类型是 **EMMessage**,EMMessage可以由多个符合<IEMMessageBody>协议的body组成,但是 推荐使用一个body。
2、消息构造
1> 设置消息的内容
文字消息:
EMChatText *msgChat = [[EMChatText alloc] initWithText:@"要发送的消息"];
图片消息:
EMChatImage *msgChat = [[EMChatImage alloc] initWithUIImage:img displayName:@"displayName"];
位置消息:
EMChatLocation *msgChat = [[EMChatLocation alloc] initWithLatitude:35.1 longitude:35.1 address:@"地址"];
语音消息:
EMChatVoice *msgChat = [[EMChatVoice alloc] initWithFile:recordPath displayName:@"audio"]; voice.duration = aDuration;
视频消息:
EMChatVideo *msgChat = [[EMChatVideo alloc] initWithFile:localPath displayName:@"displayName"];
文件消息:
EMChatFile *msgChat = [[EMChatFile alloc] initWithFile:localPath displayName:@"displayName"];
透传消息 (SDK提供的一种特殊类型的消息,即CMD,不会存db,也不会走apns推送,类似一种指令型的消息,比如您的服务器要通知客户端做某些操作,您可以服务器和客户端提前约定好某个字段,当客户端收到约定好的字段时,执行某种特殊操作):
EMChatCommand *msgChat = [[EMChatCommand alloc] init]; msgChat.cmd = @"reason";
2> 消息构造,通过前面设置的消息内容,生成body及消息:
EMCommandMessageBody *body = [[EMCommandMessageBody alloc] initWithChatObject:msgChat]; // 生成message EMMessage *message = [[EMMessage alloc] initWithReceiver:@"接收消息的用户名" bodies:@[body]];
自定义消息扩展:
有时候需要在消息中携带一些扩展内容,用来实现特殊需求,比如阅后即焚等。EMMessage提供了ext属性,撰文用来存放扩展内容。ext属性是NSDictionary类型,key和value必须是基本类型,且不能是json。可以这样使用:EMMessage.ext = @{@”key”:@”value”};
3> 消息类型
message.messageType = eMessageTypeChat; // 设置为单聊消息 //message.messageType = eConversationTypeGroupChat;// 设置为群聊消息 //message.messageType = eConversationTypeChatRoom;// 设置为聊天室消息
4> 插入消息
message.deliveryState = eMessageDeliveryState_Delivered; [[EaseMob sharedInstance].chatManager insertMessageToDB:message];
3、更新消息属性
/*! @method @brief 更新消息发送状态 @result 是否更新成功 */ - (BOOL)updateMessageDeliveryStateToDB; /*! @method @brief 更新消息扩展属性 @result 是否更新成功 */ - (BOOL)updateMessageExtToDB; /*! @method @brief 更新消息的消息体 @result 是否更新成功 */ - (BOOL)updateMessageBodiesToDB; /*! @method @brief 修改当前 message 的发送状态, 下载状态为 failed (crash 时或者 terminate) @return 是否更新成功 */ - (BOOL)updateMessageStatusFailedToDB;
4、会话
会话:操作聊天消息EMMessage*的容器,在SDK中对应的类型是EMConversation*;
1> 创建会话
EMConversation *conversation = [[EaseMob sharedInstance].chatManager conversationForChatter:@"聊天对象" conversationType:eConversationTypeChat];
2> 删除会话
// deleteMessage,是否删除会话中的message,YES为删除 // append2Chat,是否更新内存中内容 [[EaseMob sharedInstance].chatManager removeConversationByChatter:@"聊天对象" deleteMessages:YES append2Chat:YES]; //删除单个会话[[EaseMob sharedInstance].chatManager removeConversationsByChatters:chatters deleteMessages:YES append2Chat:YES]; //批量删除会话
[[EaseMob sharedInstance].chatManager removeAllConversationsWithDeleteMessages:YES append2Chat:YES]; //删除所有会话
3> 获取会话列表(三种方法)
EMConversation *conversation = [[EaseMob sharedInstance].chatManager conversationForChatter:@"聊天对象" conversationType:eConversationTypeChat]; //直接创建
NSArray *conversations = [[EaseMob sharedInstance].chatManager conversations]; //获取内存中所有会话
NSArray *conversations = [[EaseMob sharedInstance].chatManager loadAllConversationsFromDatabaseWithAppend2Chat:YES]; //获取DB中所有会话
4> 获取会话未读消息数
[EMConversation unreadMessagesCount];
时间: 2024-10-13 11:04:04