環(huán)信:發(fā)送頭像和昵稱(從消息擴(kuò)展中獲取)

昵稱和頭像

注意:以下是在官方Demo3.0的基礎(chǔ)上修改的袱蜡。官方Demo下載地址

環(huán)信提供了獲取頭像和昵稱的兩種方式:

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

  • 昵稱和頭像的獲人坎洹:當(dāng)收到一條消息(群消息)時(shí),得到發(fā)送者的用戶ID坪蚁,然后查找手機(jī)本地?cái)?shù)據(jù)庫是否有此用戶ID的昵稱和頭像奔穿,如沒有則調(diào)用APP服務(wù)器接口通過用戶ID查詢出昵稱和頭像镜沽,然后保存到本地?cái)?shù)據(jù)庫和緩存,下次此用戶發(fā)來信息即可直接查詢緩存或者本地?cái)?shù)據(jù)庫贱田,不需要再次向APP服務(wù)器發(fā)起請(qǐng)求
  • 昵稱和頭像的更新:當(dāng)點(diǎn)擊發(fā)送者頭像時(shí)加載用戶詳情時(shí)從APP服務(wù)器查詢此用戶的具體信息然后更新本地?cái)?shù)據(jù)庫和緩存缅茉。當(dāng)用戶自己更新昵稱或頭像時(shí),也可以發(fā)送一條透傳消息到其他用戶和用戶所在的群男摧,來更新該用戶的昵稱和頭像蔬墩。

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

  • 昵稱和頭像的獲取:把用戶基本的昵稱和頭像的URL放到消息的擴(kuò)展中耗拓,通過消息傳遞給接收方拇颅,當(dāng)收到一條消息時(shí),則能通過消息的擴(kuò)展得到發(fā)送者的昵稱和頭像URL乔询,然后保存到本地?cái)?shù)據(jù)庫和緩存蔬蕊。當(dāng)顯示昵稱和頭像時(shí),請(qǐng)從本地或者緩存中讀取哥谷,不要直接從消息中把賦值拿給界面(否則當(dāng)用戶昵稱改變后,同一個(gè)人會(huì)顯示不同的昵稱)麻献。
  • 昵稱和頭像的更新:當(dāng)擴(kuò)展消息中的昵稱和頭像URI與當(dāng)前本地?cái)?shù)據(jù)庫和緩存中的相應(yīng)數(shù)據(jù)不同的時(shí)候们妥,需要把新的昵稱保存到本地?cái)?shù)據(jù)庫和緩存,并下載新的頭像并保存到本地?cái)?shù)據(jù)庫和緩存勉吻。

本文主要介紹第二種方法:給消息添加擴(kuò)展监婶,用于攜帶昵稱和頭像信息。先來看下效果:


效果圖

