集成环信V3.3.4SDK遇到的两个问题

公司又有了新项目,依然是含有即时通讯功能模块的项目。在经历了上个项目对环信sdk的集成后,对环信EaseUI有了大概的了解。这次果断还是集成环信,一回生二回熟,毕竟哪些地方有坑心里有数了。所以这次的项目集成起来就相对来说顺利很多。
项目集成的是环信V3.3.2版本,但今天下载了V3.3.4版本检查了一下,发现依然有不少V3.3.2版本遗留的问题没有修复,下面会列出一些项目中遇到的问题,并提供解决办法。
首先在会话界面自定义一个类比如BHChatViewController,继承自EaseMessageViewController类,基本上一个简单的界面就有了。因为是医疗类的项目,对话双方有可能是患者和患者,也有可能是患者和医生。项目需求是如果是患者和医生聊天,必须先经过预约,并只能在预约时间区间内才能和医生发送聊天消息、图片、语音、实时音视频。
以下就是EaseMessageViewController类的发送各种消息的方法
那么根据需要只需重写以下方法即可。

/*!
 @method
 @brief 发送文本消息
 @discussion
 @param text 文本消息
 @result
 */
- (void)sendTextMessage:(NSString *)text;

/*!
 @method
 @brief 发送文本消息
 @discussion
 @param text 文本消息
 @param ext  扩展信息
 @result
 */
- (void)sendTextMessage:(NSString *)text withExt:(NSDictionary*)ext;

/*!
 @method
 @brief 发送图片消息
 @discussion
 @param image 发送图片
 @result
 */
- (void)sendImageMessage:(UIImage *)image;

/*!
 @method
 @brief 发送位置消息
 @discussion
 @param latitude 经度
 @param longitude 纬度
 @param address 地址
 @result
 */
- (void)sendLocationMessageLatitude:(double)latitude
                          longitude:(double)longitude
                         andAddress:(NSString *)address;

/*!
 @method
 @brief 发送语音消息
 @discussion
 @param localPath 语音本地地址
 @param duration 时长
 @result
 */
- (void)sendVoiceMessageWithLocalPath:(NSString *)localPath
                             duration:(NSInteger)duration;

/*!
 @method
 @brief 发送视频消息
 @discussion
 @param url 视频url
 @result
 */
- (void)sendVideoMessageWithURL:(NSURL *)url;

我在对发送图片的操作进行处理的时候,发现当拍照发图时,走这个方法

//当你拍照发图时,走这个方法
- (void)sendImageMessage:(UIImage *)image;

但当从相册选择图片发送时,会发现,不走上面的方法了。
仔细检查代码发现走了EaseMessageViewController.m的如下方法

集成环信V3.3.4SDK遇到的两个问题_第1张图片
环信2.png

然而这个方法,环信并没有放在EaseMessageViewController.h成为公开方法。我们只需手动粘贴方法到.h,然后在自己的子类重写就可以了。

还有一个关于更多下图更多功能区域的问题


集成环信V3.3.4SDK遇到的两个问题_第2张图片
EaseChatBarMoreView.png

如上图所示,相册、拍照、视频等附加功能按钮,环信用EaseChatBarMoreView类来管理的。
如果需要增加功能按钮用这个方法

/*!
 @method
 @brief 新增一个新的功能按钮
 @discussion
 @param image 按钮图片
 @param highLightedImage 高亮图片
 @param title 按钮标题
 @result
 */
- (void)insertItemWithImage:(UIImage*)image
           highlightedImage:(UIImage*)highLightedImage
                      title:(NSString*)title;

移除某个功能按钮用这个方法


/*!
 @method
 @brief 根据索引删除功能按钮
 @discussion
 @param index 按钮索引
 @result
 */
- (void)removeItematIndex:(NSInteger)index;

修改一个功能按钮用这个方法

/*!
 @method
 @brief 修改功能按钮图片
 @discussion
 @param image 按钮图片
 @param highLightedImage 高亮图片
 @param title 按钮标题
 @param index 按钮索引
 @result
 */
- (void)updateItemWithImage:(UIImage*)image
           highlightedImage:(UIImage*)highLightedImage
                      title:(NSString*)title
                    atIndex:(NSInteger)index;

