美文网首页IM
iOS环信3.1·集成·功能的实现

iOS环信3.1·集成·功能的实现

作者: 寒山半秋 | 来源:发表于2017-03-02 13:40 被阅读438次
    • SDK集成

    1.准备工作:

    ·此处假设你已经申请过环信的开发者账号。
    ·此处假设你已经在Apple开发者中心配置好证书,并上传至环信。
    ·如果你不需要离线消息的推送功能,可以不必配置证书。
    ·从环信官网下载好的最新SDK,解压缩到一易找的地方。
    

    2.将ios_IM_sdk_V3.1.5文件夹中的HyphenateFullSDK文件夹拷贝到你的工程目录文件夹下。

    Paste_Image.png
    3.打开Xcode,按下快捷键:Alt+Command+A,将HyphenateFullSDK添加到工程目录里。
    Paste_Image.png
    4.将HyphenateFullSDK目录下的include中的EMSDK.h中的代码注释掉一部分:
    Paste_Image.png
    5.将HyphenateFullSDK目录下的include中的EMSDKFull.h中的代码注释掉一部分:
    Paste_Image.png
    6.点Build PhasesLink Binary With Libraries,添加依赖库
    SDK 包含实时语音依赖库有:
    CoreMedia.framework
    AudioToolbox.framework
    AVFoundation.framework
    MobileCoreServices.framework
    ImageIO.framework
    libc++.dylib
    libz.dylib
    libstdc++.6.0.9.dylib
    libsqlite3.dylib
    libiconv.dylib
    **(如果使用的是 xcode7,后缀为 tbd。)**
    
    Paste_Image.png
    7.将ios_IM_sdk_V3.1.5文件夹中的EaseUI文件夹拷贝到你的工程目录文件夹下。
    Paste_Image.png
    8.打开Xcode,按下快捷键:Alt+Command+A,将EaseUI添加到工程目录里。
    Paste_Image.png
    9.在你的XXX.pch头文件的首尾部分,加入两行代码:
    Paste_Image.png
    //另,注意:必须引入这两个系统库。否则会报错。
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    

    错误是这样:

    Paste_Image.png
    10.可能存在的Error·需要解决
    环信中有MJRefresh,若你的工程中也引入了MJRefresh,请自行删除你的或者环信EaseUI中的MJRefresh任一即可。
    当然,前提是,保证你的MJRefresh是最新的
    
    环信中有SDWebImage库,所以,如果你有用到SDWebImage库,请自行删除你引入的SDWebImage。
    当然,你可以选择不删除。但是,要做一点简单的操作。
    只需在XXX.pch中删除之前的引用#import "UIImage+WebCache",换成引用#import "UIImage+EMWebCache"
    

    11.集成的结尾,说明部分:

    经过上面一系列的修改以及添加库。此时,需要测试一下。
    按下快捷键:Command+B,编译应该会无误通过。
    

    • 功能实现
    包含:位置发送、语音发送、图片发送、拍照发送、语音通讯、视频通讯
    

    1.引入环信官方Demo中的:ChatViewController.hChatViewController.m
    注释掉ChatViewController.m如下代码部分,解决Error
    简单来讲,就是注释掉红色警告行的代码即可。

    //#import "ChatGroupDetailViewController.h"
    //#import "ChatroomDetailViewController.h"
    //#import "UserProfileViewController.h"
    //#import "UserProfileManager.h"
    //#import "ContactListSelectViewController.h"
    //#import "ChatDemoHelper.h"
    //#import "EMChooseViewController.h"
    //#import "ContactSelectionViewController.h"
    
    //if (ext && ext[kHaveUnreadAtMessage] != nil)
    //  {
    //   NSMutableDictionary *newExt = [ext mutableCopy];
    //   [newExt removeObjectForKey:kHaveUnreadAtMessage];
    //   self.conversation.ext = newExt;
    //   }
    
    //UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.message.from];
    //[self.navigationController pushViewController:userprofile animated:YES];
    
    //ContactSelectionViewController *selectController = [[ContactSelectionViewController alloc] initWithContacts:members];
    //selectController.mulChoice = NO;
    //selectController.delegate = self;
    //[self.navigationController pushViewController:selectController animated:YES];
    
    //ContactSelectionViewController *selectController = [[ContactSelectionViewController alloc] initWithContacts:members];
    //selectController.mulChoice = NO;
    //selectController.delegate = self;
    //[self.navigationController pushViewController:selectController animated:YES];
    
    //UserProfileEntity *profileEntity = [[UserProfileManager sharedInstance] getUserProfileByUsername:model.nickname];
    //if (profileEntity) {
    //    model.avatarURLPath = profileEntity.imageUrl;
    //    model.nickname = profileEntity.nickname;
    //}
    
    //    [[ChatDemoHelper shareHelper] setChatVC:nil];
    
    //        ChatGroupDetailViewController *detailController = [[ChatGroupDetailViewController alloc] initWithGroupId:self.conversation.conversationId];
    //        [self.navigationController pushViewController:detailController animated:YES];
    
    //        ChatroomDetailViewController *detailController = [[ChatroomDetailViewController alloc] initWithChatroomId:self.conversation.conversationId];
    //        [self.navigationController pushViewController:detailController animated:YES];
    
    //        id<IMessageModel> model = [self.dataArray objectAtIndex:self.menuIndexPath.row];
    //        ContactListSelectViewController *listViewController = [[ContactListSelectViewController alloc] initWithNibName:nil bundle:nil];
    //        listViewController.messageModel = model;
    //        [listViewController tableViewDidTriggerHeaderRefresh];
    //        [self.navigationController pushViewController:listViewController animated:YES];
    
    //- (BOOL)viewController:(EMChooseViewController *)viewController didFinishSelectedSources:(NSArray *)selectedSources
    //{
    //    if ([selectedSources count]) {
    //        EaseAtTarget *target = [[EaseAtTarget alloc] init];
    //        target.userId = selectedSources.firstObject;
    //        UserProfileEntity *profileEntity = [[UserProfileManager sharedInstance] getUserProfileByUsername:target.userId];
    //        if (profileEntity) {
    //            target.nickname = profileEntity.nickname == nil ? profileEntity.username : profileEntity.nickname;
    //        }
    //        if (_selectedCallback) {
    //            _selectedCallback(target);
    //        }
    //    }
    //    else {
    //        if (_selectedCallback) {
    //            _selectedCallback(nil);
    //        }
    //    }
    //    return YES;
    //}
    //- (void)viewControllerDidSelectBack:(EMChooseViewController *)viewController
    //{
    //    if (_selectedCallback) {
    //        _selectedCallback(nil);
    //    }
    //}
    

    2.引入环信官方Demo中的:
    ChatDemoHelper.hChatDemoHelper.mCallViewController.hCallViewController.m
    删除ChatDemoHelper.m中的
    介于

    -(void) initHelper {
    #ifdef REDPACKET_AVALABLE
        [[RedPacketUserConfig sharedConfig] beginObserveMessage];
    #endif
        [[EMClient sharedClient] addDelegate:self delegateQueue:nil];
        [[EMClient sharedClient].groupManager addDelegate:self delegateQueue:nil];
        [[EMClient sharedClient].contactManager addDelegate:self delegateQueue:nil];
        [[EMClient sharedClient].roomManager addDelegate:self delegateQueue:nil];
        [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
    #if DEMO_CALL == 1
        [[EMClient sharedClient].callManager addDelegate:self delegateQueue:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeCall:) name:KNOTIFICATION_CALL object:nil];
    #endif
    }
    

    #pragma mark - EMCallManagerDelegate
    

    之间的所有代码。

    当然,还是会有报错。
    

    下面的代码也要删除:

    -(void)_clearHelper {
        self.mainVC = nil;
        self.conversationListVC = nil;
        self.chatVC = nil;
        self.contactViewVC = nil;
        [[EMClient sharedClient] logout:NO];
    #if DEMO_CALL == 1
        [self hangupCallWithReason:EMCallEndReasonFailed];
    #endif
    }
    

    当然,你这样点击音视频按钮,还是不能弹出通话界面。
    所以,你需要在你的XXX.pch头文件里加入这么一行代码即可。

    #define DEMO_CALL 1
    
    Paste_Image.png
    要若想能弹出通话界面,设置根控制器,必须是这样的。
    也就是在ChatDemoHelper.h中必须将你的聊天界面的控制器声明,命名最好是mainVC。这样会比较省事儿。
    Paste_Image.png
    在AppDelegate.m,加入这样的一句代码:
    //tabBarCtr为你的聊天界面的视图控制器。可以是Tabbar,或者别的。
    [ChatDemoHelper shareHelper].mainVC = tabBarCtr;
    
    CECNavigationViewController *callNav = nil;  
    CECChatRootController *tabBarCtr = [[CECChatRootController alloc] init];
    [ChatDemoHelper shareHelper].mainVC = tabBarCtr;
    callNav = [[CECNavigationViewController alloc] initWithRootViewController:tabBarCtr]; 
    callNav.navigationBarHidden = YES;
    self.window.rootViewController = callNav;
    

    相关文章

      网友评论

      • 陌南尘Y:我的版本是 3.3.1的 按照上面的 还是不行呀
        寒山半秋:@叶希123 嗯。那就看下最新的就好。不过,环信的坑还是颇多的。接口变动也很大。你的工程刚起步聊天功能的话,换用融云也不错。
        陌南尘Y:有比较新的视频 我咋看的都是旧的@青灯素笺
        寒山半秋:@叶希123 建议去论坛里挖一下官方的视频教程。步骤会更详细。
      • 北漂少年郎:我的版本是 3.3.0的 ,按照大神的做法,还是不行那
        寒山半秋:@逍遥若水 不知你解决没。登简书刚看到。如果没,可以简信我。
        北漂少年郎:@青灯素笺 1050261614 方不方便私聊
        寒山半秋:@逍遥若水 什么错误

      本文标题:iOS环信3.1·集成·功能的实现

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