iOS环信集成单聊和会话列表并修改头像与昵称和对消息内容修改

一 : 集成单聊

1.AppDelegate.m

#import <HyphenateLite/HyphenateLite.h>

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

EMOptions *options = [EMOptions optionsWithAppkey:@"*********"];//环信的Appkey

   options.apnsCertName = @"istore_dev";//推送证书

    [[EMClient sharedClient] initializeSDKWithOptions:options];

//注册

    EMError *error = [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111"];

   if (error==nil) {

        NSLog(@"注册成功");

    }

//登录

 EMError *error4 = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"];

    if(!error4) {

        NSLog(@"登录成功");                                                                                           

    }

}

- (void)applicationDidEnterBackground:(UIApplication*)application {

    [[EMClient sharedClient] applicationDidEnterBackground:application];

}

- (void)applicationWillEnterForeground:(UIApplication*)application {

    [[EMClient sharedClient] applicationWillEnterForeground:application];

}

2.你想实现单聊的类里,你可以继承EaseMessageViewController,也可以直接使用EaseMessageViewController

 - (void)btnClick{

    EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"8003" conversationType:EMConversationTypeChat];

   // chatController.title = @"8003";

    [self.navigationController pushViewController:chatController animated:YES];

}

到这里单聊的功能就完成了

二 : 修改头像和昵称并修改消息内容

 1.修改头像和昵称需要修改三个地方

第一个地方,添加这方法

  - (id)messageViewController:(EaseMessageViewController*)viewController

                           modelForMessage:(EMMessage*)message{

    id model =nil;

    model = [[EaseMessageModelalloc]initWithMessage:message];

//这两个是把自己的头像和昵称保存在了本地,这里取出来使用

   NSString *headUrlImage = [[NSUserDefaults standardUserDefaults]objectForKey:@"headUrlImage"];

    NSString *bianNickName = [[NSUserDefaults standardUserDefaults]objectForKey:@"nickName"];

    if(model.isSender) {//自己发送

        model.message.ext=@{@"avatar":headUrlImage,@"nickname":bianNickName};

       // 头像

        model.avatarURLPath= headUrlImage;

        //昵称

        model.nickname= bianNickName;

        //头像占位图

        model.avatarImage= [UIImageimageNamed:@"imageDownloadFail"];

    }else{//对方发送

        //头像占位图

        model.avatarImage= [UIImageimageNamed:@"imageDownloadFail"];

        //头像

        model.avatarURLPath= message.ext[@"avatar"];

        //昵称

        model.nickname=  message.ext[@"nickname"];

    }

    returnmodel;

}

第二个地方修改下面方法里增加备注内容


- (void)sendMessage:(EMMessage*)message isNeedUploadFile:(BOOL)isUploadFile

{

    if (self.conversation.type == EMConversationTypeGroupChat){

        message.chatType=EMChatTypeGroupChat;

    }

    else if (self.conversation.type == EMConversationTypeChatRoom){

        message.chatType=EMChatTypeChatRoom;

    }

    /****************下面为修改部分********************/

    NSString *headUrlImage = [[NSUserDefaults standardUserDefaults]objectForKey:@"headUrlImage"];

    NSString *bianNickName = [[NSUserDefaults standardUserDefaults]objectForKey:@"nickName"];


    NSDictionary*exit =@{@"avatar":headUrlImage,@"nickname":bianNickName};


    message.ext= exit;

    /****************上面为修改部分********************/


    __weak typeof(self) weakself = self;

    if (!([EMClient sharedClient].options.isAutoTransferMessageAttachments) && isUploadFile) {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:NSLocalizedString(@"message.autoTransfer", @"Please customize the transfer attachment method") delegate:nil cancelButtonTitle:NSLocalizedString(@"sure", @"OK") otherButtonTitles:nil, nil];

        [alertViewshow];

    }else{

        [self addMessageToDataSource:message

                            progress:nil];


        [[EMClientsharedClient].chatManagersendMessage:messageprogress:^(intprogress) {

            if(weakself.dataSource&& [weakself.dataSourcerespondsToSelector:@selector(messageViewController:updateProgress:messageModel:messageBody:)]) {

                [weakself.dataSourcemessageViewController:weakselfupdateProgress:progressmessageModel:nilmessageBody:message.body];

            }

        }completion:^(EMMessage*aMessage,EMError*aError) {

            if(!aError) {

                [weakself_refreshAfterSentMessage:aMessage];

            }

            else{

                [weakself.tableViewreloadData];

            }

        }];

    }

}