可当你添加按钮,或者修改按钮时,会发现按钮的名字设置不了
然后检查环信内部的实现,发现title的值在方法里根本就没用到?!
索性不用updateItemWithImage这个方法了,直接去改内部代码。
修改代码如下

到EaseChatBarMoreView.m修改- (void)setupSubviewsForType:(EMChatToolbarType)type方法。改动的部分在代码后面有标注。

- (void)setupSubviewsForType:(EMChatToolbarType)type
{
    //self.backgroundColor = [UIColor clearColor];
    self.accessibilityIdentifier = @"more_view";
    
    _scrollview = [[UIScrollView alloc] init];
    _scrollview.pagingEnabled = YES;
    _scrollview.showsHorizontalScrollIndicator = NO;
    _scrollview.showsVerticalScrollIndicator = NO;
    _scrollview.delegate = self;
    [self addSubview:_scrollview];
    
    _pageControl = [[UIPageControl alloc] init];
    _pageControl.currentPage = 0;
    _pageControl.numberOfPages = 1;
    [self addSubview:_pageControl];
    
    CGFloat insets = (self.frame.size.width - 4 * CHAT_BUTTON_SIZE) / 5;
    
    _photoButton =[UIButton buttonWithType:UIButtonTypeCustom];
    [_photoButton setTitle:@"相册" forState:UIControlStateNormal];//改动
    [_photoButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//改动
    _photoButton.titleLabel.font = [UIFont systemFontOfSize: 12.0];//改动
    _photoButton.imageEdgeInsets = UIEdgeInsetsMake(-10, 0, 20, 0);//改动
    _photoButton.titleEdgeInsets = UIEdgeInsetsMake(14, -60, -20, 0);//改动
    _photoButton.accessibilityIdentifier = @"image";
    [_photoButton setFrame:CGRectMake(insets, 10, CHAT_BUTTON_SIZE , CHAT_BUTTON_SIZE+10)];//改动
    [_photoButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_photo"] forState:UIControlStateNormal];
    [_photoButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_photoSelected"] forState:UIControlStateHighlighted];
    [_photoButton addTarget:self action:@selector(photoAction) forControlEvents:UIControlEventTouchUpInside];
    _photoButton.tag = MOREVIEW_BUTTON_TAG;
    [_scrollview addSubview:_photoButton];
    
    _locationButton =[UIButton buttonWithType:UIButtonTypeCustom];
    [_locationButton setTitle:@"位置" forState:UIControlStateNormal];//改动
    [_locationButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//改动
    _locationButton.titleLabel.font = [UIFont systemFontOfSize: 12.0];//改动
    _locationButton.imageEdgeInsets = UIEdgeInsetsMake(-10, 0, 20, 0);//改动
    _locationButton.titleEdgeInsets = UIEdgeInsetsMake(14, -60, -20, 0);//改动
    _locationButton.accessibilityIdentifier = @"location";
    [_locationButton setFrame:CGRectMake(insets * 2 + CHAT_BUTTON_SIZE, 10, CHAT_BUTTON_SIZE , CHAT_BUTTON_SIZE+10)];//
    [_locationButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_location"] forState:UIControlStateNormal];
    [_locationButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_locationSelected"] forState:UIControlStateHighlighted];
    [_locationButton addTarget:self action:@selector(locationAction) forControlEvents:UIControlEventTouchUpInside];
    _locationButton.tag = MOREVIEW_BUTTON_TAG + 1;
    [_scrollview addSubview:_locationButton];
    
    _takePicButton =[UIButton buttonWithType:UIButtonTypeCustom];
    [_takePicButton setTitle:@"拍照" forState:UIControlStateNormal];//改动
    [_takePicButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//改动
    _takePicButton.titleLabel.font = [UIFont systemFontOfSize: 12.0];//改动
    _takePicButton.imageEdgeInsets = UIEdgeInsetsMake(-10, 0, 20, 0);//改动
    _takePicButton.titleEdgeInsets = UIEdgeInsetsMake(14, -60, -20, 0);//改动
    [_takePicButton setFrame:CGRectMake(insets * 3 + CHAT_BUTTON_SIZE * 2, 10, CHAT_BUTTON_SIZE , CHAT_BUTTON_SIZE+10)];//改动
    [_takePicButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_camera"] forState:UIControlStateNormal];
    [_takePicButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_cameraSelected"] forState:UIControlStateHighlighted];
    [_takePicButton addTarget:self action:@selector(takePicAction) forControlEvents:UIControlEventTouchUpInside];
    _takePicButton.tag = MOREVIEW_BUTTON_TAG + 2;
    _maxIndex = 2;
    [_scrollview addSubview:_takePicButton];

    CGRect frame = self.frame;
    if (type == EMChatToolbarTypeChat) {
        frame.size.height = 150;
        _audioCallButton =[UIButton buttonWithType:UIButtonTypeCustom];
        [_audioCallButton setTitle:@"语音" forState:UIControlStateNormal];//改动
        [_audioCallButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//改动
        _audioCallButton.titleLabel.font = [UIFont systemFontOfSize: 12.0];//改动
        _audioCallButton.imageEdgeInsets = UIEdgeInsetsMake(-10, 0, 20, 0);//改动
        _audioCallButton.titleEdgeInsets = UIEdgeInsetsMake(14, -60, -20, 0);//改动
        [_audioCallButton setFrame:CGRectMake(insets * 4 + CHAT_BUTTON_SIZE * 3, 10, CHAT_BUTTON_SIZE , CHAT_BUTTON_SIZE+10)];//
        [_audioCallButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_audioCall"] forState:UIControlStateNormal];
        [_audioCallButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_audioCallSelected"] forState:UIControlStateHighlighted];
        [_audioCallButton addTarget:self action:@selector(takeAudioCallAction) forControlEvents:UIControlEventTouchUpInside];
        _audioCallButton.tag = MOREVIEW_BUTTON_TAG + 3;
        [_scrollview addSubview:_audioCallButton];
        
        _videoCallButton =[UIButton buttonWithType:UIButtonTypeCustom];
        [_videoCallButton setTitle:@"视频" forState:UIControlStateNormal];//改动
        [_videoCallButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//改动
        _videoCallButton.titleLabel.font = [UIFont systemFontOfSize: 12.0];//改动
        _videoCallButton.imageEdgeInsets = UIEdgeInsetsMake(-10, 0, 20, 0);//改动
        _videoCallButton.titleEdgeInsets = UIEdgeInsetsMake(14, -60, -20, 0);//改动
        [_videoCallButton setFrame:CGRectMake(insets, 10 * 2 + CHAT_BUTTON_SIZE + 10, CHAT_BUTTON_SIZE , CHAT_BUTTON_SIZE+10)];//
        [_videoCallButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_videoCall"] forState:UIControlStateNormal];
        [_videoCallButton setImage:[UIImage easeImageNamed:@"EaseUIResource.bundle/chatBar_colorMore_videoCallSelected"] forState:UIControlStateHighlighted];
        [_videoCallButton addTarget:self action:@selector(takeVideoCallAction) forControlEvents:UIControlEventTouchUpInside];
        _videoCallButton.tag =MOREVIEW_BUTTON_TAG + 4;
        _maxIndex = 4;
        [_scrollview addSubview:_videoCallButton];
    }
    else if (type == EMChatToolbarTypeGroup)
    {
        frame.size.height = 80;
    }
    self.frame = frame;
    _scrollview.frame = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame));
    _pageControl.frame = CGRectMake(0, CGRectGetHeight(frame) - 20, CGRectGetWidth(frame), 20);
    _pageControl.hidden = _pageControl.numberOfPages<=1;
}

[Github] (https://github.com/BHAreslee)
以上就是集成环信时暂时发现的问题,欢迎大家分享你们遇到的问题,也欢迎加入QQ群:372251359,一起讨论交流即时通讯的问题。
本人微信公众号:放心安慰剂

集成环信V3.3.4SDK遇到的两个问题_第3张图片
放心安慰剂

你可能感兴趣的:(集成环信V3.3.4SDK遇到的两个问题)