環(huán)信集成

android中如何顯示開發(fā)者服務器上的昵稱和頭像 http://www.imgeek.org/article/825307856
Android中顯示頭像(接上一篇文章看)
http://www.imgeek.org/article/825308239
環(huán)信(Android)設置頭像和昵稱的方法(最簡單暴力的基于環(huán)信demo的集成)
http://www.imgeek.org/article/825307875
IOS中如何顯示開發(fā)者服務器上的昵稱和頭像 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)信聊天窗口如何實現(xiàn)文件發(fā)送和預覽的功能 http://www.imgeek.org/question/6260
環(huán)信SDK為用戶開發(fā)IM相關的應用提供的一套完整的開發(fā)框架

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

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

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

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

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

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

SDK 目錄講解

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

注冊

  • 注冊模式分為兩種
    <1> 開放注冊
    <2> 授權注冊

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

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

注冊:調用的接口

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

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

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

SDK 中自動登錄屬性默認是關閉的,需要您在登錄成功后設置,以便您在下次 APP 啟動時不需要再次調用環(huán)信登錄,并且能在沒有網的情況下得到會話列表。

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

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

重連
當?shù)艟€時,iOS SDK 會自動重連,只需要監(jiān)聽重連相關的回調,不需要進行任何操作

- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
 * SDK連接服務器的狀態(tài)變化時會接收到該回調 
*
* 有以下幾種情況,會引起該方法的調用:
* 1. 登錄成功后,手機無法上網時,會調用該回調 
* 2. 登錄成功后,網絡狀態(tài)變化時,會調用該回調 
* 
* @param aConnectionState 當前狀態(tài) */

  • 退出登錄
    • 主動退出

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

  • 被動退出登錄

  • 正在登錄的賬號在另一臺設備上登錄;

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

  • 消息
    消息:IM 交互實體,在 SDK 中對應的類型是 EMMessageEMMessage 由 EMMessageBody 組成。

  • 構造文字信息

  • 構造圖片消息

  • 構造位置信息

  • 構造語音消息

  • 構造視頻消息

  • 構造文件消息

  • 構造透傳消息
    SDK提供的一種特殊類型的消息,即CMD,不會存db,也不會走APNS,類似一種指令型的消息,比如您的服務器是要通知客戶端做某些操作,您可以服務器和客戶端提前約定好某個字段,當客戶端收到約定好的字段時,執(zhí)行某種特殊的操作

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

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

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

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

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

- 聊天
   - 發(fā)送消息(異步方法)
   - 接收消息1>注冊消息回調  2>在線普通消息回調  3> 透傳在線消息回調
   - 解析普通消息
   - 解析透傳消息
   - 解析消息擴展屬性 
   - 自動下載消息中的附件
       SDK 接收到消息后,會默認下載:圖片消息的縮略圖,語音消息的語音,視頻消息的視頻第一幀。
**請先判斷你要下載附件沒有下載成功之后,在調用以下下載方法,否則SDK下載方法會再次從服務器上獲取附件。**

- 聊天會話功能擴展

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

也可以直接使用 EaseMessageViewController,通過 EaseMessageViewControllerDelegate 和 EaseMessageViewControllerDataSource 兩個協(xié)議實現(xiàn)對 EaseMessageViewController 的擴展。



- 自定義聊天樣式
EaseMessageViewControllerDelegate

獲取自定義消息 cell,根據 messageModel,用戶自己判斷是否顯示自定義消息 cell。如果返回 nil 會顯示默認;如果返回 cell 會顯示用戶自定義消息cell。

自定義用戶的頭像

/*! @method
@brief 點擊消息頭像
@discussion 獲取用戶點擊頭像回調
@param viewController 當前消息視圖
@param messageModel 消息模型
@result
*/

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

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

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容