參考環信官方解決方案。
使用消息擴展,每條消息都包含發送者的用戶信息和發送時間(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是最近的,則更新本地數據,然后在使用用戶信息 沒有搜到直接用擴展消息中的用戶信息,并更新到本地 }