美文网首页iOS-移动架构师iOS开发文集iOS程序猿
iOS 环信集成通过对消息扩展实现头像和昵称的显示

iOS 环信集成通过对消息扩展实现头像和昵称的显示

作者: 远方的枫叶 | 来源:发表于2016-05-03 14:27 被阅读5946次

    前提把环信SDK和EaseUI成功集成后,我集成的环信SDK版本是2.x,EaseUI版本是3.x,效果图如下:

    B8E912F7B8310F96A1FD2EFC81F12769.png

    在继承自EaseMessageViewController的类里对消息进行扩展

    • - (void)sendTextMessage:(NSString )text withExt:(NSDictionary)ext
      其实我们需要的正是这个方法,对这个方法进行重写就OK了,可是环信却把它私有化了,于是只能按着下面的的方法进行消息扩展了,第一部分是EaseUI开源的方法,第二部分是我重写的方法

    1、 环信EaseUI提供的API的实现

    - (void)sendTextMessage:(NSString *)text
    {
        [self sendTextMessage:text withExt:nil];
    }
    
    - (void)sendTextMessage:(NSString *)text withExt:(NSDictionary*)ext
    {
        EMMessage *message = [EaseSDKHelper sendTextMessage:text
                                                       to:self.conversation.conversationId
                                              messageType:[self _messageTypeFromConversationType]
                                               messageExt:ext];
        [self _sendMessage:message];
    }
    

    2、对环信得方法进行重写

    #pragma mark - EaseMessageViewControllerDataSource
    
    - (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController
                               modelForMessage:(EMMessage *)message
    {
        id<IMessageModel> model = nil;
        
        model = [[EaseMessageModel alloc] initWithMessage:message];
        if (model.isSender) {
            NSLog(@"自己发送");
            
            model.message.ext = @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};
            //头像
            //NSLog(@"***++++**%@",model.message);
            model.avatarURLPath = @"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0";
            //NSLog(@"******%@",model.avatarURLPath);
            //昵称
            model.nickname = @"自己的名字";
            //头像占位图
            model.failImageName = @"sunlei.jpg";
            
        }else{
            NSLog(@"对方发送");
            //头像
            model.avatarURLPath = model.message.ext[@"avatar"];
            //NSLog(@"+++++++______+++%@",model.avatarURLPath);
            //昵称
            model.nickname = model.message.ext[@"nick"];
            //头像占位图
            model.failImageName = @"sunlei.jpg";
            
        }
        //NSLog(@"+++++++++++%@",model.message);
        return model;
    }
    
    #pragma mark - 发送文本消息,对消息进行扩展
    - (void)sendTextMessage:(NSString *)textMessage{
        NSLog(@"发送文本消息");
        NSDictionary *ext =  @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};;
        
        
        EMMessage *message = [EaseSDKHelper sendTextMessage:textMessage
                                                         to:self.conversation.chatter
                                                messageType:eMessageTypeChatRoom
                                          requireEncryption:NO
                                                 messageExt:ext];
        
        [self addMessageToDataSource:message
                            progress:nil];
    }
    
    #pragma mark - 发送图片消息
    
    - (void)sendImageMessage:(UIImage *)image{
        NSLog(@"发送图片消息");
        NSDictionary *ext =  @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};;
    
        EMMessage *message = [EaseSDKHelper sendImageMessageWithImage:image
                                                                   to:self.conversation.chatter
                                                          messageType:eMessageTypeChatRoom
                                                    requireEncryption:NO
                                                           messageExt:ext
                                                             progress:nil];
        
        [self addMessageToDataSource:message
                            progress:nil];
        
    }
    
    #pragma mark - 发送位置消息
    - (void)sendLocationMessageLatitude:(double)latitude
                              longitude:(double)longitude
                             andAddress:(NSString *)address{
        NSLog(@"发送位置消息");
        NSDictionary *ext =  @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};;
        
        EMMessage *message = [EaseSDKHelper sendLocationMessageWithLatitude:latitude
                                                                  longitude:longitude
                                                                    address:address
                                                                         to:self.conversation.chatter
                                                                messageType:eMessageTypeChatRoom
                                                          requireEncryption:NO
                                                                 messageExt:ext];
        
        [self addMessageToDataSource:message
                            progress:nil];
        
        
    }
    
    #pragma mark - 发送语音消息
    - (void)sendVoiceMessageWithLocalPath:(NSString *)localPath
                                 duration:(NSInteger)duration{
        NSLog(@"发送语音消息");
        NSDictionary *ext =  @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};;
        
        EMMessage *message = [EaseSDKHelper sendVoiceMessageWithLocalPath:localPath
                                                                 duration:duration
                                                                       to:self.conversation.chatter
                                                              messageType:eMessageTypeChatRoom
                                                        requireEncryption:NO
                                                               messageExt:ext
                                                                 progress:nil];
        
        [self addMessageToDataSource:message
                            progress:nil];
    }
    
    #pragma mark - 发送视频消息
    - (void)sendVideoMessageWithURL:(NSURL *)url{
        NSLog(@"发送视频消息");
        NSDictionary *ext =  @{@"avatar":@"http://7xrpiy.com1.z0.glb.clouddn.com/babyShow/1462945613-0",@"nick":@"自己本人的昵称"};;
        
        EMMessage *message = [EaseSDKHelper sendVideoMessageWithURL:url
                                                                 to:self.conversation.chatter
                                                        messageType:eMessageTypeChatRoom
                                                  requireEncryption:NO
                                                         messageExt:ext
                                                           progress:nil];
        
        [self addMessageToDataSource:message
                            progress:nil];
    }
    
    

    相关文章

      网友评论

      • 盼盼笑面包de我:您好,在会话页可以这样写,但是会话列表怎么处理呢
      • 幻空_ea67:楼主 求demo 急啊!!!!!1425342717@qq.com
      • 贝勒老爷:消息扩展都是在EaseMessageViewController里面进行重写方法对吗?能不能给发个Demo看看?406750082@qq.com
      • Fooler:你好,最近我也在做这个,我看到环信,EaseMessageVC,除了发送文字消息,还有图片语音消息的方法, 要分开弄么
        远方的枫叶:建议到官网学习,我也好久没弄了
      • NSLogGPX:有demo么 我用你的方法咋不行
        远方的枫叶:估计环形改版了?我好久没用这了,建议到官网学习去
      • zzzzzzzzzl:加扩展的地方有问题,应该在_sendmessage方法里面给发送的消息加扩展,并且不能直接给message.ext赋值,先要一个可变字典获取到message.ext,然后加上你的数据,再赋值给message.ext。
      • helloworld9221:为什么我的在通讯录都显示昵称和头像,但是在聊天界面昵称和头像都不显示呢?
      • helloworld9221:你的ext给的是固定值?
      • 黎希:您好,我使用这个方法后头像可以获取,但是昵称不能显示这是为什么
        helloworld9221:@Palingenesis_阿豪 消息扩展都是在EaseMessageViewController里面进行重写方法对吗?能不能给发个Demo看看?15737195634@163.com
      • 小北风sky:您好,看了您的文章对我收获很大,但我想问下您有没有头像有时不显示的bug呢?怎么解决?是我自己改的有问题吗?期待您的回答,谢谢了
        小小的叶子随枫飘落:当没有头像的时候给EaseMessageModel的avatarImage一个默认的头像就好了
        小北风sky:@远方的枫叶 EaseMessageViewController的类中怎样判断是谁发信息给用户。怎么判断是哪个好友发送的消息呢?
        远方的枫叶:@小北风sky 我试过了,没有出现这种情况
      • Goldfish_jinyu:6666666666666
        远方的枫叶:@Goldfish_jinyu :grin:
      • hehehaha:为什么发送语音和图片也这样对消息扩展不行?大神,帮忙解决下,谢谢
        远方的枫叶:@hehehaha 可以,我对文章更新了一下

      本文标题:iOS 环信集成通过对消息扩展实现头像和昵称的显示

      本文链接:https://www.haomeiwen.com/subject/rqzlrttx.html