iOS開(kāi)發(fā)之環(huán)信(一)--基礎(chǔ)知識(shí)詳解

大大小小關(guān)于環(huán)信的知識(shí)點(diǎn)都在這里了!(之前自己寫(xiě)了一個(gè)文檔所以現(xiàn)在這些都是粘貼文檔了)

一.環(huán)信常識(shí):

1.名詞解釋

org_name企業(yè)唯一標(biāo)識(shí),開(kāi)發(fā)者在環(huán)信開(kāi)發(fā)者管理后臺(tái)注冊(cè)賬號(hào)時(shí)填寫(xiě)的企業(yè)ID

app_name同一企業(yè)下APP的唯一標(biāo)識(shí),開(kāi)發(fā)者在環(huán)信開(kāi)發(fā)者管理后臺(tái)創(chuàng)建應(yīng)用時(shí)填寫(xiě)的”應(yīng)用名稱(chēng)”

org_admin開(kāi)發(fā)者在環(huán)信開(kāi)發(fā)者管理后臺(tái)注冊(cè)時(shí)填寫(xiě)的“用戶(hù)名”。企業(yè)管理員擁有對(duì)該企業(yè)賬號(hào)下所有資源的操作權(quán)限

AppKey:一個(gè)APP的唯一標(biāo)識(shí),格式是${org_name}#${app_name}

2.環(huán)信ID與用戶(hù)名

一個(gè)用戶(hù)的環(huán)信ID和他的在APP中的用戶(hù)名并不需要一致,只需要有一個(gè)明確的對(duì)應(yīng)關(guān)系。例如,用戶(hù)名是stliu@apache.org,當(dāng)這個(gè)用戶(hù)登錄到APP的時(shí)候,可以登錄成功之后,再登錄環(huán)信的服務(wù)器,所以這時(shí)候,只需要能夠從stliu@apache.org推導(dǎo)出這個(gè)用戶(hù)的環(huán)信ID即可

3.token(由后臺(tái)服務(wù)器來(lái)做)

環(huán)信提供的REST API需要權(quán)限才能訪(fǎng)問(wèn),權(quán)限通過(guò)發(fā)送HTTP請(qǐng)求時(shí)攜帶token來(lái)體現(xiàn)

獲取APP管理員Token

使用APP的client_id和client_secret獲取授權(quán)管理員token

client_id/client_secret:在環(huán)信官網(wǎng)注冊(cè)一個(gè)應(yīng)用時(shí)生成的

后臺(tái)通過(guò)這兩個(gè)參數(shù)獲取到token值

二.簡(jiǎn)介:

用戶(hù)和好友體系

1.用戶(hù)體系集成(也就是說(shuō)添加.修改.刪除用戶(hù))

環(huán)信和用戶(hù)體系的集成主要發(fā)生在2個(gè)地方,服務(wù)器端集成和客戶(hù)端集成。

1.1服務(wù)器端集成需要做的內(nèi)容

1.1.1.如何創(chuàng)建環(huán)信賬號(hào)

環(huán)信只是即時(shí)通訊的消息通道.不包含用戶(hù)的私人信息

要使用環(huán)信,只需要為每一個(gè)APP用戶(hù)創(chuàng)建一個(gè)環(huán)信賬號(hào)(就是所謂的環(huán)信id)。創(chuàng)建環(huán)信賬號(hào)僅需要以下信息:

username: "jliu",?//username

password:"123456" //密碼。

這兩個(gè)參數(shù)通常是用戶(hù)的userID和用戶(hù)的app密碼加過(guò)密,然后在通過(guò)hash轉(zhuǎn)碼之后的參數(shù),防止第三方(環(huán)信)泄密

1.1.2.APP創(chuàng)建新用戶(hù)時(shí)創(chuàng)建環(huán)信賬號(hào)

每次當(dāng)APP客戶(hù)端調(diào)用APP自己的服務(wù)器后臺(tái)創(chuàng)建新用戶(hù)時(shí),(這個(gè)過(guò)程最好在服務(wù)器端完成)也在環(huán)信上為該APP用戶(hù)創(chuàng)建一個(gè)環(huán)信賬號(hào)(環(huán)信id)