第三个地方修改下面方法里增加备注内容


- (NSArray*)formatMessages:(NSArray*)messages

{

    NSMutableArray*formattedArray = [[NSMutableArrayalloc]init];

    if([messagescount] ==0) {

        returnformattedArray;

    }


    for(EMMessage*messageinmessages) {

        //Calculate time interval

        CGFloatinterval = (self.messageTimeIntervalTag- message.timestamp) /1000;

        if(self.messageTimeIntervalTag<0|| interval >60|| interval < -60) {

            NSDate*messageDate = [NSDatedateWithTimeIntervalInMilliSecondSince1970:(NSTimeInterval)message.timestamp];

            NSString*timeStr =@"";


            if(_dataSource&& [_dataSourcerespondsToSelector:@selector(messageViewController:stringForDate:)]) {

                timeStr = [_dataSourcemessageViewController:selfstringForDate:messageDate];

            }

            else{

                timeStr = [messageDateformattedTime];

            }

            [formattedArrayaddObject:timeStr];

            self.messageTimeIntervalTag = message.timestamp;

        }


        //Construct message model

        id model =nil;

        if(_dataSource&& [_dataSourcerespondsToSelector:@selector(messageViewController:modelForMessage:)]) {

            model = [_dataSource messageViewController:self modelForMessage:message];

        }

        else{

//            model = [[EaseMessageModel alloc] initWithMessage:message];

//            model.avatarImage = [UIImage imageNamed:@"EaseUIResource.bundle/user"];

//            model.failImageName = @"imageDownloadFail";

        /****************下面为修改部分********************/

            model = [[EaseMessageModelalloc]initWithMessage:message];


            NSString*loginUserName = [[EMClientsharedClient]currentUsername];

            NSString*headUrlImage = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"headUrlImage"];

            NSString*bianNickName = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"nickName"];

            if([model.message.fromisEqualToString:loginUserName]) {


                model.avatarURLPath= headUrlImage;

                model.failImageName=@"imageDownloadFail";

                model.nickname= bianNickName;


            }else{


                model.avatarURLPath= message.ext[@"avatar"];

                //昵称

                model.nickname=  message.ext[@"nickname"];

                model.failImageName=@"imageDownloadFail";

            }

            /****************上面为修改部分********************/

        }


        if(model) {

            [formattedArrayaddObject:model];

        }

    }


    returnformattedArray;

}

到此修改头像和昵称已全部完成

下面是修改消息内容


