集成環(huán)信EaseUI

? ? ? ? 記錄下項(xiàng)目中集成環(huán)信的坑。當(dāng)做個(gè)總結(jié)。1.昵稱顯示,2.自定義表情,3.忘了(好像沒(méi)了)

一、集成環(huán)信

? ? ? ? 項(xiàng)目用到的環(huán)信即時(shí)通訊云V3.0,官方文檔點(diǎn)這里。環(huán)信有自己的Demo,里面很多功能都包含了,足夠項(xiàng)目需求了,具體怎么集成就不說(shuō)了,可以看文檔,也不難。環(huán)信的第三方如果和自己的項(xiàng)目的第三方?jīng)_突就把環(huán)信的刪掉,在替換相關(guān)方法就行。環(huán)信demo里集成了紅包功能,紅包里已經(jīng)集成好支付寶了,所以想集成支付寶的可以直接用。

二、昵稱

? ? ? ? 公司的服務(wù)器保存用戶信息,環(huán)信那邊不做保存。環(huán)信官方文檔提供了兩種方法:昵稱和頭像的顯示與更新。


方法一:從APP服務(wù)器獲取昵稱和頭像

昵稱和頭像的獲取:當(dāng)收到一條消息(群消息)時(shí),得到發(fā)送者的用戶ID,然后查找手機(jī)本地?cái)?shù)據(jù)庫(kù)是否有此用戶ID的昵稱和頭像,如沒(méi)有則調(diào)用APP服務(wù)器接口通過(guò)用戶ID查詢出昵稱和頭像,然后保存到本地?cái)?shù)據(jù)庫(kù)和緩存,下次此用戶發(fā)來(lái)信息即可直接查詢緩存或者本地?cái)?shù)據(jù)庫(kù),不需要再次向APP服務(wù)器發(fā)起請(qǐng)求。

昵稱和頭像的更新:當(dāng)點(diǎn)擊發(fā)送者頭像時(shí)加載用戶詳情時(shí)從APP服務(wù)器查詢此用戶的具體信息然后更新本地?cái)?shù)據(jù)庫(kù)和緩存。當(dāng)用戶自己更新昵稱或頭像時(shí),也可以發(fā)送一條透?jìng)飨⒌狡渌脩艉陀脩羲诘娜海瑏?lái)更新該用戶的昵稱和頭像。

方法二:從消息擴(kuò)展中獲取昵稱和頭像

昵稱和頭像的獲取:把用戶基本的昵稱和頭像的URL放到消息的擴(kuò)展中,通過(guò)消息傳遞給接收方,當(dāng)收到一條消息時(shí),則能通過(guò)消息的擴(kuò)展得到發(fā)送者的昵稱和頭像URL,然后保存到本地?cái)?shù)據(jù)庫(kù)和緩存。當(dāng)顯示昵稱和頭像時(shí),請(qǐng)從本地或者緩存中讀取,不要直接從消息中把賦值拿給界面(否則當(dāng)用戶昵稱改變后,同一個(gè)人會(huì)顯示不同的昵稱)。

昵稱和頭像的更新:當(dāng)擴(kuò)展消息中的昵稱和頭像 URI 與當(dāng)前本地?cái)?shù)據(jù)庫(kù)和緩存中的相應(yīng)數(shù)據(jù)不同的時(shí)候,需要把新的昵稱保存到本地?cái)?shù)據(jù)庫(kù)和緩存,并下載新的頭像并保存到本地?cái)?shù)據(jù)庫(kù)和緩存。

方案對(duì)比

昵稱或頭像處理的方法一和方法二區(qū)別:

方法一:在發(fā)送消息時(shí)不含有任何擴(kuò)展,收消息時(shí)如果本地不存在發(fā)送人的用戶信息則需要從APP服務(wù)器查詢發(fā)送人的昵稱和頭像的 URL。

方法二:在發(fā)送消息時(shí)帶有包含昵稱和頭像 URL 的消息擴(kuò)展,收到消息時(shí)即可從消息擴(kuò)展中取出,不需要再去 APP 服務(wù)器獲取。

方法二和方法一相比:

優(yōu)點(diǎn):收到消息立即顯示昵稱不用等待APP服務(wù)器返回?cái)?shù)據(jù)后顯示。

缺點(diǎn):每條消息都要帶有擴(kuò)展,增加消息體積,每次發(fā)消息都有一些不必要的數(shù)據(jù)。


根據(jù)自己的情況選擇適合的,我用到的是第二種方法。

1.EaseMessageViewController在該頁(yè)面中有提供發(fā)送消息拓展的方法。


- (void)sendTextMessage:(NSString *)text;

- (void)sendTextMessage:(NSString *)text withExt:(NSDictionary*)ext;

- (void)sendImageMessage:(UIImage *)image;

- (void)sendLocationMessageLatitude:(double)latitude

longitude:(double)longitude

andAddress:(NSString *)address;

- (void)sendVoiceMessageWithLocalPath:(NSString *)localPath

duration:(NSInteger)duration;

- (void)sendVideoMessageWithURL:(NSURL *)url;


- (void)sendLocationMessageLatitude:(double)latitude

longitude:(double)longitude

andAddress:(NSString *)address

{

NSDictionary *ext = [self userInfo];

EMMessage *message = [EaseSDKHelper sendLocationMessageWithLatitude:latitude

longitude:longitude

address:address

to:self.conversation.conversationId

messageType:[self _messageTypeFromConversationType]

messageExt:ext];

[self _sendMessage:message];

}

每個(gè)方法都帶有ext字典可以攜帶拓展,把用戶的頭像和昵稱存進(jìn)去就可以在對(duì)面的方法中處理。

在ChatViewController中可以對(duì)發(fā)送過(guò)來(lái)的ext拓展消息進(jìn)行處理。在下面這個(gè)方法里處理就可以,?

- (id)messageViewController:(EaseMessageViewController *)viewController

modelForMessage:(EMMessage *)message

如果只是集成單聊的這些就足夠了,如果還要群組的,就要用到本地?cái)?shù)據(jù)庫(kù),存儲(chǔ)用戶信息,然后在取出來(lái)顯示。數(shù)據(jù)用的是sqlite3.0,數(shù)據(jù)的操作我就不說(shuō)了,你們可以自己研究。寫(xiě)個(gè)數(shù)據(jù)庫(kù)操作管理類,在工程里搜索profileEntity,把環(huán)信里的云數(shù)據(jù)庫(kù)替換成本地就可以讓環(huán)信的群@功能,群詳細(xì),搶紅包消息提示的用戶顯示昵稱了。

二、集成自定義表情

這個(gè)很簡(jiǎn)單,在ChatViewController中找到這個(gè)方法,在這個(gè)方法中進(jìn)行添加就可以加入自定義表情了。

- (NSArray*)emotionFormessageViewController:(EaseMessageViewController *)viewController

環(huán)信demo自帶的兔斯基表情也是在這里處理的,可以參考下,就知道怎么添加自定義表情了。

三、暫時(shí)沒(méi)啥好說(shuō)的了。

四、最近都在趕項(xiàng)目,好久沒(méi)時(shí)間寫(xiě)點(diǎn)東西。今天有空,就寫(xiě)點(diǎn)干貨,希望對(duì)集成環(huán)信的朋友能有點(diǎn)幫助。環(huán)信的客服還是挺給力的,有啥不懂的就去問(wèn)吧,問(wèn)著就知道怎么弄了。

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

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