SDK 2.1.2 release note


强推更新SDK方式:

setp1、将旧的sdk从工程中删除,导入新的sdk;

setp2、编译工程,会出现一系列的error和warning;

setp3、将error和warning逐个击破,千万不要忽略warning,亲~~。

1、更换了database,改动较大。

step1、需要新引入libsqlite3.dylib;

step2、在登录成功之后调用[importDataToNewDatabase]将数据导入新的数据库,使用示例

EMError *error = [[EaseMob sharedInstance].chatManager importDataToNewDatabase];
if (!error) {
    error = [[EaseMob sharedInstance].chatManager loadDataFromDatabase];
};

step3、检测工程中编译产生的所有error和warning,接口的更改会造成编译的失败或警告。

2、接收消息

a> 离线消息需要监听[didFinishedReceiveOfflineMessages:]回调方法,不会在[didReceiveMessage:]返回;

b> cmd类型的消息监听[didReceiveCmdMessage:],不会在[didReceiveMessage:]返回。

3、插入消息

a> 需要设置message.conversationChatter,此项无值会插入失败;

IChatManagerLogin

1、/*!
@method
@brief 将数据库数据导入新的数据库,旧版sdk数据库采用CoreData,从2.1.0版本开始,换成Sqlite
@discussion 同步方法,登录成功之后调用
@result     错误信息
*/
- (EMError *)importDataToNewDatabase;

2、/*!
@method
@brief  调用sdk登录接口,登录成功之后,sdk内部会默认调用一次该函数
从数据库获取信息,包括 好友,好友黑名单,自己相关的群组,被屏蔽的群组的id数组,会话,消息
@discussion 登录成功之后调用
@result     错误信息
*/
- (EMError *)loadDataFromDatabase;

IChatManagerConversation

1、/*!
@method
@brief 删除所有会话对象
@discussion
@param chatters        要被删除的会话对象所对应的用户名列表
@param aDeleteMessages 是否删除这个会话对象所关联的聊天记录
@result 是否成功执行
*/
- (BOOL)removeAllConversationsByChatter:(NSString *)chatter deleteMessages:(BOOL)aDeleteMessages;

2、/*!
@method
@brief 保存一组聊天消息(推荐用法,速度有惊喜哦)
@param messages 待保存的聊天消息列表
@param chatter  必填选项,message的conversationChatter
@param append2Chat 是否调用相关回调方法
@return 是否成功插入
*/
- (BOOL)insertMessagesToDB:(NSArray *)messages
                forChatter:(NSString *)chatter
               append2Chat:(BOOL)append2Chat;

IChatManagerGroup

/*!
@method
@brief  从数据库获取与登录者相关的群组
@return 错误信息
@discussion
*/
- (NSArray *)loadAllMyGroupsFromDatabase;

EMChatManagerLoginDelegate

1、/*!
@method
@brief 用户将要进行自动登录操作的回调
@discussion
@param loginInfo 登录的用户信息
@param error     错误信息
@result
*/
- (void)willAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error;

2、/*!
@method
@brief 用户自动登录完成后的回调
@discussion
@param loginInfo 登录的用户信息
@param error     错误信息
@result
*/
- (void)didAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error;

EMMessage

1、/*!
@method
@brief  更新消息发送状态
@result 是否更新成功
*/
- (BOOL)updateMessageDeliveryStateToDB;

2、/*!
@method
@brief  更新消息扩展属性
@result 是否更新成功
*/
- (BOOL)updateMessageExtToDB;

3、/*!
@method
@brief  更新消息的消息体
@result 是否更新成功
*/
- (BOOL)updateMessageBodiesToDB;

4、/*!
@method
@brief  修改当前 message 的发送状态, 下载状态为 failed (crash 时或者 terminate)
@return 是否更新成功
*/
- (BOOL)updateMessageStatusFailedToDB;

EMChatManagerChatDelegate

1、/*!
@method
@brief 收到消息时的回调
@param cmdMessage      消息对象
@discussion 当EMConversation对象的enableReceiveMessage属性为YES时, 会触发此回调
针对有附件的消息, 此时附件还未被下载.
附件下载过程中的进度回调请参考didFetchingMessageAttachments:progress:,
下载完所有附件后, 回调didMessageAttachmentsStatusChanged:error:会被触发
*/
- (void)didReceiveCmdMessage:(EMMessage *)cmdMessage;

2、/*!
@method
@brief 离线透传消息接收完成的回调
@discussion
@param offlineCmdMessages 接收到的离线透传消息列表
@result
*/
- (void)didFinishedReceiveOfflineCmdMessages:(NSArray *)offlineCmdMessages;

IChatManagerSettingOptions

1、/*!
@property
@brief 当前登录用户的昵称, 默认为用户名
*/
@property (strong, nonatomic) NSString *nickname EM_DEPRECATED_IOS(2_0_6, 2_1_1, "apnsNickname");
@property (strong, nonatomic) NSString *apnsNickname;

2、/*!
@property
@brief 自动获取好友列表(包括好友黑名单,Default is NO), 当为 YES时, 登录成功后会自动调用 asyncFetchBuddyList 方法
*/
@property (nonatomic) BOOL autoFetchBuddyList EM_DEPRECATED_IOS(2_0_9, 2_1_1, "isAutoFetchBuddyList");
@property (nonatomic) BOOL isAutoFetchBuddyList;

IChatManagerConversation

1、/*!
@method
@brief 获取当前登录用户的会话列表
@discussion
@result 会话对象列表
*/
- (NSArray *)loadAllConversations EM_DEPRECATED_IOS(2_0_8, 2_1_1, "Use - loadAllConversationsFromDatabase");
- (NSArray *)loadAllConversationsFromDatabase;