增加修改的部分

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

    idobject = [self.dataArrayobjectAtIndex:indexPath.row];


    //time cell

    if([objectisKindOfClass:[NSStringclass]]) {

        NSString*TimeCellIdentifier = [EaseMessageTimeCellcellIdentifier];

        EaseMessageTimeCell*timeCell = (EaseMessageTimeCell*)[tableViewdequeueReusableCellWithIdentifier:TimeCellIdentifier];


        if(timeCell ==nil) {

            timeCell = [[EaseMessageTimeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TimeCellIdentifier];

            timeCell.selectionStyle = UITableViewCellSelectionStyleNone;

        }


        timeCell.title= object;

        returntimeCell;

    }


    id model = object;

    if(_delegate&& [_delegaterespondsToSelector:@selector(messageViewController:cellForMessageModel:)]) {

        UITableViewCell *cell = [_delegate messageViewController:tableView cellForMessageModel:model];

        if(cell) {

            if([cellisKindOfClass:[EaseMessageCellclass]]) {

                EaseMessageCell*emcell= (EaseMessageCell*)cell;

                if(emcell.delegate==nil) {

                    emcell.delegate=self;

                }

            }

            returncell;

        }

    }


    if(_dataSource&& [_dataSourcerespondsToSelector:@selector(isEmotionMessageFormessageViewController:messageModel:)]) {

        BOOL flag = [_dataSource isEmotionMessageFormessageViewController:self messageModel:model];

        if(flag) {

            NSString*CellIdentifier = [EaseCustomMessageCellcellIdentifierWithModel:model];

            //send cell

            EaseCustomMessageCell*sendCell = (EaseCustomMessageCell*)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];


            // Configure the cell...

            if(sendCell ==nil) {

                sendCell = [[EaseCustomMessageCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifiermodel:model];

                sendCell.selectionStyle = UITableViewCellSelectionStyleNone;

            }


            if(_dataSource&& [_dataSourcerespondsToSelector:@selector(emotionURLFormessageViewController:messageModel:)]) {

                EaseEmotion *emotion = [_dataSource emotionURLFormessageViewController:self messageModel:model];

                if(emotion) {

                    model.image= [UIImagesd_animatedGIFNamed:emotion.emotionOriginal];

                    model.fileURLPath= emotion.emotionOriginalURL;

                }

            }

            sendCell.model= model;

            sendCell.delegate=self;

            returnsendCell;

        }

    }


    NSString*CellIdentifier = [EaseMessageCellcellIdentifierWithModel:model];


    EaseBaseMessageCell*sendCell = (EaseBaseMessageCell*)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];


    // Configure the cell...

    if(sendCell ==nil) {

        sendCell = [[EaseBaseMessageCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifiermodel:model];

        sendCell.selectionStyle = UITableViewCellSelectionStyleNone;

        sendCell.delegate=self;

    }

    NSDictionary*dict = model.message.ext;


    //model.avatarURLPath = [dict objectForKey:@"icon"];


   // model.nickname = [dict objectForKey:@"nickName"];

//所有消息发送的数字都会转变为*

    if(model.text==nil|| model.text==NULL|| [model.textisEqualToString:@"(null)"]) {


    }else{

        NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:0 error:nil];


        NSString *strText = [regularExpression stringByReplacingMatchesInString:model.text options:0 range:NSMakeRange(0, model.text.length) withTemplate:@"*"];

        model.text  = strText;


    }


    sendCell.model= model;

    returnsendCell;

}

三 : 修改会话列表的头像和昵称

创建一个类集成与EaseConversationListViewController,在下面方法里做出修改即可


- (id)conversationListViewController:(EaseConversationListViewController*)conversationListViewController  modelForConversation:(EMConversation*)conversation{


    EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation];

    if (model.conversation.type == EMConversationTypeChat) {

        NSDictionary*dic = conversation.lastReceivedMessage.ext;

        if(dic[@"nickname"] ==nil|| dic[@"avatar"] ==nil){

           NSDictionary*dict = [[NSDictionaryalloc]init];

            dict = [[NSUserDefaultsstandardUserDefaults]objectForKey:conversation.conversationId];


            model.title= dict[@"nickname"];

            model.avatarURLPath= dict[@"avatar"];

            //头像占位图

            model.avatarImage= [UIImageimageNamed:@"imageDownloadFail"];

        }else{

            model.title= dic[@"nickname"];

            model.avatarURLPath= dic[@"avatar"];

            //头像占位图

            model.avatarImage= [UIImageimageNamed:@"imageDownloadFail"];

        }

    }else if (model.conversation.type == EMConversationTypeGroupChat) {

        NSString*imageName =@"groupPublicHeader";

        if(![conversation.extobjectForKey:@"subject"])

        {

            NSArray*groupArray = [[EMClientsharedClient].groupManagergetJoinedGroups];

            for(EMGroup*groupingroupArray) {

                if([group.groupIdisEqualToString:conversation.conversationId]) {

                    NSMutableDictionary*ext = [NSMutableDictionarydictionaryWithDictionary:conversation.ext];

                    [extsetObject:group.subjectforKey:@"subject"];

                    [extsetObject:[NSNumbernumberWithBool:group.isPublic]forKey:@"isPublic"];

                    conversation.ext= ext;

                    break;

                }

            }

        }

        NSDictionary*ext = conversation.ext;

        model.title= [extobjectForKey:@"subject"];

        imageName = [[extobjectForKey:@"isPublic"] boolValue] ? @"groupPublicHeader" : @"groupPrivateHeader";

        model.avatarImage= [UIImageimageNamed:imageName];

        //头像占位图

        model.avatarImage= [UIImageimageNamed:@"imageDownloadFail"];

    }

    returnmodel;

}


这里是demo:HuanXinDemo.zip_免费高速下载|百度网盘-分享无限制

到此所有修改结束,上述仅代表本人个人操作集成时所遇到问题解决办法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容