1.1.3.APP刪除用戶(hù)時(shí)刪除環(huán)信賬號(hào)

每次當(dāng)APP客戶(hù)端調(diào)用APP自己的服務(wù)器后臺(tái)刪除新用戶(hù)時(shí),(這個(gè)過(guò)程最好在服務(wù)器端完成)也在環(huán)信上將該APP用戶(hù)對(duì)應(yīng)的環(huán)信賬號(hào)刪除。

1.1.4.APP修改用戶(hù)密碼時(shí)更新環(huán)信賬號(hào)的密碼

每次當(dāng)APP用戶(hù)的密碼被修改時(shí),(這個(gè)過(guò)程最好在服務(wù)器端完成)也要更新該APP用戶(hù)對(duì)應(yīng)的環(huán)信賬號(hào)的密碼。

1.2客戶(hù)端要做的內(nèi)容:

1.2.1客戶(hù)端登錄集成

APP客戶(hù)端在登錄自己的APP服務(wù)器后臺(tái)成功后,需要調(diào)用環(huán)信客戶(hù)端SDK的登錄方法。

1.2.2客戶(hù)端退出登錄集成

APP客戶(hù)端在退出登錄自己的APP服務(wù)器后臺(tái)成功后,需要調(diào)用環(huán)信客戶(hù)端SDK的退出登錄方法

2.好友體系的集成(也就是說(shuō)集成好友列表,用于實(shí)現(xiàn)好友之間限制或其他權(quán)限)

好友體系,是指誰(shuí)是誰(shuí)的好友的關(guān)系體系。環(huán)信提供好友體系,但不是必須使用的,僅在需要控制消息發(fā)送權(quán)限時(shí)才啟動(dòng)。

比如:一個(gè)交友類(lèi)的APP就必須要控制只有我的好友才能給我發(fā)消息,不是我的好友的人需要向我發(fā)送加好友邀請(qǐng),我批準(zhǔn)后才能給我發(fā)消息。這種情況下,就需要啟用環(huán)信提供的好友體系。

2.1服務(wù)器端要做的內(nèi)容

2.1,1將已上線(xiàn)的APP的現(xiàn)有用戶(hù)的好友體系導(dǎo)入到環(huán)信

2.1.2APP用戶(hù)好友列表更新時(shí)也同步更新環(huán)信賬號(hào)的好友體系

每次當(dāng)APP服務(wù)器后臺(tái)的用戶(hù)的好友列表發(fā)生變化時(shí),也在環(huán)信上更新該APP用戶(hù)的好友體系

2.1.3.打開(kāi)或關(guān)閉發(fā)送消息權(quán)限控制

是否在環(huán)信中建立好友體系,是否開(kāi)啟或關(guān)閉發(fā)送消息的權(quán)限控制,是由APP用戶(hù)自己決定的

2.2.客戶(hù)端集成

2.2.1獲取好友列表,監(jiān)聽(tīng)好友列表

2.2.2根據(jù)賬號(hào)(查找、添加、刪除、黑名單)

三.通信過(guò)程及聊天記錄保存

1.環(huán)信通信的過(guò)程

1.1.在線(xiàn)狀態(tài):客戶(hù)端A發(fā)送消息到環(huán)信服務(wù)器,環(huán)信服務(wù)器推送消息到客戶(hù)端B。

1.2.離線(xiàn)狀態(tài):客戶(hù)端A發(fā)送消息到環(huán)信服務(wù)器,環(huán)信服務(wù)器檢測(cè)到客戶(hù)端B不在線(xiàn),會(huì)添加到離線(xiàn)緩存隊(duì)列中,當(dāng)客戶(hù)端B登錄后服務(wù)器會(huì)把離線(xiàn)消息推送給客戶(hù)端B。

2.環(huán)信聊天記錄存儲(chǔ)

