環(huán)信集成

android中如何顯示開發(fā)者服務(wù)器上的昵稱和頭像 http://www.imgeek.org/article/825307856
Android中顯示頭像(接上一篇文章看)
http://www.imgeek.org/article/825308239
環(huán)信(Android)設(shè)置頭像和昵稱的方法(最簡(jiǎn)單暴力的基于環(huán)信demo的集成)
http://www.imgeek.org/article/825307875
IOS中如何顯示開發(fā)者服務(wù)器上的昵稱和頭像 http://www.imgeek.org/article/825307855草草們的憂傷:環(huán)信IM昵稱和頭像
http://www.imgeek.org/article/825308536
IOS快速集成環(huán)信IM - 基于官方的Demo優(yōu)化,5分鐘集成環(huán)信IM功能 http://www.imgeek.org/article/825307886
IOS中環(huán)信聊天窗口如何實(shí)現(xiàn)文件發(fā)送和預(yù)覽的功能 http://www.imgeek.org/question/6260
環(huán)信SDK為用戶開發(fā)IM相關(guān)的應(yīng)用提供的一套完整的開發(fā)框架

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

  1. SDK_Core : 為核心的消息同步協(xié)議實(shí)現(xiàn),完成與服務(wù)器之間的信息交換

  2. SDK: 是基于核心協(xié)議實(shí)現(xiàn)的完整的IM功能,實(shí)現(xiàn)了不同類型消息的轉(zhuǎn)發(fā),會(huì)話管理,群組,好友,聊天室等功能

  3. EaseUI : 是一組IM相關(guān)的UI控件
    EaseUI 中用到的第三方庫:

    • MWPhotoBrowser: 圖片處理庫,瀏覽顯示
    • MJRefresh: 用于頁面刷新
    • MBProgressHUD: 用于提示加載刷新
    • libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 與 wav 之間的轉(zhuǎn)換
EBF46758-DB1D-47B3-B94B-D95CCE40B647.png

簡(jiǎn)述:
EMClient:是SDK的入口,主要完成登錄,退出,連接管理等功能,也是獲取其他模塊的入口
EMChatManager: 管理消息的收發(fā),完成會(huì)話管理等功能
EMContactManager:負(fù)責(zé)好友的添加刪除,黑名單的管理
EMGroupManage:負(fù)責(zé)勸阻的管理,創(chuàng)建,刪除群組,管理群組成員等功能
EMChatroomManager: 負(fù)責(zé)聊天室的管理

SDK 目錄講解

  • 環(huán)信 iOS HyphenateSDK 開發(fā)使用(不包含實(shí)時(shí)通話功能)
  • 環(huán)信 iOS HyphenateFullSDK (包含實(shí)時(shí)通話功能)
  • 環(huán)信 iOS doc SDK 相關(guān)API文檔
  • 環(huán)信 iOS ChatUIDemo3.0 工程源碼
  • 環(huán)信 iOS EaseUI 工程源碼
  • 環(huán)信 iOS chatdemo-ui-3.x.x.ipa 打包的 ipa

注冊(cè)

  • 注冊(cè)模式分為兩種
    <1> 開放注冊(cè)
    <2> 授權(quán)注冊(cè)

  • 開放注冊(cè)時(shí),才可以客戶端注冊(cè)。開放注冊(cè)是為了測(cè)試使用,正式環(huán)境中不推薦使用該方式注冊(cè)環(huán)信賬號(hào)。

  • 授權(quán)注冊(cè)的流程應(yīng)該是您服務(wù)器通過環(huán)信提供的 REST API
    注冊(cè),之后保存到您的服務(wù)器或返回給客戶端。

注冊(cè):調(diào)用的接口

