环信集成

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相关的应用提供的一套完整的开发框架

5020DA21-3F8A-42B5-81BF-9E79C9A628F5.png

  1. SDK_Core : 为核心的消息同步协议实现,完成与服务器之间的信息交换

  2. SDK: 是基于核心协议实现的完整的IM功能,实现了不同类型消息的转发,会话管理,群组,好友,聊天室等功能

  3. EaseUI : 是一组IM相关的UI控件
    EaseUI 中用到的第三方库:

    • MWPhotoBrowser: 图片处理库,浏览显示
    • MJRefresh: 用于页面刷新
    • MBProgressHUD: 用于提示加载刷新
    • libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换
EBF46758-DB1D-47B3-B94B-D95CCE40B647.png

简述:
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 中对应的类型是 EMMessageEMMessage 由 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];```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容