android中如何显示开发者服务器上的昵称和头像 http://www.imgeek.org/article/825307856
Android中显示头像(接上一篇文章看)
http://www.imgeek.org/article/825308239
环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)
http://www.imgeek.org/article/825307875
IOS中如何显示开发者服务器上的昵称和头像 http://www.imgeek.org/article/825307855草草们的忧伤:环信IM昵称和头像
http://www.imgeek.org/article/825308536
IOS快速集成环信IM - 基于官方的Demo优化,5分钟集成环信IM功能 http://www.imgeek.org/article/825307886
IOS中环信聊天窗口如何实现文件发送和预览的功能 http://www.imgeek.org/question/6260
环信SDK为用户开发IM相关的应用提供的一套完整的开发框架
SDK_Core : 为核心的消息同步协议实现,完成与服务器之间的信息交换
SDK: 是基于核心协议实现的完整的IM功能,实现了不同类型消息的转发,会话管理,群组,好友,聊天室等功能
-
EaseUI : 是一组IM相关的UI控件
EaseUI 中用到的第三方库:- MWPhotoBrowser: 图片处理库,浏览显示
- MJRefresh: 用于页面刷新
- MBProgressHUD: 用于提示加载刷新
- libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换
简述:
EMClient:是SDK的入口,主要完成登录,退出,连接管理等功能,也是获取其他模块的入口
EMChatManager: 管理消息的收发,完成会话管理等功能
EMContactManager:负责好友的添加删除,黑名单的管理
EMGroupManage:负责劝阻的管理,创建,删除群组,管理群组成员等功能
EMChatroomManager: 负责聊天室的管理
SDK 目录讲解
- 环信 iOS HyphenateSDK 开发使用(不包含实时通话功能)
- 环信 iOS HyphenateFullSDK (包含实时通话功能)
- 环信 iOS doc SDK 相关API文档
- 环信 iOS ChatUIDemo3.0 工程源码
- 环信 iOS EaseUI 工程源码
- 环信 iOS chatdemo-ui-3.x.x.ipa 打包的 ipa
注册
注册模式分为两种
<1> 开放注册
<2> 授权注册开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号。
授权注册的流程应该是您服务器通过环信提供的 REST API
注册,之后保存到您的服务器或返回给客户端。
注册:调用的接口
EMError *error = [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111"];if (error==nil) { NSLog(@"注册成功");}```
登录:调用
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];if (!error) { NSLog(@"登录成功");}```
自动登录
自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。
SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
if (!error)
{
[[EMClient sharedClient].options setIsAutoLogin:YES];
}```
- 自动登录被取消的情况:
- 用户调用了 SDK 的登出动作;
- 用户在别的设备上更改了密码,导致此设备上自动登录失败;
- 用户的账号被从服务器端删除;
- 用户从另一个设备登录,把当前设备上登录的用户踢出。
那么在调用登录方法之前,应该先判断是否设置了自动登录,如果设置了,则不需要再调用了
```
BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin;
if (!isAutoLogin)
{
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
}```
SDK中,如果发生自动登录,会有以下回调:
*/- (void)didAutoLoginWithError:(EMError *)aError
//添加回调监听代理:
[[EMClient sharedClient] addDelegate:self delegateQueue:nil];```
重连
当掉线时,iOS SDK 会自动重连,只需要监听重连相关的回调,不需要进行任何操作
- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
* SDK连接服务器的状态变化时会接收到该回调
*
* 有以下几种情况,会引起该方法的调用:
* 1. 登录成功后,手机无法上网时,会调用该回调
* 2. 登录成功后,网络状态变化时,会调用该回调
*
* @param aConnectionState 当前状态 */
- 退出登录
- 主动退出
- 主动退出
EMError *error = [[EMClient sharedClient] logout:YES];
if (!error) {
NSLog(@"退出成功");
}```
被动退出登录
正在登录的账号在另一台设备上登录;
正在登录的账号被从服务器端删除。
logout:YES:是否解除 device token 的绑定,在被动退出时 SDK 内部处理,不需要调用退出方法
当登录账号在其他设备登录时会接受到该回调
- (void)didLoginFromOtherDevice;
当前登录账号已经被从服务器端删除时会收到该回调
- (void)didRemovedFromServer;
消息
消息:IM 交互实体,在 SDK 中对应的类型是 EMMessage。EMMessage 由 EMMessageBody 组成。构造文字信息
构造图片消息
构造位置信息
构造语音消息
构造视频消息
构造文件消息
构造透传消息
SDK提供的一种特殊类型的消息,即CMD,不会存db,也不会走APNS,类似一种指令型的消息,比如您的服务器是要通知客户端做某些操作,您可以服务器和客户端提前约定好某个字段,当客户端收到约定好的字段时,执行某种特殊的操作构造扩展消息
当 SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。
这里是扩展自文本消息,如果这个自定义的消息需要用到语音或者图片等,可以扩展自语音、图片消息,亦或是位置消息。
- 插入消息
- 更新消息属性
- 会话
- 新建/获取一个会话
- 删除会话
删除单个会话
删除批量会话根据 conversationId
获取会话列表(3种方法)
获取或创建
EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:@"8001" type:EMConversationTypeChat createIfNotExist:YES];获取内存中所有会话
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];```
获取DB中的所有会话
[NSArray](http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/) *conversations = [[EMClient sharedClient].chatManager loadAllConversationsFromDB];```
- 消息检索
可以通过关键字、消息类型、开始结束时间检索某个会话中的消息。
- 聊天
- 发送消息(异步方法)
- 接收消息1>注册消息回调 2>在线普通消息回调 3> 透传在线消息回调
- 解析普通消息
- 解析透传消息
- 解析消息扩展属性
- 自动下载消息中的附件
SDK 接收到消息后,会默认下载:图片消息的缩略图,语音消息的语音,视频消息的视频第一帧。
**请先判断你要下载附件没有下载成功之后,在调用以下下载方法,否则SDK下载方法会再次从服务器上获取附件。**
- 聊天会话功能扩展
EaseUI 提供现成的聊天会话 ViewController,可以通过继承 EaseMessageViewController 方式(参考 ChatDemo-UI3.0 中 ChatViewController)实现对聊天会话的扩展。
也可以直接使用 EaseMessageViewController,通过 EaseMessageViewControllerDelegate 和 EaseMessageViewControllerDataSource 两个协议实现对 EaseMessageViewController 的扩展。
- 自定义聊天样式
EaseMessageViewControllerDelegate
获取自定义消息 cell,根据 messageModel,用户自己判断是否显示自定义消息 cell。如果返回 nil 会显示默认;如果返回 cell 会显示用户自定义消息cell。
自定义用户的头像
/*! @method
@brief 点击消息头像
@discussion 获取用户点击头像回调
@param viewController 当前消息视图
@param messageModel 消息模型
@result
*/
- (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel;
//获取用户点击头像回调的样例: - (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel
{
//UserProfileViewController用户自定义的个人信息视图
//样例的逻辑是选中消息头像后,进入该消息发送者的个人信息
UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.message.from];
[self.navigationController pushViewController:userprofile animated:YES];```