EMError *error = [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111"];if (error==nil) { NSLog(@"注冊(cè)成功");}```
登錄:調(diào)用

EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];if (!error) { NSLog(@"登錄成功");}```

自動(dòng)登錄
自動(dòng)登錄:即首次登錄成功后,不需要再次調(diào)用登錄方法,在下次 APP 啟動(dòng)時(shí),SDK 會(huì)自動(dòng)為您登錄。并且如果您自動(dòng)登錄失敗,也可以讀取到之前的會(huì)話信息。

SDK 中自動(dòng)登錄屬性默認(rèn)是關(guān)閉的,需要您在登錄成功后設(shè)置,以便您在下次 APP 啟動(dòng)時(shí)不需要再次調(diào)用環(huán)信登錄,并且能在沒有網(wǎng)的情況下得到會(huì)話列表。

EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
if (!error)
{ 
[[EMClient sharedClient].options setIsAutoLogin:YES];
}```
- 自動(dòng)登錄被取消的情況:
   - 用戶調(diào)用了 SDK 的登出動(dòng)作;
   - 用戶在別的設(shè)備上更改了密碼,導(dǎo)致此設(shè)備上自動(dòng)登錄失??;
   - 用戶的賬號(hào)被從服務(wù)器端刪除;
   - 用戶從另一個(gè)設(shè)備登錄,把當(dāng)前設(shè)備上登錄的用戶踢出。
那么在調(diào)用登錄方法之前,應(yīng)該先判斷是否設(shè)置了自動(dòng)登錄,如果設(shè)置了,則不需要再調(diào)用了
     ```
BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin;
if (!isAutoLogin)
 { 
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
}```
SDK中,如果發(fā)生自動(dòng)登錄,會(huì)有以下回調(diào):

*/- (void)didAutoLoginWithError:(EMError *)aError
//添加回調(diào)監(jiān)聽代理:
[[EMClient sharedClient] addDelegate:self delegateQueue:nil];```

重連
當(dāng)?shù)艟€時(shí),iOS SDK 會(huì)自動(dòng)重連,只需要監(jiān)聽重連相關(guān)的回調(diào),不需要進(jìn)行任何操作

- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
 * SDK連接服務(wù)器的狀態(tài)變化時(shí)會(huì)接收到該回調(diào) 
*
* 有以下幾種情況,會(huì)引起該方法的調(diào)用:
* 1. 登錄成功后,手機(jī)無法上網(wǎng)時(shí),會(huì)調(diào)用該回調(diào) 
* 2. 登錄成功后,網(wǎng)絡(luò)狀態(tài)變化時(shí),會(huì)調(diào)用該回調(diào) 
* 
* @param aConnectionState 當(dāng)前狀態(tài) */

  • 退出登錄
    • 主動(dòng)退出

EMError *error = [[EMClient sharedClient] logout:YES];
if (!error) {
NSLog(@"退出成功");
}```

  • 被動(dòng)退出登錄

  • 正在登錄的賬號(hào)在另一臺(tái)設(shè)備上登錄;

  • 正在登錄的賬號(hào)被從服務(wù)器端刪除。
    logout:YES:是否解除 device token 的綁定,在被動(dòng)退出時(shí) SDK 內(nèi)部處理,不需要調(diào)用退出方法
    當(dāng)?shù)卿涃~號(hào)在其他設(shè)備登錄時(shí)會(huì)接受到該回調(diào)
    - (void)didLoginFromOtherDevice;
    當(dāng)前登錄賬號(hào)已經(jīng)被從服務(wù)器端刪除時(shí)會(huì)收到該回調(diào)
    - (void)didRemovedFromServer;

  • 消息
    消息:IM 交互實(shí)體,在 SDK 中對(duì)應(yīng)的類型是 EMMessageEMMessage 由 EMMessageBody 組成。

  • 構(gòu)造文字信息

  • 構(gòu)造圖片消息

  • 構(gòu)造位置信息

  • 構(gòu)造語音消息

  • 構(gòu)造視頻消息

  • 構(gòu)造文件消息

  • 構(gòu)造透?jìng)飨?br> SDK提供的一種特殊類型的消息,即CMD,不會(huì)存db,也不會(huì)走APNS,類似一種指令型的消息,比如您的服務(wù)器是要通知客戶端做某些操作,您可以服務(wù)器和客戶端提前約定好某個(gè)字段,當(dāng)客戶端收到約定好的字段時(shí),執(zhí)行某種特殊的操作

  • 構(gòu)造擴(kuò)展消息
    當(dāng) SDK 提供的消息類型不滿足需求時(shí),開發(fā)者可以通過擴(kuò)展自 SDK 提供的文本、語音、圖片、位置等消息類型,從而生成自己需要的消息類型。

