iOS開發(fā)-集成環(huán)信即時(shí)通訊會(huì)話列表和聊天頭像的設(shè)置

環(huán)信SDK集成

請(qǐng)參考iOS開發(fā)-在現(xiàn)有項(xiàng)目中集成環(huán)信SDK及EaseUI或者參考官方文檔

此操作只針對(duì)已集成環(huán)信聊天

聊天頭像的設(shè)置

聊天頭像設(shè)置就是在聊天對(duì)象中攜帶用戶信息的相關(guān)參數(shù),我們使用EMMessage中的擴(kuò)展字段ext攜帶用戶信息

我們創(chuàng)建一個(gè)EMUserInfo的用戶信息類

  • EMUserInfo.h
@interface EMUserInfo : NSObject
/*!
 用戶環(huán)信ID(環(huán)信賬號(hào))
 */
+ (NSString *)current_id_user;

/*!
 用戶頭像的URL
 */
+ (NSString *)current_heading_user;
/*!
 用戶昵稱
 */
+ (NSString *)current_name_user;
/**
 當(dāng)前用戶信息

 @return 用戶信息字典
 */
+ (NSDictionary *)currentUserInfo;

@end

  • EMUserInfo.m
/*!
 用戶ID
 */
+ (NSString *)current_id_user {
    return @"獲取本地保存的環(huán)信賬號(hào)";
}

/*!
 用戶頭像的URL
 */
+ (NSString *)current_heading_user {
    return @"獲取本地保存的用戶頭像";
}
/*!
 用戶昵稱
 */
+ (NSString *)current_name_user {
    return @"獲取本地保存的用戶昵稱";
}
// 在APP登陸或者獲取用戶信息的時(shí)候,需要保存相關(guān)信息
+ (NSDictionary *)currentUserInfo {
    
    
    return @{@"from_id_user":@"獲取本地保存的環(huán)信賬號(hào)",
             @"from_name_user":@"獲取本地保存的用戶昵稱",
             @"from_heading_user":@"獲取本地保存的用戶頭像"
             };
}

  • 在發(fā)送消息的時(shí)候攜帶用戶信息

EaseMessageViewController.m- (void)sendMessage:(EMMessage *)message isNeedUploadFile:(BOOL)isUploadFile添加相關(guān)代碼

message.ext = [EMUserInfo currentUserInfo];

在發(fā)送消息的時(shí)候攜帶用戶信息
  • 聊天頁面

新建一個(gè)控制器BSChatViewController繼承EaseMessageViewController

相關(guān)代碼

- (void)viewDidLoad {
    [super viewDidLoad];
    // 設(shè)置EaseMessageViewControllerDataSource的代理
    self.dataSource = self;
}

#pragma mark - EaseMessageViewControllerDataSource

- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController modelForMessage:(EMMessage *)message {
    id<IMessageModel> model = nil;
    model = [[EaseMessageModel alloc] initWithMessage:message];
    if (model.isSender) {//自己發(fā)送
        //頭像
        model.avatarURLPath = [EMUserInfo current_heading_user];
        //昵稱
        model.nickname = [EMUserInfo current_name_user];
        //頭像占位圖
        model.avatarImage = kPlaceholderImage;
    }else{//對(duì)方發(fā)送
        model.avatarImage = kPlaceholderImage;
        //頭像
        model.avatarURLPath = message.ext[@"from_heading_user"];
        //昵稱
        model.nickname = @"";
    }
    return model;

}

會(huì)話列表頁面頭像設(shè)置

需要做本地存儲(chǔ):存儲(chǔ)的時(shí)機(jī)就是進(jìn)入聊天頁面的時(shí)候把對(duì)方的相關(guān)信息保存下來

在EMUserInfo中添加如下代碼

  • EMUserInfo.h
/**
 本地保存對(duì)方聊天信息

 @param userId 環(huán)信賬號(hào)
 @param userName 用戶名
 @param avatarURLPath 頭像
 */
+ (void)saveToUserInfo:(NSString *)userId name:(NSString *)userName avatarURLPath:(NSString *)avatarURLPath;


/**
 查找本地用戶信息

 @param userId 環(huán)信賬號(hào)
 @return 信息字典
 */
+ (NSDictionary *)findUserInfoByUserId:(NSString *)userId;

  • EMUserInfo.m
+ (void)saveToUserInfo:(NSString *)userId name:(NSString *)userName avatarURLPath:(NSString *)avatarURLPath {
    
    NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"messageList.plist"];
    
    NSMutableArray *array =[[NSMutableArray alloc] initWithContentsOfFile:filePatch];
    
    if (!array) {
        array = [NSMutableArray array];
    }
    
    NSDictionary *toDict = @{@"from_id_user":userId,
                            @"from_name_user":userName,
                            @"from_heading_user":avatarURLPath
                            };

    if (![array containsObject:toDict]) {
        [array addObject:toDict];
        [array writeToFile:filePatch atomically:true];
    }

}

+ (NSDictionary *)findUserInfoByUserId:(NSString *)userId {
    
    NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"messageList.plist"];
    
    NSMutableArray *array =[[NSMutableArray alloc] initWithContentsOfFile:filePatch];

    NSDictionary *tempDict;
    for (NSDictionary *dict in array) {
        if ([dict[@"from_id_user"] isEqualToString:userId]) {
            tempDict = dict;
            break;
        }
    }
    return tempDict;
}

新建BSMessageListViewController繼承EaseConversationListViewController
相關(guān)代碼

- (void)viewDidLoad {
    [super viewDidLoad];
    // 設(shè)置EaseConversationListViewControllerDataSource的代理
    self.dataSource = self;
}
- (id<IConversationModel>)conversationListViewController:(EaseConversationListViewController *)conversationListViewController
                                    modelForConversation:(EMConversation *)conversation {
    EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation];
    if (model.conversation.type == EMConversationTypeChat) {
        NSDictionary *dict = conversation.lastReceivedMessage.ext;
        if(dict[@"from_name_user"] == nil || dict[@"from_heading_user"] == nil){
            NSDictionary *localDict = [EMUserInfo findUserInfoByUserId:conversation.conversationId];
            model.title = [localDict objectForKey:@"from_name_user"];
            model.avatarURLPath = [localDict objectForKey:@"from_heading_user"];
            model.avatarImage = kPlaceholderImage;
            
        }else{
            model.title = dict[@"from_name_user"];
            model.avatarURLPath = dict[@"from_heading_user"];
            //頭像占位圖
            model.avatarImage = kPlaceholderImage;

        }
        
    }
    return model;
}

這樣就實(shí)現(xiàn)了會(huì)話列表頭像和聊天界面頭像的展示

在跳轉(zhuǎn)聊天界面的時(shí)候一定要調(diào)用EMUserInfo+ (void)saveToUserInfo:(NSString *)userId name:(NSString *)userName avatarURLPath:(NSString *)avatarURLPath 這樣是為了消息列表能夠展示對(duì)方的頭像昵稱信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容