2.1.客戶(hù)端A發(fā)送消息到環(huán)信服務(wù)器的同時(shí),SDK會(huì)保存這條消息到本地?cái)?shù)據(jù)庫(kù)(SDK內(nèi)部創(chuàng)建數(shù)據(jù)庫(kù),不允許直接操作,但可以查看,具體步驟看視頻),環(huán)信服務(wù)器在推送消息到客戶(hù)端B的同時(shí)也會(huì)在服務(wù)器記錄下來(lái)(消息歷史記錄免費(fèi)存儲(chǔ)3天),客戶(hù)端B收到消息后,SDK會(huì)將這條消息存儲(chǔ)到本地?cái)?shù)據(jù)庫(kù)。

2.2.注:客戶(hù)端并未提供去環(huán)信服務(wù)器獲取聊天記錄的接口(都是在本地?cái)?shù)據(jù)庫(kù)中獲取),所以,如果換了設(shè)備或者清空了數(shù)據(jù),聊天記錄都不會(huì)存在,如果有需求要從服務(wù)器拉取聊天記錄,可以在自己服務(wù)器處理。

2.3.獲取聊天記錄常用代碼

//獲取會(huì)話(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];

四.后臺(tái)操作

注意:以下很多雖然請(qǐng)求參數(shù)一樣,但他們的請(qǐng)求方式/url路徑,都是不一樣的

1.后臺(tái)注冊(cè)IM用戶(hù)(由后臺(tái)服務(wù)器來(lái)做)

注冊(cè)IM用戶(hù)(單個(gè)/批量)

請(qǐng)求參數(shù):username和password是必須的,nickname是可選的,這個(gè)nickname用于iOS推送

分兩種模式:開(kāi)放注冊(cè)和授權(quán)注冊(cè)。

開(kāi)放注冊(cè):請(qǐng)求頭中不加token;(只用于單個(gè)注冊(cè))

授權(quán)注冊(cè):請(qǐng)求頭中必須加token。(推薦使用)

獲取IM用戶(hù)

單個(gè)刪除參數(shù):token值

批量:token值/獲取個(gè)數(shù)

刪除IM用戶(hù)

單個(gè)參數(shù):token值

批量:token值/獲取個(gè)數(shù)

重置密碼

參數(shù):token/新的密碼

修改用戶(hù)昵稱(chēng)

參數(shù):新昵稱(chēng)/token值

2.好友與黑名單

二者

{owner_username}是要添加好友的用戶(hù)名,

{friend_username}是被添加的用戶(hù)名,

好友必須是和自己在一個(gè)APP下的IM用戶(hù)

給IM用戶(hù)添加刪除好友

二者都放在url中

參數(shù):token值

查看好友/獲取IM用戶(hù)的黑名單

前者放在url中

參數(shù):token值

往IM用戶(hù)的黑名單中加人

前者放在url中

參數(shù):token值/需要加入到黑名單中的用戶(hù)名

從IM用戶(hù)的黑名單中減人

url中:owner_username/blocked_username

參數(shù):token值

3.在線(xiàn)與離線(xiàn)

查看用戶(hù)在線(xiàn)狀態(tài)/查詢(xún)離線(xiàn)消息數(shù)

參數(shù):token值

查詢(xún)某條離線(xiàn)消息狀態(tài)

url中添加一個(gè)消息id ;msg_id

參數(shù):token值

賬號(hào)禁用與解禁/強(qiáng)制用戶(hù)下線(xiàn)

參數(shù):token值

4.獲取聊天記錄/文件上傳下載/發(fā)送消息/群組管理/聊天室管理:

只是url中拼接的路勁不同

參數(shù):token值

環(huán)信客戶(hù)端操作

參考官方文檔主要有:

iOS客戶(hù)端集成

常見(jiàn)集成方案

iOS API常見(jiàn)錯(cuò)誤碼

.集成iOS SDK前的準(zhǔn)備工作

1.注冊(cè)環(huán)信開(kāi)發(fā)者賬號(hào)并創(chuàng)建后臺(tái)應(yīng)用(略)

2.制作并上傳推送證書(shū)(略)

如果不需要實(shí)現(xiàn)離線(xiàn)推送

功能,請(qǐng)忽略這步

五.集成iOS SDK

1.iOS SDK

SDK:完整的IM功能,實(shí)現(xiàn)了不同類(lèi)型消息的收發(fā)、會(huì)話(huà)管理、群組、好友、聊天室等功能(就是提供了很多牛逼的方法)