在消息發(fā)送時(shí)齿桃,設(shè)置并發(fā)送擴(kuò)展消息

  1. 因?yàn)槭窃诠俜紻emo里修改的惑惶,但對(duì)其還不熟悉,咋辦呢短纵?
    其實(shí)带污,環(huán)信是基于XMPP優(yōu)化而來的,而XMPP消息又是基于XML的香到。已經(jīng)知道在XMPP里擴(kuò)展消息的方式了鱼冀,這里應(yīng)該也是類似的。只不過首先要找到發(fā)送消息的時(shí)機(jī)悠就∏鳎可是我不知道在哪?這里要善用搜索和斷點(diǎn)梗脾。下面簡要的說下我的思路:在項(xiàng)目里搜索【消息】荸型,找到了EaseChatToolbar.h中的- (void)didSendText:(NSString *)text;方法(別問我為什么是這個(gè)方法,不會(huì)告訴你我也是查了很久的)炸茧。然后在.m中該方法處設(shè)置斷點(diǎn)瑞妇,運(yùn)行程序稿静,輸入文字后點(diǎn)擊發(fā)送按鈕。然后看看程序執(zhí)行的流程是什么踪宠。依次向上修改方法自赔,添加頭像和昵稱信息。如圖:
    工程截圖
  2. 修改- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text中的調(diào)用方法柳琢。并設(shè)定頭像和昵稱字典绍妨,代碼如下:
 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) {
        if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
            //注釋掉的 -- [self.delegate didSendText:textView.text];
            //新增頭像和昵稱擴(kuò)展
            NSDictionary *ext = @{@"accountName":accountName,@"img":@"http://7xo30v.com1.z0.glb.clouddn.com/animal.png"};
            [self.delegate didSendText:textView.text withExt:ext];
            //結(jié)束
            self.inputTextView.text = @"";
            [self _willShowInputTextViewToHeight:[self _getTextViewContentH:self.inputTextView]];;
        }
        return NO;
    }
    return YES;
}
  1. 從新運(yùn)行程序,發(fā)送消息柬脸,查看日志他去。在<body>元素里包含了額外添加的昵稱和頭像信息。如下:
    ChatDemoJCV1[17136:720f] SEND: <message type="chat" to="easemob-demo#chatdemoui_zlanchun1@easemob.com" id="151a0fcc287"> <body>{"ext":{"img":"http://7xo30v.com1.z0.glb.clouddn.com/animal.png","accountName":"zlanchun"},"to":"zlanchun1","bodies":[{"type":"txt","msg":"You"}],"from":"zlanchun"}</body></message>
  2. 在聊天框中顯示消息里地頭像和昵稱倒堕。因?yàn)槭菧y試灾测,所以在ChatViewController.m直接將消息中的昵稱和頭像賦值給視圖(實(shí)際應(yīng)用中不推薦這么做,正如環(huán)信方法二缺點(diǎn)所說的垦巴,需要自己緩存媳搪,從本地提取信息)。
- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id<IMessageModel>)model
{
    if (model.bodyType == eMessageBodyType_Text   ) {
        NSString *CellIdentifier = [CustomMessageCell cellIdentifierWithModel:model];
        //發(fā)送cell
        CustomMessageCell *sendCell = (CustomMessageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        // Configure the cell...
        if (sendCell == nil) {
            sendCell = [[CustomMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier model:model];
            sendCell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
        //設(shè)定頭像和昵稱
        model.avatarURLPath = model.message.ext[@"img"];
        model.nickname = model.message.ext[@"accountName"];
        sendCell.model = model;
        return sendCell;
    }
    return nil;
}

最后骤宣,這里只是修改了text類型消息的擴(kuò)展秦爆,還有其他幾種類型的消息擴(kuò)展也可以按照這樣來處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憔披,一起剝皮案震驚了整個(gè)濱河市等限,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芬膝,老刑警劉巖望门,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锰霜,居然都是意外死亡筹误,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門癣缅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纫事,“玉大人,你說我怎么就攤上這事所灸±龌蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵爬立,是天一觀的道長钾唬。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么抡秆? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任奕巍,我火速辦了婚禮,結(jié)果婚禮上儒士,老公的妹妹穿的比我還像新娘的止。我一直安慰自己,他們只是感情好着撩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布诅福。 她就那樣靜靜地躺著,像睡著了一般拖叙。 火紅的嫁衣襯著肌膚如雪氓润。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天薯鳍,我揣著相機(jī)與錄音咖气,去河邊找鬼。 笑死挖滤,一個(gè)胖子當(dāng)著我的面吹牛崩溪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斩松,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悯舟,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了砸民?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤奋救,失蹤者是張志新(化名)和其女友劉穎岭参,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝艘,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡演侯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了背亥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秒际。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狡汉,靈堂內(nèi)的尸體忽然破棺而出娄徊,到底是詐尸還是另有隱情,我是刑警寧澤盾戴,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布寄锐,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏橄仆。R本人自食惡果不足惜剩膘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盆顾。 院中可真熱鬧怠褐,春花似錦、人聲如沸您宪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚕涤。三九已至筐赔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揖铜,已是汗流浹背茴丰。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留天吓,地道東北人贿肩。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像龄寞,于是被迫代替她去往敵國和親汰规。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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