环信的头像昵称,是一个老大难的问题,但是环信负责的是im的通讯能力,它只负责消息的通畅,头像昵称啥的,不是它要处理的,所以,只能给出一些建议性的解决方案。
从实际角度出发,有几种场景需要使用头像:
1、聊天的详情页面。
2、会话列表页面。
3、好友页面。
针对以上几个场景,
在聊天页面,接受消息的时候,需要知道对方叫什么,所以只需要发送方发消息中,把自己的名字,昵称带过来就行。
这里可以选择用message的属性ext来实现。
message.ext = @{@"nick":@"李明"};
当接收方(韩梅梅)收到消息后,只需要解析message中的ext字段,就可以知道发送方叫李明。
之后再ui上显示就可以了。此处的处理,单聊和群聊是一样的。
注意事项:
发送方设置ext一定要在消息发送之前。
2、会话列表中展示:
上文说道,ext属性是message的,而会话的对象是conversation。此时,如果需要得到对方最后一条消息,可以使用
EMConversation对应的属性lastReceivedMessage。这个属性的描述是
/*!
- ~chinese
- 收到的对方发送的最后一条消息
- @result 消息实例
- ~english
- Get last received message
- @result Message instance
*/
- (EMMessage *)lastReceivedMessage;
这个时候,我们只需要去去 conversation.lastReceivedMessage.ext, 也就可以得到会话列表的头像了。
注意:
群聊里,不能通过最后一条对方发的消息来处理,环信的群属性中,没有头像这一条,所以也不能直接从环信这边取,但是它有群描述。这里提供两个思路:
- 把群属性放到自己的服务器,群头像也放到自己的服务器上,然后根据群id去自己服务器获取。
- 把头像放到群名描述里,之后用自己定义的格式隔开,取头像的时候,就直接从群描述的url来取。
3、好友列表中头像和昵称的获取。
好友列表,好友的信息环信并没有提供多少属性,只提供了环信id。所以这个地方我们就没办法从环信这边获取任何信息了。这个地方说下环信demo的解决方式:
环信demo中,用了一个第三方的云服务叫Parse,Parse的作用,是可以把k-v的键值对存到云服务器上。环信demo就把好友列表中,好友的环信id作为key,其他属性作为value存到了Parse上。这样在展示的时候,就直接去parse上下载,得到对应的昵称和url。
注意:
不过就我了解,国外的Parse服务已经停止了。目前demo里用的是环信自己搭建的一个Parse服务,环信官方也没有承诺该服务始终免费,记得当时也是说过是为了demo展示用才搭建的,所以建议还是自己找一些其他提供类似功能的云服务来使用比较好。
更多APP开发常见问题汇总http://www.imgeek.org/article/825308783