环信集成纯视频聊天功能

2020-06-12  本文已影响0人  的的可可

条件
1:iOS_IM_SDK_V3.6.8
2:Xcode(11.5)
首先去环境注册app获取到appkey,然后集成SDkK:环信DSK集成.

然后去下载环信的demo:环信Demo下载.
下载下来大概是这个鬼样子

demo
点进去。如果刚是pod集成(推荐),除了箭头所指的文件夹,其他都用不上;
打开箭头所指文件里面的工程
然后把下图中红框的部分拖入自己工程。
拖入自己工程
在然后将下图内容copy到自己的pch文件中
截屏2020-06-12下午9.29.37.png
注意:如果你的pch中还有其他头文件,copy的这个最好写在最前面。
然后点开你的AppDelegate.m在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方法中这样写

//AppKey替换成你的在环信上注册的appKey
EMOptions *options = [EMOptions optionsWithAppkey:@"AppKey"];
    // apnsCertName是证书名称,可以先传nil,等后期配置apns推送时在传入证书名称,后面介绍推送,这里可以不写
    options.apnsCertName = @"nil";
    EMError *error = [[EMClient sharedClient] initializeSDKWithOptions:options];
    if (!error) {
        PHlog(@"环信初始化成功");
    }
//环信注册和登录,这里就写在了AppDelegate.m中,实际根据个人项目情况写在合适的地方
            [[EMClient sharedClient] registerWithUsername:self.userModel.mobile password:@"sslz120" completion:^(NSString *aUsername, EMError *aError) {
                if (!aError) {
                    NSLog(@"注册成功");
                    // 传入在应用(appkey)下注册的IM用户user1,密码123,用于登录环信服务器
                    [[EMClient sharedClient] loginWithUsername:"user1" password:@"123" completion:^(NSString *aUsername, EMError *aError) {
                            if (!aError) {
                                NSLog(@"登录成功");
                                [DemoCallManager sharedManager];//DemoCallManager类能收到,发起视频通知的关键
                            } else {
                                NSLog(@"登录失败的原因---%@", aError.errorDescription);
                            }
                        }];

最后在你需要发起视频的地方发起通知

//对方的环信账号user2
[[NSNotificationCenter defaultCenter] postNotificationName:CALL_MAKE1V1 object:@{CALL_CHATTER:"user2", CALL_TYPE:@(EMCallTypeVideo)}];

这样就能发起视频了。当然,这里由于还没有集成推送,所以只有对方在线的时候才能接收到你发起的视频。
然后如果不想使用环信原生的视频界面,就可以修改EM1v1CallViewController里面的内容,自定义你的视频界面。
我集成后,发现一个小问题,就是当我发起视频后,然后挂断,对面能正常挂断,但是我一直处于拨打界面。
所以我在DemoCallManager里面的方法

- (void)callDidEnd:(EMCallSession *)aSession
            reason:(EMCallEndReason)aReason
             error:(EMError *)aError

中返回挂断原因的位置家了dismiss的语句

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
            UIViewController *rootViewController = window.rootViewController;
            [rootViewController dismissViewControllerAnimated:YES completion:nil];

不知道这样有什么弊端,希望有大佬指正。

上一篇下一篇

猜你喜欢

热点阅读