环信:发送头像和昵称(从消息扩展中获取)

字数1249  阅读2153  评论4  喜欢4

昵称和头像

注意:以下是在官方Demo3.0的基础上修改的。官方Demo下载地址

环信提供了获取头像和昵称的两种方式:

方法一 从APP服务器获取昵称和头像

  • 昵称和头像的获取:当收到一条消息(群消息)时,得到发送者的用户ID,然后查找手机本地数据库是否有此用户ID的昵称和头像,如没有则调用APP服务器接口通过用户ID查询出昵称和头像,然后保存到本地数据库和缓存,下次此用户发来信息即可直接查询缓存或者本地数据库,不需要再次向APP服务器发起请求

  • 昵称和头像的更新:当点击发送者头像时加载用户详情时从APP服务器查询此用户的具体信息然后更新本地数据库和缓存。当用户自己更新昵称或头像时,也可以发送一条透传消息到其他用户和用户所在的群,来更新该用户的昵称和头像。

方法二 从消息扩展中获取昵称和头像

  • 昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据库和缓存。当显示昵称和头像时,请从本地或者缓存中读取,不要直接从消息中把赋值拿给界面(否则当用户昵称改变后,同一个人会显示不同的昵称)。

  • 昵称和头像的更新:当扩展消息中的昵称和头像URI与当前本地数据库和缓存中的相应数据不同的时候,需要把新的昵称保存到本地数据库和缓存,并下载新的头像并保存到本地数据库和缓存。

本文主要介绍第二种方法:给消息添加扩展,用于携带昵称和头像信息。先来看下效果:

效果图

在消息发送时,设置并发送扩展消息

  1. 因为是在官方Demo里修改的,但对其还不熟悉,咋办呢?
    其实,环信是基于XMPP优化而来的,而XMPP消息又是基于XML的。已经知道在XMPP里扩展消息的方式了,这里应该也是类似的。只不过首先要找到发送消息的时机。可是我不知道在哪?这里要善用搜索和断点。下面简要的说下我的思路:在项目里搜索【消息】,找到了EaseChatToolbar.h中的- (void)didSendText:(NSString *)text;方法(别问我为什么是这个方法,不会告诉你我也是查了很久的)。然后在.m中该方法处设置断点,运行程序,输入文字后点击发送按钮。然后看看程序执行的流程是什么。依次向上修改方法,添加头像和昵称信息。如图:

    工程截图

  2. 修改- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text中的调用方法。并设定头像和昵称字典,代码如下:
    - (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];//新增头像和昵称扩展NSDictionary *ext = @{@"accountName":accountName,@"img":@"http://7xo30v.com1.z0.glb.clouddn.com/animal.png"};[self.delegate didSendText:textView.text withExt:ext];//结束self.inputTextView.text = @"";[self _willShowInputTextViewToHeight:[self _getTextViewContentH:self.inputTextView]];;}return NO;}return YES;
    }
  3. 从新运行程序,发送消息,查看日志。在<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>
  4. 在聊天框中显示消息里地头像和昵称。因为是测试,所以在ChatViewController.m直接将消息中的昵称和头像赋值给视图(实际应用中不推荐这么做,正如环信方法二缺点所说的,需要自己缓存,从本地提取信息)。
- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id<IMessageModel>)model
{if (model.bodyType == eMessageBodyType_Text   ) {NSString *CellIdentifier = [CustomMessageCell cellIdentifierWithModel:model];//发送cellCustomMessageCell *sendCell = (CustomMessageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];// Configure the cell...if (sendCell == nil) {sendCell = [[CustomMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier model:model];sendCell.selectionStyle = UITableViewCellSelectionStyleNone;}//设定头像和昵称model.avatarURLPath = model.message.ext[@"img"];model.nickname = model.message.ext[@"accountName"];sendCell.model = model;return sendCell;}return nil;
}

最后,这里只是修改了text类型消息的扩展,还有其他几种类型的消息扩展也可以按照这样来处理。

环信 头像 昵称处理相关推荐

  1. 草草们的忧伤:环信IM昵称和头像

    最近天气转冷了,写篇文章,给大家暖暖心~ 在环信草草群(群号:340452063)中,无论是安卓还是IOS或者WebIM,每天遇到最多的问题就是"如何显示昵称和头像",鉴于大家的墙 ...

  2. Android环信爬坑指北(二)头像昵称好友备注显示

      在上一篇文章中提到了要在初始化的时候,设置用户信息提供者类--EaseUserProfileProvider,用以获取用户信息.下面我们来看一下 EaseUserProfileProvider 是 ...

  3. 环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法

    环信服务器并不保存用户的头像用户名,但实际开发需要设置用户昵称头像.下面提供一个简单的办法设置用户的头像昵称,这里的头像昵称从自己的服务器获取的并且保存到本地. 1.服务端的设计 服务端设计比较简单, ...

  4. android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...

    老司机带你们5分钟实现昵称头像的显示,车要开了,话不多说,快快上车~ 一.将简版demo里的cache包(5个java文件)复制到自己项目里. 下载环信android简版Demo: 环信Android ...

  5. android环信群聊显名称,Android环信群聊插入头像和昵称

    最近在用环信开发项目中,发现环信的后台并不支持录入头像和昵称. 群聊的list列表中用户的头像是默认图,昵称是用户的id. 这显然很不友好,环信给出的方案如下: 方法一:从APP服务器获取昵称和头像 ...

  6. android 头像简称,Android环信显示头像及昵称的简单方法

    在我们日常应用开发中,很多时候产品需要IM聊天功能.考虑到时间.难度等问题一般会选择集成一些比较稳定的第三方SDK来实现功能.最近的项目也有IM需求,因为之前用过环信,感觉还不错,所以就再次使用了环信 ...

  7. 环信php修改头像,环信第二波 更改聊天头像,昵称等问题

    基于上次那篇有关环信的个人集成方法被环信周刊官方收录以后,一直没有再写环信相关知识. 今天我将在这继续写一下关于环信获取用户头像和昵称的方法.环信官方文档里面有两种方法, 1:通过自己后台根据用户ID ...

  8. 解决Android设置环信显示头像和昵称问题

    1.问题 在使用环信进行及时聊天时或者群聊时,显示用户名称的往往是其环信username(例如165983547),但我们真正希望显示的是用户的昵称(例如 张三),而聊天时候的头像默认是环信默认头像而 ...

  9. Android接入环信扩展消息显示头像、昵称

    Android环信官方集成文档:http://docs.easemob.com/im/200androidclientintegration/10androidsdkimport 我在项目里集成环信时 ...

最新文章

  1. mysql和mongodb对比互补
  2. mysql 同步 存储过程_mysql 存储过程 实现数据同步
  3. php中int()强制转换,php下intval()和int强制转换使用的区别是什么
  4. Python爬虫彩票数据(120期)爬取
  5. python入门基础系列_Python3基础系列-基本入门语法
  6. openssl之EVP系列之1---算法封装
  7. 网络基础知识--子网划分
  8. 参考平面及其高度_GCB | 盐沼和红树林湿地类型的转变会改变亚热带湿地对于海平面上升的脆弱性么?...
  9. 【Linux】Linux-路径切换-相对路径和绝对路径快捷键记录linux 知识点记录
  10. JQUERY拼接数组
  11. 3_10 MediaMode 中介者模式
  12. 在ubuntu中安装minicom时出现device /dev/tty8 is locked解决办法
  13. SharePoint 2013的100个新功能之网站管理(一)
  14. 阿里云峰会|数据库也能自动驾驶?DAS全天候给你保驾护航!
  15. python+opencv中imread函数第二个参数的含义
  16. HYSBZ 2145 悄悄话
  17. linux 系统安装mysql (rpm)
  18. 这款国产神器,我爱了
  19. c语言的基本案例猴子,[转载]猴子选大王问题(C语言实现)
  20. java web 题_Java+web考试题预备

热门文章

  1. 半导体芯片行业cim课程实习心得总结
  2. 官宣!华为断臂为了自救
  3. aws 安全组 acl_对AWS安全组和网络ACL进行故障排除时应了解的知识
  4. Macbook M1 相关软件适配和配置
  5. 借酒消愁?美啤酒屋为无薪联邦雇员提供免费啤酒
  6. QQ医生/360安全卫士的漏洞补丁硬盘存放位置
  7. try 中的return
  8. 【KingbaseES】liunx下KESV8如何更换授权license.dat
  9. 一文!彻底弄懂前端缓存
  10. GAN生成式对抗网络总结