EaseUI:是一組IM相關(guān)的UI控件,旨在幫助開(kāi)發(fā)者快速集成環(huán)信SDK。

我們可以直接用demo集成,也可以只用SDK其它的自己寫(xiě)

2.SDK常用類(lèi)

EMClient:是SDK的入口,主要完成登錄、退出、連接管理等功能。通過(guò)該類(lèi)可以獲取到下面四個(gè)類(lèi)。

EMChatManager:管理消息的收發(fā),完成會(huì)話(huà)管理等功能。

EMContactManager:負(fù)責(zé)好友的添加刪除,黑名單的管理。

EMGroupManager:負(fù)責(zé)群組的管理,創(chuàng)建、刪除群組,管理群組成員等功能。

EMChatroomManager:負(fù)責(zé)聊天室的管理。

3.集成步驟

a.官網(wǎng)下載SDK

b.SDK目錄講解:

環(huán)信iOS

HyphenateSDK開(kāi)發(fā)使用(不包含實(shí)時(shí)通話(huà)功能)

環(huán)信iOS

HyphenateFullSDK開(kāi)發(fā)使用(包含實(shí)時(shí)通話(huà)功能:比如打電話(huà)/對(duì)視頻,基本上不用吧)

環(huán)信iOS doc SDK相關(guān)API文檔

環(huán)信iOS

ChatUIDemo3.0工程源碼(官方寫(xiě)的demo)

環(huán)信iOS EaseUI工程源碼

環(huán)信iOS

chatdemo-ui-3.x.x.ipa打包的ipa

注意:

iOS HyphenateSDK/HyphenateFullSDK中有兩個(gè)子文件夾:include、lib。請(qǐng)不要擅自修改這些文件夾的任何東西

include包含SDK的頭文件,每個(gè)類(lèi)的具體使用轉(zhuǎn)到Apple Docs

c.用到的第三方庫(kù)

EaseUI中用到的第三方庫(kù):

MWPhotoBrowser:圖片處理庫(kù),瀏覽顯示

MJRefresh:用于頁(yè)面刷新

MBProgressHUD:用于提示加載刷新

ibopencore-amrnb.a,libopencore-amrwb.a:用于amr與wav之間的轉(zhuǎn)換

Demo中用到的第三方庫(kù):

Parse.framework、Bolts.framework:

Demo中的用戶(hù)信息存儲(chǔ)在Parse,這兩個(gè)庫(kù)是Parse所需要的庫(kù),開(kāi)發(fā)者如果沒(méi)用Parse存儲(chǔ),不要復(fù)制到自己項(xiàng)目中

libMobClickLibrary.a:友盟相關(guān)的庫(kù),用于環(huán)信Demo基本信息的統(tǒng)計(jì),開(kāi)發(fā)者不用或者已有別的版本的庫(kù)不要復(fù)制到自己項(xiàng)目

d.導(dǎo)入SDK

(手動(dòng)操作記筆記)

將下載好的SDK文件夾(HyphenateSDK)拖入到項(xiàng)目中,并勾選上Destination。

向Build Phases→Link Binary

With Libraries中添加依賴(lài)庫(kù)。

SDK依賴(lài)庫(kù)有:

?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)信的一些知識(shí)和導(dǎo)入項(xiàng)目注意事項(xiàng)之類(lèi),具體操作請(qǐng)關(guān)注環(huán)信開(kāi)發(fā)(二)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,945評(píng)論 0 15
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,446評(píng)論 25 708
  • 六.集成SDK基礎(chǔ)功能 (仔細(xì)研習(xí),結(jié)合實(shí)際操作) 由于環(huán)信官方文檔比較詳細(xì),因此,根據(jù)項(xiàng)目需求,把用到的方法記錄...
    夜空已沉寂閱讀 2,170評(píng)論 0 7
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評(píng)論 19 139
  • 2017/03/13.今天和我小姨在惠州與深圳之間奔波了一天,為了房子按揭的事情。我們都是活在大城市的小人物,有個(gè)...
    一只枇杷仙閱讀 113評(píng)論 0 0