融云IM簡介
融云的定位是只專注即時通訊的消息發(fā)送功能纵柿,融云服務器不會維護用戶的好友關系及群組關系梦湘,這就需要集成的業(yè)務系統(tǒng)來管理用戶的好友關系與群關系等贱枣。 通過融云魄藕,只需要知道目標用戶的targetId就可以向目標用戶發(fā)送消息典徊。
如何連接融云服務器 杭煎?
連接融云服務器,需要向融云服務器傳遞將要連接服務器的用戶唯一標識宫峦,融云會根據(jù)傳遞的userid(唯一標識)來返回訪問融云服務器的令牌token. 關于userid的選取岔帽,可以使用業(yè)務系統(tǒng)的userid(建議),或者單獨建立一套唯一id的體系給融云服務器导绷。格式不限犀勒,可以為數(shù)字,GUID妥曲,或任意的字符串(漢字除外)
融云會保存哪些信息贾费?
對于用戶,融云會去保存用戶的唯一標識userid,昵稱name, 頭像portraitUri 的信息檐盟,這些信息被封裝到RCUserInfo 類中褂萧。如果想要知道某個用戶的信息也可以通過唯一標識userid向融云服務器來獲取。
融云還會幫助我們管理群組中的成員列表葵萎。融云不關心你建了幾個群导犹,但卻需要管理每個群下的成員,因為當在群中發(fā)送消息時羡忘,融云需要知道向哪些用戶推送群消息谎痢,從這點上就可以看出來。業(yè)務系統(tǒng)也需要管理群及群成員卷雕,當用戶進群與退群時节猿,業(yè)務系統(tǒng)需要與融云保持同步 (進群,退群融云都有接口服務提供)
聊天消息漫雕,消息的發(fā)送都需要經(jīng)過融云服務器滨嘱,所以聊天消息融云是會存儲的,但消息的保存時限會有免費用戶與付費用戶的不同浸间。
與業(yè)務系統(tǒng)的集成
首先需要到融云的官網(wǎng)創(chuàng)建一個自己的應用太雨,成功后會拿到AppKey。在AppDelegate didFinishLaunchingWithOptions:方法中做融云的初始化操作
融云SDK初始化
建議在用戶登錄后使用業(yè)務系統(tǒng)的userid(唯一標識)去獲取令牌token,并使用此token嘗試連接融云服務器魁蒜。在用戶退出時囊扳,斷開與融云服務器的連接煤墙。 如果應用有持久保存用戶登錄的特性,那么在首次獲取到令牌token后宪拥,也需要持久存儲。當應用重啟后需要根據(jù)存儲的令牌token做重連操作铣减。
在拿到令牌token去建立與融云服務器的連接時她君,可能會因token過期,或token 不正確導致連接失敗的情況葫哗。這里可以根據(jù)不同策略做不同處理缔刹,比如當失敗后重新嘗試獲取token并連接或干脆提示用戶登錄失效,請重新登錄劣针。
會話列表如何自定義校镐?
融云提供了兩套framework IMKit, IMLib. IMKit中融云封裝了會話,聊天等UI界面捺典。 使用IMKit可以很方便的將融云集成進來鸟廓。其中主要包含如下兩個主要的控制器:
RCConversationListViewController 會話列表控制器
RCConversationViewController 聊天窗口
在集成時,我們可以直接繼承RCConversationListViewController 來實現(xiàn)會話列表襟己,如果默認的會話列表展示無法滿足你的需要引谜,你也可以自定義cell的展示。但需要通過修改會話模型RCConversationModel的conversationType類型來告訴sdk 調(diào)用自定義cell的回調(diào)方法擎浴。
修改會話類型為自定義會話
只有當RCConversationModel的conversationModelType 值為 RC_CONVERSATION_MODEL_TYPE_CUSTOMIZATION時自定義cell的回調(diào)方法才會被執(zhí)行
實現(xiàn)返回自定義cell的回調(diào)方法
會話列表中的用戶頭像员咽,群組縮略圖如何獲取 ??
集成后贮预,在發(fā)消息時贝室,會碰到用戶頭像或群組圖無法加載的情況。這時就需要檢查在初始時是否指定了userInfoDataSource, groupDataSource的代理仿吞。這兩個代理方法中有相關的返回用戶信息滑频,群組信息的回調(diào)方法,只需要在這個回調(diào)方法中返回用戶信息茫藏,群組信息就可以解決這個問題误趴。
設置用戶信息源和群組信息源
可以看到,我把獲取用戶信息和群組信息源的代理都指向了一個名為RCDataManager的單例類中务傲,在這個類里實現(xiàn)了返回用戶信息與群組信息的方法
根據(jù)userId獲取用戶信息
如上是獲取用戶信息的回調(diào)方法凉当,首先判斷回調(diào)傳回的userid是否是當前登錄用戶自己。如果是自己售葡,從業(yè)務系統(tǒng)中將用戶id, 昵稱看杭,頭像等信息構(gòu)造出來RCUserInfo對象,并告訴融云當前用戶的信息
[RCIM sharedRCIM].currentUserInfo = myselfInfo;
如果用戶不是自己挟伙,對于群聊用戶楼雹,用戶與用戶之間沒有朋友關系,如果要獲取用戶的信息,就只能是通過融云的后端接口贮缅,根據(jù)userid唯一標識來獲取了榨咐。
補上連接融云時的代碼
通過令牌token連接融云服務器
在連接融云成功后 ,同步獲取一下群組的列表信息谴供,并緩存块茁。群組列表中存儲的都是RCGroup對象。緩存群組信息桂肌,便于在獲取某個群組信息時使用数焊。
根據(jù)groupId獲取群信息
通過實現(xiàn)該代理方法,融云會在適當?shù)臅r機調(diào)用此方法返回群組的信息
如何在用戶信息變化時崎场,更新用戶信息(頭像佩耳,名稱)?
當用戶更新了業(yè)務系統(tǒng)中的頭像及名稱后如何同步會話列表及聊天窗口用戶的信息呢谭跨?sdk為我們提供了一個方法就可以解決
更新當前用戶頭像
群聊@用戶時干厚,如何調(diào)出群成員列表 ?
在群聊時饺蚊,通常會針對其中的某個用戶發(fā)送一條消息萍诱,這時就用到了@某個用戶的功能。融云sdk提供了協(xié)議方法來獲取某個群組中所有的成員污呼,并通過屬性開關的方式來控制是否支持@功能裕坊,在融云初始化進行全局設置。
開啟@功能并指定代理訂閱者
當然我們還需要實現(xiàn)RCIMGroupMemberDataSource中的一個協(xié)議方法燕酷,用于返回所有的群成員籍凝,如下:
實現(xiàn)獲取群組成員的回調(diào)方法
未完待續(xù).....
轉(zhuǎn)載自:http://www.reibang.com/p/fdf5cc5f365e