iOS开发之环信(一)--基础知识详解
大大小小关于环信的知识点都在这里了!(之前自己写了一个文档所以现在这些都是粘贴文档了)
一.环信常识:
1.名词解释
org_name企业唯一标识,开发者在环信开发者管理后台注册账号时填写的企业ID
app_name同一企业下APP的唯一标识,开发者在环信开发者管理后台创建应用时填写的”应用名称”
org_admin开发者在环信开发者管理后台注册时填写的“用户名”。企业管理员拥有对该企业账号下所有资源的操作权限
AppKey:一个APP的唯一标识,格式是${org_name}#${app_name}
2.环信ID与用户名
一个用户的环信ID和他的在APP中的用户名并不需要一致,只需要有一个明确的对应关系。例如,用户名是stliu@apache.org,当这个用户登录到APP的时候,可以登录成功之后,再登录环信的服务器,所以这时候,只需要能够从stliu@apache.org推导出这个用户的环信ID即可
3.token(由后台服务器来做)
环信提供的REST API需要权限才能访问,权限通过发送HTTP请求时携带token来体现
获取APP管理员Token
使用APP的client_id和client_secret获取授权管理员token
client_id/client_secret:在环信官网注册一个应用时生成的
后台通过这两个参数获取到token值
二.简介:
用户和好友体系
1.用户体系集成(也就是说添加.修改.删除用户)
环信和用户体系的集成主要发生在2个地方,服务器端集成和客户端集成。
1.1服务器端集成需要做的内容
1.1.1.如何创建环信账号
环信只是即时通讯的消息通道.不包含用户的私人信息
要使用环信,只需要为每一个APP用户创建一个环信账号(就是所谓的环信id)。创建环信账号仅需要以下信息:
username: "jliu", //username
password:"123456" //密码。
这两个参数通常是用户的userID和用户的app密码加过密,然后在通过hash转码之后的参数,防止第三方(环信)泄密
1.1.2.APP创建新用户时创建环信账号
每次当APP客户端调用APP自己的服务器后台创建新用户时,(这个过程最好在服务器端完成)也在环信上为该APP用户创建一个环信账号(环信id)
1.1.3.APP删除用户时删除环信账号
每次当APP客户端调用APP自己的服务器后台删除新用户时,(这个过程最好在服务器端完成)也在环信上将该APP用户对应的环信账号删除。
1.1.4.APP修改用户密码时更新环信账号的密码
每次当APP用户的密码被修改时,(这个过程最好在服务器端完成)也要更新该APP用户对应的环信账号的密码。
1.2客户端要做的内容:
1.2.1客户端登录集成
APP客户端在登录自己的APP服务器后台成功后,需要调用环信客户端SDK的登录方法。
1.2.2客户端退出登录集成
APP客户端在退出登录自己的APP服务器后台成功后,需要调用环信客户端SDK的退出登录方法
2.好友体系的集成(也就是说集成好友列表,用于实现好友之间限制或其他权限)
好友体系,是指谁是谁的好友的关系体系。环信提供好友体系,但不是必须使用的,仅在需要控制消息发送权限时才启动。
比如:一个交友类的APP就必须要控制只有我的好友才能给我发消息,不是我的好友的人需要向我发送加好友邀请,我批准后才能给我发消息。这种情况下,就需要启用环信提供的好友体系。
2.1服务器端要做的内容
2.1,1将已上线的APP的现有用户的好友体系导入到环信
2.1.2APP用户好友列表更新时也同步更新环信账号的好友体系
每次当APP服务器后台的用户的好友列表发生变化时,也在环信上更新该APP用户的好友体系
2.1.3.打开或关闭发送消息权限控制
是否在环信中建立好友体系,是否开启或关闭发送消息的权限控制,是由APP用户自己决定的
2.2.客户端集成
2.2.1获取好友列表,监听好友列表
2.2.2根据账号(查找、添加、删除、黑名单)
三.通信过程及聊天记录保存
1.环信通信的过程
1.1.在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。
1.2.离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存队列中,当客户端B登录后服务器会把离线消息推送给客户端B。
2.环信聊天记录存储
2.1.客户端A发送消息到环信服务器的同时,SDK会保存这条消息到本地数据库(SDK内部创建数据库,不允许直接操作,但可以查看,具体步骤看视频),环信服务器在推送消息到客户端B的同时也会在服务器记录下来(消息历史记录免费存储3天),客户端B收到消息后,SDK会将这条消息存储到本地数据库。
2.2.注:客户端并未提供去环信服务器获取聊天记录的接口(都是在本地数据库中获取),所以,如果换了设备或者清空了数据,聊天记录都不会存在,如果有需求要从服务器拉取聊天记录,可以在自己服务器处理。
2.3.获取聊天记录常用代码
//获取会话中的全部聊天记录。
NSArray *messages = [conversationloadAllMessages];
//根据messageid获取消息
NSArray *messages = [conversationloadMessagesWithIds:@[@"msgid1",@"msgid2",@"msgid3"]];
//根据messageid获取消息
EMMessage *msg = [conversationloadMessageWithId:@"msgid1"];
//根据时间戳读取指定条数的消息(获取当前时间的20条消息)
longlongtimestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;
NSArray * messages = [conversationloadNumbersOfMessages:20 before:timestamp];
四.后台操作
注意:以下很多虽然请求参数一样,但他们的请求方式/url路径,都是不一样的
1.后台注册IM用户(由后台服务器来做)
注册IM用户(单个/批量)
请求参数:username和password是必须的,nickname是可选的,这个nickname用于iOS推送
分两种模式:开放注册和授权注册。
开放注册:请求头中不加token;(只用于单个注册)
授权注册:请求头中必须加token。(推荐使用)
获取IM用户
单个删除参数:token值
批量:token值/获取个数
删除IM用户
单个参数:token值
批量:token值/获取个数
重置密码
参数:token/新的密码
修改用户昵称
参数:新昵称/token值
2.好友与黑名单
二者
{owner_username}是要添加好友的用户名,
{friend_username}是被添加的用户名,
好友必须是和自己在一个APP下的IM用户
给IM用户添加删除好友
二者都放在url中
参数:token值
查看好友/获取IM用户的黑名单
前者放在url中
参数:token值
往IM用户的黑名单中加人
前者放在url中
参数:token值/需要加入到黑名单中的用户名
从IM用户的黑名单中减人
url中:owner_username/blocked_username
参数:token值
3.在线与离线
查看用户在线状态/查询离线消息数
参数:token值
查询某条离线消息状态
url中添加一个消息id ;msg_id
参数:token值
账号禁用与解禁/强制用户下线
参数:token值
4.获取聊天记录/文件上传下载/发送消息/群组管理/聊天室管理:
只是url中拼接的路劲不同
参数:token值
环信客户端操作
参考官方文档主要有:
iOS客户端集成
常见集成方案
iOS API常见错误码
一.集成iOS SDK前的准备工作
1.注册环信开发者账号并创建后台应用(略)
2.制作并上传推送证书(略)
如果不需要实现离线推送
功能,请忽略这步
五.集成iOS SDK
1.iOS SDK
SDK:完整的IM功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能(就是提供了很多牛逼的方法)
EaseUI:是一组IM相关的UI控件,旨在帮助开发者快速集成环信SDK。
我们可以直接用demo集成,也可以只用SDK其它的自己写
2.SDK常用类
EMClient:是SDK的入口,主要完成登录、退出、连接管理等功能。通过该类可以获取到下面四个类。
EMChatManager:管理消息的收发,完成会话管理等功能。
EMContactManager:负责好友的添加删除,黑名单的管理。
EMGroupManager:负责群组的管理,创建、删除群组,管理群组成员等功能。
EMChatroomManager:负责聊天室的管理。
3.集成步骤
a.官网下载SDK
b.SDK目录讲解:
环信iOS
HyphenateSDK开发使用(不包含实时通话功能)
环信iOS
HyphenateFullSDK开发使用(包含实时通话功能:比如打电话/对视频,基本上不用吧)
环信iOS doc SDK相关API文档
环信iOS
ChatUIDemo3.0工程源码(官方写的demo)
环信iOS EaseUI工程源码
环信iOS
chatdemo-ui-3.x.x.ipa打包的ipa
注意:
iOS HyphenateSDK/HyphenateFullSDK中有两个子文件夹:include、lib。请不要擅自修改这些文件夹的任何东西
include包含SDK的头文件,每个类的具体使用转到Apple Docs
c.用到的第三方库
EaseUI中用到的第三方库:
MWPhotoBrowser:图片处理库,浏览显示
MJRefresh:用于页面刷新
MBProgressHUD:用于提示加载刷新
ibopencore-amrnb.a,libopencore-amrwb.a:用于amr与wav之间的转换
Demo中用到的第三方库:
Parse.framework、Bolts.framework:
Demo中的用户信息存储在Parse,这两个库是Parse所需要的库,开发者如果没用Parse存储,不要复制到自己项目中
libMobClickLibrary.a:友盟相关的库,用于环信Demo基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目
d.导入SDK
(手动操作记笔记)
将下载好的SDK文件夹(HyphenateSDK)拖入到项目中,并勾选上Destination。
向Build Phases→Link Binary
With Libraries中添加依赖库。
SDK依赖库有:
•CoreMedia.framework
•AudioToolbox.framework
•AVFoundation.framework
•MobileCoreServices.framework
•ImageIO.framework
•libc++.dylib
•libz.dylib
•libstdc++.6.0.9.dylib
•libsqlite3.dylib
若拖入HyphenateFullSDK时导入框架:
•libiconv.dylib
(如果使用的是xcode7,后缀为tbd。)
SDK不支持bitcode,向Build
Settings→Linking→Enable Bitcode中设置NO。
编译即可
以上是介绍关于环信的一些知识和导入项目注意事项之类,具体操作请关注环信开发(二)!