android中如何顯示開發(fā)者服務(wù)器上的昵稱和頭像 http://www.imgeek.org/article/825307856
Android中顯示頭像(接上一篇文章看)
http://www.imgeek.org/article/825308239
環(huán)信(Android)設(shè)置頭像和昵稱的方法(最簡單暴力的基于環(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)信聊天窗口如何實現(xiàn)文件發(fā)送和預(yù)覽的功能 http://www.imgeek.org/question/6260
環(huán)信SDK為用戶開發(fā)IM相關(guān)的應(yīng)用提供的一套完整的開發(fā)框架
SDK_Core : 為核心的消息同步協(xié)議實現(xiàn),完成與服務(wù)器之間的信息交換
SDK: 是基于核心協(xié)議實現(xiàn)的完整的IM功能,實現(xiàn)了不同類型消息的轉(zhuǎn)發(fā),會話管理,群組,好友,聊天室等功能
-
EaseUI : 是一組IM相關(guān)的UI控件
EaseUI 中用到的第三方庫:- MWPhotoBrowser: 圖片處理庫隅茎,瀏覽顯示
- MJRefresh: 用于頁面刷新
- MBProgressHUD: 用于提示加載刷新
- libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 與 wav 之間的轉(zhuǎn)換
簡述:
EMClient:是SDK的入口,主要完成登錄,退出,連接管理等功能,也是獲取其他模塊的入口
EMChatManager: 管理消息的收發(fā),完成會話管理等功能
EMContactManager:負責好友的添加刪除,黑名單的管理
EMGroupManage:負責勸阻的管理,創(chuàng)建,刪除群組,管理群組成員等功能
EMChatroomManager: 負責聊天室的管理
SDK 目錄講解
- 環(huán)信 iOS HyphenateSDK 開發(fā)使用(不包含實時通話功能)
- 環(huán)信 iOS HyphenateFullSDK (包含實時通話功能)
- 環(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
注冊
注冊模式分為兩種
<1> 開放注冊
<2> 授權(quán)注冊開放注冊時,才可以客戶端注冊。開放注冊是為了測試使用构捡,正式環(huán)境中不推薦使用該方式注冊環(huán)信賬號。
授權(quán)注冊的流程應(yīng)該是您服務(wù)器通過環(huán)信提供的 REST API
注冊壁查,之后保存到您的服務(wù)器或返回給客戶端衩婚。
注冊:調(diào)用的接口
EMError *error = [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111"];if (error==nil) { NSLog(@"注冊成功");}```
登錄:調(diào)用
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];if (!error) { NSLog(@"登錄成功");}```
自動登錄
自動登錄:即首次登錄成功后,不需要再次調(diào)用登錄方法助赞,在下次 APP 啟動時买羞,SDK 會自動為您登錄。并且如果您自動登錄失敗雹食,也可以讀取到之前的會話信息畜普。
SDK 中自動登錄屬性默認是關(guān)閉的,需要您在登錄成功后設(shè)置群叶,以便您在下次 APP 啟動時不需要再次調(diào)用環(huán)信登錄吃挑,并且能在沒有網(wǎng)的情況下得到會話列表钝荡。
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
if (!error)
{
[[EMClient sharedClient].options setIsAutoLogin:YES];
}```
- 自動登錄被取消的情況:
- 用戶調(diào)用了 SDK 的登出動作;
- 用戶在別的設(shè)備上更改了密碼舶衬,導致此設(shè)備上自動登錄失敳和ā;
- 用戶的賬號被從服務(wù)器端刪除逛犹;
- 用戶從另一個設(shè)備登錄端辱,把當前設(shè)備上登錄的用戶踢出。
那么在調(diào)用登錄方法之前,應(yīng)該先判斷是否設(shè)置了自動登錄,如果設(shè)置了,則不需要再調(diào)用了
```
BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin;
if (!isAutoLogin)
{
EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];
}```
SDK中,如果發(fā)生自動登錄,會有以下回調(diào):
*/- (void)didAutoLoginWithError:(EMError *)aError
//添加回調(diào)監(jiān)聽代理:
[[EMClient sharedClient] addDelegate:self delegateQueue:nil];```
重連
當?shù)艟€時,iOS SDK 會自動重連,只需要監(jiān)聽重連相關(guān)的回調(diào),不需要進行任何操作
- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState;
* SDK連接服務(wù)器的狀態(tài)變化時會接收到該回調(diào)
*
* 有以下幾種情況虽画,會引起該方法的調(diào)用:
* 1. 登錄成功后舞蔽,手機無法上網(wǎng)時,會調(diào)用該回調(diào)
* 2. 登錄成功后狸捕,網(wǎng)絡(luò)狀態(tài)變化時喷鸽,會調(diào)用該回調(diào)
*
* @param aConnectionState 當前狀態(tài) */
- 退出登錄
- 主動退出
- 主動退出
EMError *error = [[EMClient sharedClient] logout:YES];
if (!error) {
NSLog(@"退出成功");
}```
被動退出登錄
正在登錄的賬號在另一臺設(shè)備上登錄众雷;
正在登錄的賬號被從服務(wù)器端刪除灸拍。
logout:YES:是否解除 device token 的綁定,在被動退出時 SDK 內(nèi)部處理砾省,不需要調(diào)用退出方法
當?shù)卿涃~號在其他設(shè)備登錄時會接受到該回調(diào)
- (void)didLoginFromOtherDevice;
當前登錄賬號已經(jīng)被從服務(wù)器端刪除時會收到該回調(diào)
- (void)didRemovedFromServer;
消息
消息:IM 交互實體鸡岗,在 SDK 中對應(yīng)的類型是 EMMessage。EMMessage 由 EMMessageBody 組成编兄。構(gòu)造文字信息
構(gòu)造圖片消息
構(gòu)造位置信息
構(gòu)造語音消息
構(gòu)造視頻消息
構(gòu)造文件消息
構(gòu)造透傳消息
SDK提供的一種特殊類型的消息,即CMD,不會存db,也不會走APNS,類似一種指令型的消息,比如您的服務(wù)器是要通知客戶端做某些操作,您可以服務(wù)器和客戶端提前約定好某個字段,當客戶端收到約定好的字段時,執(zhí)行某種特殊的操作構(gòu)造擴展消息
當 SDK 提供的消息類型不滿足需求時轩性,開發(fā)者可以通過擴展自 SDK 提供的文本、語音狠鸳、圖片揣苏、位置等消息類型,從而生成自己需要的消息類型件舵。
這里是擴展自文本消息卸察,如果這個自定義的消息需要用到語音或者圖片等,可以擴展自語音铅祸、圖片消息坑质,亦或是位置消息。
- 插入消息
- 更新消息屬性
- 會話
- 新建/獲取一個會話
- 刪除會話
刪除單個會話
刪除批量會話根據(jù) conversationId
獲取會話列表(3種方法)
獲取或創(chuàng)建
EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:@"8001" type:EMConversationTypeChat createIfNotExist:YES];獲取內(nèi)存中所有會話
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];```
獲取DB中的所有會話
[NSArray](http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/) *conversations = [[EMClient sharedClient].chatManager loadAllConversationsFromDB];```
- 消息檢索
可以通過關(guān)鍵字临梗、消息類型涡扼、開始結(jié)束時間檢索某個會話中的消息。
- 聊天
- 發(fā)送消息(異步方法)
- 接收消息1>注冊消息回調(diào) 2>在線普通消息回調(diào) 3> 透傳在線消息回調(diào)
- 解析普通消息
- 解析透傳消息
- 解析消息擴展屬性
- 自動下載消息中的附件
SDK 接收到消息后盟庞,會默認下載:圖片消息的縮略圖吃沪,語音消息的語音,視頻消息的視頻第一幀什猖。
**請先判斷你要下載附件沒有下載成功之后票彪,在調(diào)用以下下載方法萎津,否則SDK下載方法會再次從服務(wù)器上獲取附件。**
- 聊天會話功能擴展
EaseUI 提供現(xiàn)成的聊天會話 ViewController抹镊,可以通過繼承 EaseMessageViewController 方式(參考 ChatDemo-UI3.0 中 ChatViewController)實現(xiàn)對聊天會話的擴展锉屈。
也可以直接使用 EaseMessageViewController,通過 EaseMessageViewControllerDelegate 和 EaseMessageViewControllerDataSource 兩個協(xié)議實現(xiàn)對 EaseMessageViewController 的擴展垮耳。
- 自定義聊天樣式
EaseMessageViewControllerDelegate
獲取自定義消息 cell颈渊,根據(jù) messageModel,用戶自己判斷是否顯示自定義消息 cell终佛。如果返回 nil 會顯示默認俊嗽;如果返回 cell 會顯示用戶自定義消息cell。
自定義用戶的頭像
/*! @method
@brief 點擊消息頭像
@discussion 獲取用戶點擊頭像回調(diào)
@param viewController 當前消息視圖
@param messageModel 消息模型
@result
*/
- (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel;
//獲取用戶點擊頭像回調(diào)的樣例: - (void)messageViewController:(EaseMessageViewController *)viewController didSelectAvatarMessageModel:(id<IMessageModel>)messageModel
{
//UserProfileViewController用戶自定義的個人信息視圖
//樣例的邏輯是選中消息頭像后铃彰,進入該消息發(fā)送者的個人信息
UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.message.from];
[self.navigationController pushViewController:userprofile animated:YES];```