环信IM客户端集成(整理)
来源:互联网 发布:阿里云邮箱免费版 编辑:程序博客网 时间:2024/05/19 18:16
1. 环信IM功能介绍
2. 发送消息
1. 为开发者提供基于移动互联网的即时通讯能力,如单聊、群聊、发语音、发图片、发位置、实时音频、实时视频等。
3. 用户体系集成
1. 客户端登录集成
1. APP 客户端在登录自己的 APP 服务器后台成功后,需要调用环信客户端 SDK 的登录方法。
2. 客户端退出登录集成
1. APP 客户端在退出登录自己的 APP 服务器后台成功后,需要调用环信客户端 SDK 的退出登录方法。
4. 好友体系集成
1. 获取好友列表,监听好友列表
2. 根据账号(查找、添加、删除、黑名单)
5. 通信过程
1.
* 在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。
* 离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存中,当客户端B登录后服务器会把离线消息推送给客户端B。
6. 聊天记录存储
1. 客户端A发送消息到环信服务器的同时,SDK 会保存这条消息到本地数据库(SDK 内部创建数据库,不允许直接操作),环信服务器在推送消息到客户端B的同时也会在服务器记录下来(消息历史记录免费存储3天),客户端B收到消息 后,SDK 会将这条消息存储到本地数据库。 注:客户端并未提供去服务器获取聊天记录的接口,所以,如果换了设备或者清空了数据,聊天记录都不会存在,如果有需求要从服务器拉取聊天记录,可以在自己服务器处理。
2. Android 在 Android 的 SDK 中,EMChatManager.getInstance().loadAllConversations() 是从本地数据库加载聊天记录到内存中,其他获取聊天记录的方法均是从内存读取。 iOS
3. 123456 4. NSArray *messages = [conversation loadAllMessages]; // 获取会话中的全部聊天记录。NSArray *messages = [conversation loadMessagesWithIds:@[@"msgid1",@"msgid2",@"msgid3"]]; // 根据messageid获取消息EMMessage *msg = [conversation loadMessageWithId:@"msgid1"]; // 根据messageid获取消息 long long timestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;NSArray * messages = [conversation loadNumbersOfMessages:20 before:timestamp]; // 根据时间戳读取指定条数的
7. iOS SDK 介绍
2. 环信SDK基础功能集成步骤
1. 注册账号,创建应用
1. 一个 APP 的唯一标识,规则是 ${org_name}#${app_name}
2. 上传推送证书,进行离线消息推送(若不需要,可跳过)
3. 集成sdk到项目中:通过 Cocoapods 下载地址: 不包含实时语音版本 SDK(HyphenateSDK),引用时 #import <HyphenateSDK/EMSDK.h> pod 'HyphenateSDK', :git => 'https://github.com/easemob/hyphenate-cocoapods.git' 包含实时语音版本 SDK(HyphenateFullSDK),引用时 #import <HyphenateFullSDK/EMSDKFull.h> pod 'HyphenateFullSDK', :git => 'https://github.com/easemob/hyphenate-full-cocoapods.git'
4. 初始化
1. 在App开始运行时初始化;App进入后台,App将要从后台返回,调用相应的方法
2.
5. 注册
1. 开放注册以及授权注册,开放注册时为了测试使用,正式环境不推荐
2. 授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端
3. 建议后台注册。
6. 登录
1. 登录有3个方法,2个block回调,1个同步方法(阻塞进程)
7. 自动登录
1. 自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。
2. SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。
3. 被取消的情况
1.
* 用户调用了 SDK 的登出动作;
* 用户在别的设备上更改了密码,导致此设备上自动登录失败;
* 用户的账号被从服务器端删除;
* 用户从另一个设备登录,把当前设备上登录的用户踢出。
2.
3. 所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。
4. 监听自动登录:- (void)didAutoLoginWithError:(EMError *)aError
8. 重连
1. 掉线会自动重连,只需要监听重连的回调即可:- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
9. 退出登录
1.
* 主动退出登录:调用 SDK 的退出接口;
* 被动退出登录:1. 正在登录的账号在另一台设备上登录;2. 正在登录的账号被从服务器端删除。
2. logout:YES:是否解除 device token 的绑定,在被动退出时 SDK 内部处理,不需要调用退出方法。
1. EMError *error = [[EMClient sharedClient] logout:YES];
2. if (!error) {
3. NSLog(@"退出成功");
4. }
10. 被动退出登录
1. 当前登录账号在其它设备登录时会接收到该回调
1. 监听回调 - (void)didLoginFromOtherDevice;
2. 当前登录账号已经被从服务器端删除时会收到该回调 - (void)didRemovedFromServer;
3. 消息体系:消息:IM 交互实体,在 SDK 中对应的类型是 EMMessage。EMMessage 由 EMMessageBody 组成。
1. 构造消息
2. 会话
1. 操作聊天消息 EMMessage 的容器,在 SDK 中对应的类型是 EMConversation
2. 消息检索:可以通过关键字、消息类型、开始结束时间检索某个会话中的消息。
3. 聊天
1. 登录成功之后才能进行聊天操作。发消息时,单聊和群聊调用的是统一接口,区别只是要设置下 message.chatType。
2. 发送消息,走异步方法:- (void)asyncSendMessage:(EMMessage *)aMessage
3. progress:(void (^)(int progress))aProgress
4. completion:(void (^)(EMMessage *message,
5. EMError *error))aProgressCompletion;
4. 解析普通消息
1. // 收到消息的回调,带有附件类型的消息可以用 SDK 提供的下载附件方法下载(后面会讲到)
2. - (void)didReceiveMessages:(NSArray *)aMessages
5. 自动下载消息中的附件
1. SDK 接收到消息后,会默认下载:图片消息的缩略图,语音消息的语音,视频消息的视频第一帧。 请先判断你要下载附件没有下载成功之后,在调用以下下载方法,否则SDK下载方法会再次从服务器上获取附件。
4. 好友管理
1. 注:环信不是好友也可以聊天,不推荐使用环信的好友机制。如果你有自己的服务器或好友关系,请自己维护好友关系。
2. 获取好友列表:a、从服务器获取所有的好友;b、从数据库获取所有的好友
1. a、
2. b、
3. 加好友时,如果您已经发过,对方没有处理,您不能再次发送
4. 监听加好友请求
1. 当您收到好友请求,如果您没有处理,请自己保存数据,新协议下不会每次都发送。
5. 黑名单
1. 环信的黑名单体系是独立的,与好友无任何关系。也就是说,您可以将任何人加入黑名单,不论他是否与您是好友关系。同时,如果您将好友好友加入黑名单,则他仍然是您的好友,只不过同时也在黑名单中。
2. 两种方法查询黑名单列表
3. 加群
1.
* EMGroupStylePrivateOnlyOwnerInvite: 该类型的群组只允许群主(Owner)添加人进群,其他人无法主动加入。
* EMGroupStylePrivateMemberCanInvite: (推荐使用)该类型的群组允许所有群成员添加人进群,其他人无法主动加入。
* EMGroupStylePublicJoinNeedApproval: (推荐使用)该类型的群组只允许群主(Owner)添加人进群;其他人想进入群组的话,需要先发送申请,群主同意申请之后才能进群;其他人无法主动加入。
* EMGroupStylePublicOpenJoin: (不推荐使用)该类型的群组允许任何人主动加入群组。
6. 聊天室
1. 进入聊天页面之前,进行加入聊天室操作;
2. 成功进入聊天室之后,服务器会自动给推 10 条消息;
3. 离开聊天页面之后,进行退出聊天室操作;
4. 聊天室创建者 Owner 可以进行退出聊天室操作;
5. 支持最大成员 5000;
6. 环信的聊天室内仅有 Owner 和游客;
7. 不支持客户端建立聊天室;
8. 不支持客户端邀请;
9. 不支持 REST 邀请;
10. 聊天室内成员离线后,服务器当监听到此成员不在线后不在会给此成员再发推送。
8. 环信集成,坑
1. 由于环信集成分2.x与3.x版本,经过环信技术的建议:3.x是经过重构的。建议使用3.x版本
2. AppKey:测试 Demo 中 AppKey 为 easemob-demo#chatdemo,则 chatdemo 为填写的应用名称,easemob-demo为企业ID。注册授权根据需要自行选择。)
3. 初始化时:
5. 注意方法中的同步以及异步
1. 平台架构
2. 发送消息
1. 为开发者提供基于移动互联网的即时通讯能力,如单聊、群聊、发语音、发图片、发位置、实时音频、实时视频等。
3. 用户体系集成
1. 客户端登录集成
1. APP 客户端在登录自己的 APP 服务器后台成功后,需要调用环信客户端 SDK 的登录方法。
2. 客户端退出登录集成
1. APP 客户端在退出登录自己的 APP 服务器后台成功后,需要调用环信客户端 SDK 的退出登录方法。
4. 好友体系集成
1. 获取好友列表,监听好友列表
2. 根据账号(查找、添加、删除、黑名单)
5. 通信过程
1.
* 在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。
* 离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存中,当客户端B登录后服务器会把离线消息推送给客户端B。
6. 聊天记录存储
1. 客户端A发送消息到环信服务器的同时,SDK 会保存这条消息到本地数据库(SDK 内部创建数据库,不允许直接操作),环信服务器在推送消息到客户端B的同时也会在服务器记录下来(消息历史记录免费存储3天),客户端B收到消息 后,SDK 会将这条消息存储到本地数据库。 注:客户端并未提供去服务器获取聊天记录的接口,所以,如果换了设备或者清空了数据,聊天记录都不会存在,如果有需求要从服务器拉取聊天记录,可以在自己服务器处理。
2. Android 在 Android 的 SDK 中,EMChatManager.getInstance().loadAllConversations() 是从本地数据库加载聊天记录到内存中,其他获取聊天记录的方法均是从内存读取。 iOS
3. 123456 4. NSArray *messages = [conversation loadAllMessages]; // 获取会话中的全部聊天记录。NSArray *messages = [conversation loadMessagesWithIds:@[@"msgid1",@"msgid2",@"msgid3"]]; // 根据messageid获取消息EMMessage *msg = [conversation loadMessageWithId:@"msgid1"]; // 根据messageid获取消息 long long timestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;NSArray * messages = [conversation loadNumbersOfMessages:20 before:timestamp]; // 根据时间戳读取指定条数的
7. iOS SDK 介绍
2. 环信SDK基础功能集成步骤
1. 注册账号,创建应用
1. 一个 APP 的唯一标识,规则是 ${org_name}#${app_name}
2. 上传推送证书,进行离线消息推送(若不需要,可跳过)
3. 集成sdk到项目中:通过 Cocoapods 下载地址: 不包含实时语音版本 SDK(HyphenateSDK),引用时 #import <HyphenateSDK/EMSDK.h> pod 'HyphenateSDK', :git => 'https://github.com/easemob/hyphenate-cocoapods.git' 包含实时语音版本 SDK(HyphenateFullSDK),引用时 #import <HyphenateFullSDK/EMSDKFull.h> pod 'HyphenateFullSDK', :git => 'https://github.com/easemob/hyphenate-full-cocoapods.git'
4. 初始化
1. 在App开始运行时初始化;App进入后台,App将要从后台返回,调用相应的方法
2.
5. 注册
1. 开放注册以及授权注册,开放注册时为了测试使用,正式环境不推荐
2. 授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端
3. 建议后台注册。
6. 登录
1. 登录有3个方法,2个block回调,1个同步方法(阻塞进程)
7. 自动登录
1. 自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。
2. SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。
3. 被取消的情况
1.
* 用户调用了 SDK 的登出动作;
* 用户在别的设备上更改了密码,导致此设备上自动登录失败;
* 用户的账号被从服务器端删除;
* 用户从另一个设备登录,把当前设备上登录的用户踢出。
2.
3. 所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。
4. 监听自动登录:- (void)didAutoLoginWithError:(EMError *)aError
8. 重连
1. 掉线会自动重连,只需要监听重连的回调即可:- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
9. 退出登录
1.
* 主动退出登录:调用 SDK 的退出接口;
* 被动退出登录:1. 正在登录的账号在另一台设备上登录;2. 正在登录的账号被从服务器端删除。
2. logout:YES:是否解除 device token 的绑定,在被动退出时 SDK 内部处理,不需要调用退出方法。
1. EMError *error = [[EMClient sharedClient] logout:YES];
2. if (!error) {
3. NSLog(@"退出成功");
4. }
10. 被动退出登录
1. 当前登录账号在其它设备登录时会接收到该回调
1. 监听回调 - (void)didLoginFromOtherDevice;
2. 当前登录账号已经被从服务器端删除时会收到该回调 - (void)didRemovedFromServer;
3. 消息体系:消息:IM 交互实体,在 SDK 中对应的类型是 EMMessage。EMMessage 由 EMMessageBody 组成。
1. 构造消息
2. 会话
1. 操作聊天消息 EMMessage 的容器,在 SDK 中对应的类型是 EMConversation
2. 消息检索:可以通过关键字、消息类型、开始结束时间检索某个会话中的消息。
3. 聊天
1. 登录成功之后才能进行聊天操作。发消息时,单聊和群聊调用的是统一接口,区别只是要设置下 message.chatType。
2. 发送消息,走异步方法:- (void)asyncSendMessage:(EMMessage *)aMessage
3. progress:(void (^)(int progress))aProgress
4. completion:(void (^)(EMMessage *message,
5. EMError *error))aProgressCompletion;
4. 解析普通消息
1. // 收到消息的回调,带有附件类型的消息可以用 SDK 提供的下载附件方法下载(后面会讲到)
2. - (void)didReceiveMessages:(NSArray *)aMessages
5. 自动下载消息中的附件
1. SDK 接收到消息后,会默认下载:图片消息的缩略图,语音消息的语音,视频消息的视频第一帧。 请先判断你要下载附件没有下载成功之后,在调用以下下载方法,否则SDK下载方法会再次从服务器上获取附件。
4. 好友管理
1. 注:环信不是好友也可以聊天,不推荐使用环信的好友机制。如果你有自己的服务器或好友关系,请自己维护好友关系。
2. 获取好友列表:a、从服务器获取所有的好友;b、从数据库获取所有的好友
1. a、
<span style="font-size:18px;">EMError *error = nil;NSArray *userlist = [[EMClient sharedClient].contactManager getContactsFromServerWithError:&error];if (!error) { NSLog(@"获取成功 -- %@",buddyList);}</span>
2. b、
<span style="font-size:18px;">NSArray *userlist = [[EMClient sharedClient].contactManager getContactsFromDB];</span>
3. 加好友时,如果您已经发过,对方没有处理,您不能再次发送
4. 监听加好友请求
1. 当您收到好友请求,如果您没有处理,请自己保存数据,新协议下不会每次都发送。
5. 黑名单
1. 环信的黑名单体系是独立的,与好友无任何关系。也就是说,您可以将任何人加入黑名单,不论他是否与您是好友关系。同时,如果您将好友好友加入黑名单,则他仍然是您的好友,只不过同时也在黑名单中。
2. 两种方法查询黑名单列表
<span style="font-size:18px;">//同步方法EMError *error = nil;NSArray *blacklist = [[EMClient sharedClient].contactManager getBlackListFromServerWithError:&error];if (!error) { NSLog(@"获取成功 -- %@",blockedList);}//数据库获取黑名单</span><pre class="code objc"><span style="font-size:18px;"><a target=_blank href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span class="kw5">NSArray</span></a> <span class="sy0">*</span>blockList <span class="sy0">=</span> <span class="br0">[</span><span class="br0">[</span>EMClient sharedClient<span class="br0">]</span>.contactManager getBlackListFromDB<span class="br0">]</span>;</span>
5. 群组管理 1. 四种类型 1. @constant EMGroupStylePrivateOnlyOwnerInvite 私有群组,创建完成后,只允许 Owner 邀请用户加入 2. @constant EMGroupStylePrivateMemberCanInvite 私有群组,创建完成后,只允许 Owner 和群成员邀请用户加入 3. @constant EMGroupStylePublicJoinNeedApproval 公开群组,创建完成后,只允许 Owner 邀请用户加入; 非群成员用户需发送入群申请,Owner 同意后才能入组 4. @constant EMGroupStylePublicOpenJoin 公开群组,创建完成后,允许非群组成员加入,不需要管理员同意
2. 建群
<span style="font-size:18px;">EMError *error = nil;EMGroupOptions *setting = [[EMGroupOptions alloc] init];setting.maxUsersCount = 500;setting.style = EMGroupStylePublicOpenJoin;// 创建不同类型的群组,这里需要才传入不同的类型EMGroup *group = [[EMClient sharedClient].groupManager createGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] message:@"邀请您加入群组" setting:setting error:&error];if(!error){ NSLog(@"创建成功 -- %@",group);}</span>
3. 加群
1.
* EMGroupStylePrivateOnlyOwnerInvite: 该类型的群组只允许群主(Owner)添加人进群,其他人无法主动加入。
* EMGroupStylePrivateMemberCanInvite: (推荐使用)该类型的群组允许所有群成员添加人进群,其他人无法主动加入。
* EMGroupStylePublicJoinNeedApproval: (推荐使用)该类型的群组只允许群主(Owner)添加人进群;其他人想进入群组的话,需要先发送申请,群主同意申请之后才能进群;其他人无法主动加入。
* EMGroupStylePublicOpenJoin: (不推荐使用)该类型的群组允许任何人主动加入群组。
6. 聊天室
1. 进入聊天页面之前,进行加入聊天室操作;
2. 成功进入聊天室之后,服务器会自动给推 10 条消息;
3. 离开聊天页面之后,进行退出聊天室操作;
4. 聊天室创建者 Owner 可以进行退出聊天室操作;
5. 支持最大成员 5000;
6. 环信的聊天室内仅有 Owner 和游客;
7. 不支持客户端建立聊天室;
8. 不支持客户端邀请;
9. 不支持 REST 邀请;
10. 聊天室内成员离线后,服务器当监听到此成员不在线后不在会给此成员再发推送。
8. 环信集成,坑
1. 由于环信集成分2.x与3.x版本,经过环信技术的建议:3.x是经过重构的。建议使用3.x版本
2. AppKey:测试 Demo 中 AppKey 为 easemob-demo#chatdemo,则 chatdemo 为填写的应用名称,easemob-demo为企业ID。注册授权根据需要自行选择。)
3. 初始化时:
<span style="font-size:18px;">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //AppKey:注册的AppKey,详细见下面注释。 //apnsCertName:推送证书名(不需要加后缀),详细见下面注释。 EMOptions *options = [EMOptions optionsWithAppkey:@"douser#istore"]; options.apnsCertName = @"istore_dev"; [[EMClient sharedClient] initializeSDKWithOptions:options]; return YES;}</span>4. 注册的所有方法中(3个),不推荐使用,建议后台通过REST注册
5. 注意方法中的同步以及异步
2 0
- 环信IM客户端集成(整理)
- 环信im集成
- iOS - IM环信集成
- Android环信IM简单集成(EaseUI)
- 环信IM 集成服务器端(php
- 环信IM集成到android项目
- 环信集成网页的im
- 环信IM快速集成集成,实现客服功能(单聊)
- 环信IM(3.x)android版sdk集成小结
- 环信IM即时通讯快速集成和基本功能的使用
- Java IM环信服务端集成之创建应用(一)
- Java IM环信服务端集成之用户注册(三)
- 环信Android客户端集成文档
- Java IM环信服务端集成之用户体系集成(二)
- 环信IM (一)注册
- 环信IM (二)添加 删除
- 环信IM (三)对话
- 环信IM集成 —— 聊天界面URL颜色展示
- Android LayoutInflater深度解析 给你带来全新的认识
- 齐次线性方程组的解、SVD、最小二乘法
- CSS格式化排版
- Jquery+Ajax+Mysql 前台校验注册登陆
- 使用angular和swiper做的一个滑动小插件
- 环信IM客户端集成(整理)
- 【bzoj2460】 BeiJing2011—元素
- 跨域
- CodeForces 500C New Year Book Reading
- <c:choose>
- 银行卡校验规则(Luhn算法)
- jenkins+maven+svn实现简单的一键发布
- muldex定制主dex类
- 从零开始学习SLAM