2、/*!
@method
@brief 保存聊天消息到DB
@param message 待保存的聊天消息
@return 是否成功保存聊天消息
@discussion 
消息会直接保存到数据库中,并不会调用相关回调方法;
若希望调用相关回调方法,请使用insertMessageToDB:append2Chat:
*/
- (BOOL)saveMessage:(EMMessage *)message EM_DEPRECATED_IOS(2_0_6, 2_1_1, "Use - insertMessageToDB:");
- (BOOL)insertMessageToDB:(EMMessage *)message;

3、/*!
@method
@brief 导入聊天消息
@param message 待导入的聊天消息
@param append2Chat 是否调用相关回调方法
@return 是否成功导入聊天消息
*/
- (BOOL)importMessage:(EMMessage *)message
          append2Chat:(BOOL)append2Chat  EM_DEPRECATED_IOS(2_0_6, 2_1_1, "Use - insertMessageToDB:append2Chat:");

- (BOOL)insertMessageToDB:(EMMessage *)message
              append2Chat:(BOOL)append2Chat;

4、/*!
@method
@brief 保存一组聊天消息
@param messages 待保存的聊天消息列表
@return 成功保存的聊天消息条数
*/
- (NSInteger)saveMessages:(NSArray *)messages EM_DEPRECATED_IOS(2_0_6, 2_1_1, "Use - insertMessagesToDB:");

- (NSInteger)insertMessagesToDB:(NSArray *)messages;

EMConversation

1、/*!
@method
@brief 删除会话对象和数据库中相关联的某一条消息
@discussion 如果此消息不属于或不存在于此会话, 则不会进行删除
@param aMessageId 将要删除的消息ID
@result 是否成功删除此消息
*/
- (BOOL)removeMessage:(NSString *)aMessageId EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Delete");
- (BOOL)removeMessageWithId:(NSString *)aMessageId;

2、/*!
@method
@brief 删除会话对象和数据库中相关联的某几条消息
@discussion 如果消息不属于或不存在于此会话, 则不会进行删除相应的消息
@param aMessageIds 将要删除的消息ID列表
@result 成功删除的消息条数
*/
- (NSUInteger)removeMessages:(NSArray *)aMessageIds EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - removeMessagesWithIds:");
- (NSUInteger)removeMessagesWithIds:(NSArray *)aMessageIds;

3、/*!
@method
@brief 根据消息ID从数据库中加载消息
@discussion 如果数据库中没有这条消息, 方法返回nil
@param aMessageId 消息ID
@result 加载的消息
*/
- (EMMessage *)loadMessage:(NSString *)aMessageId EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - loadMessageWithId:");
- (EMMessage *)loadMessageWithId:(NSString *)aMessageId;

4、/*!
@method
@brief 根据消息ID列表从数据库中加载消息
@discussion 如果数据库中没有某条消息对应的ID, 则不加载这条消息
@param aMessageIds 消息ID列表
@result 加载的消息列表
*/
- (NSArray *)loadMessages:(NSArray *)aMessageIds EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - loadMessagesWithIds:");
- (NSArray *)loadMessagesWithIds:(NSArray *)aMessageIds;

5、/*!
@method
@brief 把本对话里的所有消息标记为已读/未读
@param isRead 已读或未读
@result 成功标记的消息条数
*/
- (NSUInteger)markMessagesAsRead:(BOOL)isRead EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - markAllMessagesAsRead:");
- (BOOL)markAllMessagesAsRead:(BOOL)isRead;

EMMessage

1、/*!
@property
@brief 是否接收到了接收方的阅读回执, 或是否已发送了阅读回执给对方
@discussion 针对发送的消息, 当接收方读了消息后, 会发回已读回执, 接收到了已读回执, 此标记位会被置为YES; 
针对接收的消息, 发送了阅读回执后, 此标记会被置为YES
*/
@property (nonatomic) BOOL isAcked EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use -isReadAcked");
@property (nonatomic) BOOL isReadAcked;

2、/*!
@property
@brief 对于发送方来说, 该值表示:接收方是否已收到了消息, 对于接收方来说, 表示:接收方是否已发送了"已接收回执" 给对方
@discussion 针对发送的消息, 当接收方读了消息后, 会发回已读回执, 接收到了已读回执, 此标记位会被置为YES;
针对接收的消息, 发送了阅读回执后, 此标记会被置为YES
*/
@property (nonatomic) BOOL isDelivered EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use -isDeliveredAcked");
@property (nonatomic) BOOL isDeliveredAcked;

IEMFileMessageBody

/*!
@enum
@brief 附件下载的状态
@constant eAttachmentDownloading       正在下载
@constant eAttachmentDownloadSuccessed 下载成功
@constant eAttachmentDownloadFailure   下载失败
@constant eAttachmentNone              未下载
*/
typedef enum : NSUInteger {
	EMAttachmentDownloading,
	EMAttachmentDownloadSuccessed,
	EMAttachmentDownloadFailure,
	EMAttachmentNotStarted,
} EMAttachmentDownloadStatus;

IChatManagerPushNotification

/*!
@property
@brief     已屏蔽接收推送消息的群ID列表
*/
@property (nonatomic, strong, readonly) NSArray *ignoredGroupList EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - ignoredGroupIds");
@property (nonatomic, strong, readonly) NSArray *ignoredGroupIds;

EMConversation

1、/*!
@property
@brief 此会话中的消息列表
*/
@property (nonatomic, strong, readonly) NSArray *messages EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Delete");

2、/*!
@property
@brief 是否接收关于此会话的消息
*/
@property (nonatomic, readwrite) BOOL enableReceiveMessage EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Delete");

EMMessage

/*!
@property
@brief 消息所属的对话对象
*/
@property (nonatomic, weak) EMConversation *conversation EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Delete");