// 环信 方法调用说明 主调方法用
// 所有的注册 监听 全部是 IchatManagerDelegate 遵守 <IchatManagerDelegate> 协议
[[EaseMobsharedInstance].chatManagerremoveDelegate:self];
[[EaseMobsharedInstance].chatManageraddDelegate:selfdelegateQueue:nil];
/*!
@method
@brief注册一个监听对象到监听列表中
@discussion把监听对象添加到监听列表中准备接收相应的事件
@param delegate需要注册的监听对象
@param queue通知监听对象时的线程
@result
*/
- (void)addDelegate:(id<EMChatManagerDelegate>)delegate delegateQueue:(dispatch_queue_t)queue;
/*!
@method
@brief从监听列表中移除一个监听对象
@discussion把监听对象从监听列表中移除,取消接收相应的事件
@param delegate需要移除的监听对象
@result
*/
- (void)removeDelegate:(id<EMChatManagerDelegate>)delegate;
// 登陆 —> 拿到用户名密码 —> 去服务器访问 —> 返回个人信息
环信方法调用 —> /*!
@method
@brief使用用户名密码登录聊天服务器
@discussion如果登陆失败,返回nil
@param username用户名
@param password密码
@param pError 错误信息
@result登录后返回的用户信息
*/
- (NSDictionary *)loginWithUsername:(NSString *)username
password:(NSString *)password
error:(EMError **)pError;
// 注册 —> 拿到用户个人信息 —> 发送给服务器 —> 注册成功 / 注册失败
/*!
@method
@brief 初始化SDK
@discussion失败返回EMError,成功返回nil
@param anAppKey 申请应用时的appkey
@param anAPNSCertName 需要使用的APNS证书名字(需要与后台上传时的APNS证书名字相同,客户端打包时的证书,需要与服务器后台的证书一一对应)
@result 初始化是否成功
*/
- (EMError *)registerSDKWithAppKey:(NSString *)anAppKey
apnsCertName:(NSString *)anAPNSCertName;
// 获取好友列表 —> 从环信获取好友列表(是一个数组) —> 将好友列表发送给服务器 —> 服务器返回 一个大的数组 每一个好友ID 对应 每一个人的信息(头像、昵称等)
*!
@method
@brief手动获取好友列表(异步方法)
@discussion
@param completion获取好友列表完成后的回调
@param queue completion block回调时的线程
*/
- (void *)asyncFetchBuddyListWithCompletion:(void (^)(NSArray *buddyList,EMError *error))completion
onQueue:(dispatch_queue_t)queue;
// 添加好友 —> 跳转到搜索好友界面 —> 拿到用户需要搜索的好友昵称 —> 发送给服务器 —> 服务器返回查询到的好友 —> 点击这个好友 —> 跳转到好友个人信息 —> 点击添加好友按钮 —> 调用环信添加好友方法
// 监听被 同意 / 拒绝 好友请求时的回调 (遵守协议 重写方法)
/*!
@method
@brief申请添加某个用户为好友
@discussion
@param username需要添加为好友的username
@param message 申请添加好友时的附带信息
@param pError 错误信息
@result好友申请是否发送成功
*/
- (BOOL)addBuddy:(NSString *)username
message:(NSString *)message
error:(EMError **)pError;
/*!
@method
@brief好友请求被接受时的回调
@discussion
@param username之前发出的好友请求被用户username接受了
*/
- (void)didAcceptedByBuddy:(NSString *)username;
/*!
@method
@brief好友请求被拒绝时的回调
@discussion
@param username之前发出的好友请求被用户username拒绝了
*/
- (void)didRejectedByBuddy:(NSString *)username;
// 被添加好友 —> 在appdelegate里面 监听 被添加好友的协议 —> 实现 协议的代理方法 —> 同意 / 拒绝 添加 好友 —> 调用环信相对应的方法
/*!
@method
@brief接收到好友请求时的通知
@discussion
@param username发起好友请求的用户username
@param message 收到好友请求时的say hello消息
*/
- (void)didReceiveBuddyRequest:(NSString *)username
message:(NSString *)message;
// 获取会话列表(最新联系人界面) —> 调用环信的方法 获取好友列表 —> 返回的是一个数组 数组里存放的是 EMConversation 类型(环信的会话模型) —> EMConversation 里面有一个属性是 chatter(对方的好友ID) isGroup 是是否是群组 具体详情 看 EMConversation 这个头文件
我的做法是 —> 把会话中的chatter 发给服务器 —> chatter 对应的(头像、昵称) —> 展示到界面中
// 注册 监听 回调 —> 对来消息时 做处理 —> 重写(1) (方法有很多 我用的是未读消息数改变时的回调)
/*!
@method
@brief获取当前登录用户的会话列表
@param append2Chat 是否加到内存中。
YES为加到内存中。加到内存中之后,会有相应的回调被触发从而更新UI;
NO为不加到内存中。如果不加到内存中,则只会直接添加进DB,不会有SDK的回调函数被触发从而去更新UI。
@result 会话对象列表
*/
- (NSArray *)loadAllConversationsFromDatabaseWithAppend2Chat:(BOOL)append2Chat;
(1)重写
/*!
@method
@brief未读消息数改变时的回调
@discussion当EMConversation对象的enableUnreadMessagesCountEvent为YES时,会触发此回调
@result
*/
- (void)didUnreadMessagesCountChanged
{
//刷新 会话列表
}
/*!
@method
@brief接收到离线非透传消息的回调
@discussion
@param offlineMessages接收到‘
的离线列表
@result
*/
- (void)didReceiveOfflineMessages:(NSArray *)offlineMessages;
// 聊天室 (聊天界面) —> 环信中的chatViewController 拿到它 直接把 chatter属性传给他 —> 就可以进行聊天了