参考环信官方解决方案。
使用消息扩展,每条消息都包含发送者的用户信息和发送时间(user_id,nick_name,user_photo,send_time)
-
本地数据库,使用realm,在获取到用户信息(后台返回)时,存储更新到本地数据库
/// 用户信息模型 class UserInfo: Object { dynamic var nick_name = "" dynamic var user_photo = "" dynamic var user_id = "" dynamic var update_tome = "" //更新时间 // 设置主键 override static func primaryKey() -> String? { return "user_id" } // 设置搜索字段 override static func indexedProperties() -> [String] { return ["user_id"] } /// 更新用户信息 class func updateUserInfo(user_id: String,nick_name: String,user_photo: String){ let realm = try! Realm() var value = ["user_id": user_id] if user_photo.length > 0 { value["user_photo"] = user_photo } if nick_name.length > 0 { value["nick_name"] = nick_name } try! realm.write { realm.create(UserInfo.self,value: value, update: true) } } /// 通过UserID搜索用户 class func searchUser(user_id: String) -> UserInfo? { let realm = try! Realm() let result = realm.objects(UserInfo.self).filter("user_id == \"\(user_id)\"") if result.count > 0 { return result[0] } return nil } }
-
实现EaseConversationListViewController的EaseConversationListViewControllerDataSource协议
func conversationListViewController(_ conversationListViewController: EaseConversationListViewController!, modelFor conversation: EMConversation!) -> IConversationModel! { 通过扩展消息获取user_id 通过user_id搜索用户信息 如果搜到用户信息,则对用户信息钟的update_time,和消息扩展的send_time对比,如果send_time是最近的,则更新本地数据,然后在使用用户信息 没有搜到直接用扩展消息中的用户信息,并更新到本地 }