這里是擴(kuò)展自文本消息,如果這個(gè)自定義的消息需要用到語音或者圖片等,可以擴(kuò)展自語音、圖片消息,亦或是位置消息。

  • 插入消息
  • 更新消息屬性
  • 會(huì)話
  • 新建/獲取一個(gè)會(huì)話
  • 刪除會(huì)話
    刪除單個(gè)會(huì)話
    刪除批量會(huì)話根據(jù) conversationId
    獲取會(huì)話列表(3種方法)
    獲取或創(chuàng)建

EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:@"8001" type:EMConversationTypeChat createIfNotExist:YES];獲取內(nèi)存中所有會(huì)話
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];```
獲取DB中的所有會(huì)話

[NSArray](http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/) *conversations = [[EMClient sharedClient].chatManager loadAllConversationsFromDB];```
    
- 消息檢索
可以通過關(guān)鍵字、消息類型、開始結(jié)束時(shí)間檢索某個(gè)會(huì)話中的消息。

- 聊天
   - 發(fā)送消息(異步方法)
   - 接收消息1>注冊(cè)消息回調(diào)  2>在線普通消息回調(diào)  3> 透?jìng)髟诰€消息回調(diào)
   - 解析普通消息
   - 解析透?jìng)飨?   - 解析消息擴(kuò)展屬性 
   - 自動(dòng)下載消息中的附件
       SDK 接收到消息后,會(huì)默認(rèn)下載:圖片消息的縮略圖,語音消息的語音,視頻消息的視頻第一幀。
**請(qǐng)先判斷你要下載附件沒有下載成功之后,在調(diào)用以下下載方法,否則SDK下載方法會(huì)再次從服務(wù)器上獲取附件。**

- 聊天會(huì)話功能擴(kuò)展

EaseUI 提供現(xiàn)成的聊天會(huì)話 ViewController,可以通過繼承 EaseMessageViewController 方式(參考 ChatDemo-UI3.0 中 ChatViewController)實(shí)現(xiàn)對(duì)聊天會(huì)話的擴(kuò)展。

也可以直接使用 EaseMessageViewController,通過 EaseMessageViewControllerDelegate 和 EaseMessageViewControllerDataSource 兩個(gè)協(xié)議實(shí)現(xiàn)對(duì) EaseMessageViewController 的擴(kuò)展。



- 自定義聊天樣式
EaseMessageViewControllerDelegate

獲取自定義消息 cell,根據(jù) messageModel,用戶自己判斷是否顯示自定義消息 cell。如果返回 nil 會(huì)顯示默認(rèn);如果返回 cell 會(huì)顯示用戶自定義消息cell。

自定義用戶的頭像

/*! @method
@brief 點(diǎn)擊消息頭像
@discussion 獲取用戶點(diǎn)擊頭像回調(diào)
@param viewController 當(dāng)前消息視圖
@param messageModel 消息模型
@result
*/

  • (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel;
    //獲取用戶點(diǎn)擊頭像回調(diào)的樣例:
  • (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel
    {
    //UserProfileViewController用戶自定義的個(gè)人信息視圖
    //樣例的邏輯是選中消息頭像后,進(jìn)入該消息發(fā)送者的個(gè)人信息
    UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.message.from];

[self.navigationController pushViewController:userprofile animated:YES];```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容