大大小小關(guān)于環(huán)信的知識點(diǎn)都在這里了!(之前自己寫了一個(gè)文檔所以現(xiàn)在這些都是粘貼文檔了)
一.環(huán)信常識:
1.名詞解釋
org_name企業(yè)唯一標(biāo)識,開發(fā)者在環(huán)信開發(fā)者管理后臺注冊賬號時(shí)填寫的企業(yè)ID
app_name同一企業(yè)下APP的唯一標(biāo)識,開發(fā)者在環(huán)信開發(fā)者管理后臺創(chuàng)建應(yīng)用時(shí)填寫的”應(yīng)用名稱”
org_admin開發(fā)者在環(huán)信開發(fā)者管理后臺注冊時(shí)填寫的“用戶名”。企業(yè)管理員擁有對該企業(yè)賬號下所有資源的操作權(quán)限
AppKey:一個(gè)APP的唯一標(biāo)識,格式是${org_name}#${app_name}
2.環(huán)信ID與用戶名
一個(gè)用戶的環(huán)信ID和他的在APP中的用戶名并不需要一致,只需要有一個(gè)明確的對應(yīng)關(guān)系。例如,用戶名是stliu@apache.org,當(dāng)這個(gè)用戶登錄到APP的時(shí)候,可以登錄成功之后,再登錄環(huán)信的服務(wù)器,所以這時(shí)候,只需要能夠從stliu@apache.org推導(dǎo)出這個(gè)用戶的環(huán)信ID即可
3.token(由后臺服務(wù)器來做)
環(huán)信提供的REST API需要權(quán)限才能訪問,權(quán)限通過發(fā)送HTTP請求時(shí)攜帶token來體現(xiàn)
獲取APP管理員Token
使用APP的client_id和client_secret獲取授權(quán)管理員token
client_id/client_secret:在環(huán)信官網(wǎng)注冊一個(gè)應(yīng)用時(shí)生成的
后臺通過這兩個(gè)參數(shù)獲取到token值
二.簡介:
用戶和好友體系
1.用戶體系集成(也就是說添加.修改.刪除用戶)
環(huán)信和用戶體系的集成主要發(fā)生在2個(gè)地方,服務(wù)器端集成和客戶端集成。
1.1服務(wù)器端集成需要做的內(nèi)容
1.1.1.如何創(chuàng)建環(huán)信賬號
環(huán)信只是即時(shí)通訊的消息通道.不包含用戶的私人信息
要使用環(huán)信,只需要為每一個(gè)APP用戶創(chuàng)建一個(gè)環(huán)信賬號(就是所謂的環(huán)信id)。創(chuàng)建環(huán)信賬號僅需要以下信息:
username: "jliu",?//username
password:"123456" //密碼。
這兩個(gè)參數(shù)通常是用戶的userID和用戶的app密碼加過密,然后在通過hash轉(zhuǎn)碼之后的參數(shù),防止第三方(環(huán)信)泄密
1.1.2.APP創(chuàng)建新用戶時(shí)創(chuàng)建環(huán)信賬號
每次當(dāng)APP客戶端調(diào)用APP自己的服務(wù)器后臺創(chuàng)建新用戶時(shí),(這個(gè)過程最好在服務(wù)器端完成)也在環(huán)信上為該APP用戶創(chuàng)建一個(gè)環(huán)信賬號(環(huán)信id)
1.1.3.APP刪除用戶時(shí)刪除環(huán)信賬號
每次當(dāng)APP客戶端調(diào)用APP自己的服務(wù)器后臺刪除新用戶時(shí),(這個(gè)過程最好在服務(wù)器端完成)也在環(huán)信上將該APP用戶對應(yīng)的環(huán)信賬號刪除。
1.1.4.APP修改用戶密碼時(shí)更新環(huán)信賬號的密碼
每次當(dāng)APP用戶的密碼被修改時(shí),(這個(gè)過程最好在服務(wù)器端完成)也要更新該APP用戶對應(yīng)的環(huán)信賬號的密碼。
1.2客戶端要做的內(nèi)容:
1.2.1客戶端登錄集成
APP客戶端在登錄自己的APP服務(wù)器后臺成功后,需要調(diào)用環(huán)信客戶端SDK的登錄方法。
1.2.2客戶端退出登錄集成
APP客戶端在退出登錄自己的APP服務(wù)器后臺成功后,需要調(diào)用環(huán)信客戶端SDK的退出登錄方法
2.好友體系的集成(也就是說集成好友列表,用于實(shí)現(xiàn)好友之間限制或其他權(quán)限)
好友體系,是指誰是誰的好友的關(guān)系體系。環(huán)信提供好友體系,但不是必須使用的,僅在需要控制消息發(fā)送權(quán)限時(shí)才啟動(dòng)。
比如:一個(gè)交友類的APP就必須要控制只有我的好友才能給我發(fā)消息,不是我的好友的人需要向我發(fā)送加好友邀請,我批準(zhǔn)后才能給我發(fā)消息。這種情況下,就需要啟用環(huán)信提供的好友體系。
2.1服務(wù)器端要做的內(nèi)容
2.1,1將已上線的APP的現(xiàn)有用戶的好友體系導(dǎo)入到環(huán)信
2.1.2APP用戶好友列表更新時(shí)也同步更新環(huán)信賬號的好友體系
每次當(dāng)APP服務(wù)器后臺的用戶的好友列表發(fā)生變化時(shí),也在環(huán)信上更新該APP用戶的好友體系
2.1.3.打開或關(guān)閉發(fā)送消息權(quán)限控制
是否在環(huán)信中建立好友體系,是否開啟或關(guān)閉發(fā)送消息的權(quán)限控制,是由APP用戶自己決定的
2.2.客戶端集成
2.2.1獲取好友列表,監(jiān)聽好友列表
2.2.2根據(jù)賬號(查找、添加、刪除、黑名單)
三.通信過程及聊天記錄保存
1.環(huán)信通信的過程
1.1.在線狀態(tài):客戶端A發(fā)送消息到環(huán)信服務(wù)器,環(huán)信服務(wù)器推送消息到客戶端B。
1.2.離線狀態(tài):客戶端A發(fā)送消息到環(huán)信服務(wù)器,環(huán)信服務(wù)器檢測到客戶端B不在線,會(huì)添加到離線緩存隊(duì)列中,當(dāng)客戶端B登錄后服務(wù)器會(huì)把離線消息推送給客戶端B。
2.環(huán)信聊天記錄存儲
2.1.客戶端A發(fā)送消息到環(huán)信服務(wù)器的同時(shí),SDK會(huì)保存這條消息到本地?cái)?shù)據(jù)庫(SDK內(nèi)部創(chuàng)建數(shù)據(jù)庫,不允許直接操作,但可以查看,具體步驟看視頻),環(huán)信服務(wù)器在推送消息到客戶端B的同時(shí)也會(huì)在服務(wù)器記錄下來(消息歷史記錄免費(fèi)存儲3天),客戶端B收到消息后,SDK會(huì)將這條消息存儲到本地?cái)?shù)據(jù)庫。
2.2.注:客戶端并未提供去環(huán)信服務(wù)器獲取聊天記錄的接口(都是在本地?cái)?shù)據(jù)庫中獲取),所以,如果換了設(shè)備或者清空了數(shù)據(jù),聊天記錄都不會(huì)存在,如果有需求要從服務(wù)器拉取聊天記錄,可以在自己服務(wù)器處理。
2.3.獲取聊天記錄常用代碼
//獲取會(huì)話中的全部聊天記錄。
NSArray *messages = [conversationloadAllMessages];
//根據(jù)messageid獲取消息
NSArray *messages = [conversationloadMessagesWithIds:@[@"msgid1",@"msgid2",@"msgid3"]];
//根據(jù)messageid獲取消息
EMMessage *msg = [conversationloadMessageWithId:@"msgid1"];
//根據(jù)時(shí)間戳讀取指定條數(shù)的消息(獲取當(dāng)前時(shí)間的20條消息)
longlongtimestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;
NSArray * messages = [conversationloadNumbersOfMessages:20 before:timestamp];
四.后臺操作
注意:以下很多雖然請求參數(shù)一樣,但他們的請求方式/url路徑,都是不一樣的
1.后臺注冊IM用戶(由后臺服務(wù)器來做)
注冊IM用戶(單個(gè)/批量)
請求參數(shù):username和password是必須的,nickname是可選的,這個(gè)nickname用于iOS推送
分兩種模式:開放注冊和授權(quán)注冊。
開放注冊:請求頭中不加token;(只用于單個(gè)注冊)
授權(quán)注冊:請求頭中必須加token。(推薦使用)
獲取IM用戶
單個(gè)刪除參數(shù):token值
批量:token值/獲取個(gè)數(shù)
刪除IM用戶
單個(gè)參數(shù):token值
批量:token值/獲取個(gè)數(shù)
重置密碼
參數(shù):token/新的密碼
修改用戶昵稱
參數(shù):新昵稱/token值
2.好友與黑名單
二者
{owner_username}是要添加好友的用戶名,
{friend_username}是被添加的用戶名,
好友必須是和自己在一個(gè)APP下的IM用戶
給IM用戶添加刪除好友
二者都放在url中
參數(shù):token值
查看好友/獲取IM用戶的黑名單
前者放在url中
參數(shù):token值
往IM用戶的黑名單中加人
前者放在url中
參數(shù):token值/需要加入到黑名單中的用戶名
從IM用戶的黑名單中減人
url中:owner_username/blocked_username
參數(shù):token值
3.在線與離線
查看用戶在線狀態(tài)/查詢離線消息數(shù)
參數(shù):token值
查詢某條離線消息狀態(tài)
url中添加一個(gè)消息id ;msg_id
參數(shù):token值
賬號禁用與解禁/強(qiáng)制用戶下線
參數(shù):token值
4.獲取聊天記錄/文件上傳下載/發(fā)送消息/群組管理/聊天室管理:
只是url中拼接的路勁不同
參數(shù):token值
環(huán)信客戶端操作
參考官方文檔主要有:
iOS客戶端集成
常見集成方案
iOS API常見錯(cuò)誤碼
一.集成iOS SDK前的準(zhǔn)備工作
1.注冊環(huán)信開發(fā)者賬號并創(chuàng)建后臺應(yīng)用(略)
2.制作并上傳推送證書(略)
如果不需要實(shí)現(xiàn)離線推送
功能,請忽略這步
五.集成iOS SDK
1.iOS SDK
SDK:完整的IM功能,實(shí)現(xiàn)了不同類型消息的收發(fā)、會(huì)話管理、群組、好友、聊天室等功能(就是提供了很多牛逼的方法)
EaseUI:是一組IM相關(guān)的UI控件,旨在幫助開發(fā)者快速集成環(huán)信SDK。
我們可以直接用demo集成,也可以只用SDK其它的自己寫
2.SDK常用類
EMClient:是SDK的入口,主要完成登錄、退出、連接管理等功能。通過該類可以獲取到下面四個(gè)類。
EMChatManager:管理消息的收發(fā),完成會(huì)話管理等功能。
EMContactManager:負(fù)責(zé)好友的添加刪除,黑名單的管理。
EMGroupManager:負(fù)責(zé)群組的管理,創(chuàng)建、刪除群組,管理群組成員等功能。
EMChatroomManager:負(fù)責(zé)聊天室的管理。
3.集成步驟
a.官網(wǎng)下載SDK
b.SDK目錄講解:
環(huán)信iOS
HyphenateSDK開發(fā)使用(不包含實(shí)時(shí)通話功能)
環(huán)信iOS
HyphenateFullSDK開發(fā)使用(包含實(shí)時(shí)通話功能:比如打電話/對視頻,基本上不用吧)
環(huán)信iOS doc SDK相關(guān)API文檔
環(huán)信iOS
ChatUIDemo3.0工程源碼(官方寫的demo)
環(huán)信iOS EaseUI工程源碼
環(huán)信iOS
chatdemo-ui-3.x.x.ipa打包的ipa
注意:
iOS HyphenateSDK/HyphenateFullSDK中有兩個(gè)子文件夾:include、lib。請不要擅自修改這些文件夾的任何東西
include包含SDK的頭文件,每個(gè)類的具體使用轉(zhuǎn)到Apple Docs
c.用到的第三方庫
EaseUI中用到的第三方庫:
MWPhotoBrowser:圖片處理庫,瀏覽顯示
MJRefresh:用于頁面刷新
MBProgressHUD:用于提示加載刷新
ibopencore-amrnb.a,libopencore-amrwb.a:用于amr與wav之間的轉(zhuǎn)換
Demo中用到的第三方庫:
Parse.framework、Bolts.framework:
Demo中的用戶信息存儲在Parse,這兩個(gè)庫是Parse所需要的庫,開發(fā)者如果沒用Parse存儲,不要復(fù)制到自己項(xiàng)目中
libMobClickLibrary.a:友盟相關(guān)的庫,用于環(huán)信Demo基本信息的統(tǒng)計(jì),開發(fā)者不用或者已有別的版本的庫不要復(fù)制到自己項(xiàng)目
d.導(dǎo)入SDK
(手動(dòng)操作記筆記)
將下載好的SDK文件夾(HyphenateSDK)拖入到項(xiàng)目中,并勾選上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時(shí)導(dǎo)入框架:
?libiconv.dylib
(如果使用的是xcode7,后綴為tbd。)
SDK不支持bitcode,向Build
Settings→Linking→Enable Bitcode中設(shè)置NO。
編譯即可
以上是介紹關(guān)于環(huán)信的一些知識和導(dǎo)入項(xiàng)目注意事項(xiàng)之類,具體操作請關(guān)注環(huán)信開發(fā)(二)!