环信即时通讯 —— 消息、会话

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];

 

转载于:https://www.cnblogs.com/cheetah-blog/p/4763780.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值