问题描述:

工作中碰到这样一种场景, WebApp 已经实现了IM即时通讯及基于WebRTC实现的音视频会议,音视频聊天。 也是半路接手的项目,项目整体是使用WKWebView套壳加载h5 页面实现(后期过审还有很多路要走) 。 h5与原生交互的方案使用的javascriptCore(具体如何使用,不在本文之内)。 大部分的交互工作都是可以得到解决,唯独需要调起WebRTC引擎进行音视频会议,音视频聊天时,WKWebView就无法再提供支持了。

但在手机的Safari浏览器中加载的WebApp在使用音视频这块是完全支持的。 所以首先想到的就是涉及到WebRTC这块的功能,我们能否放到Safari中去处理 ?

方案探索:

方案一:

点击h5中的 发起视频会议通过javascriptCore引擎与oc进行交互, oc拦截到并调起safari浏览器来打开h5封装的音视频会议功能。

//创建一个url
NSURL *url = [NSURL URLWithString:@"视频会议的地址"]; //打开url
[[UIApplication sharedApplication] openURL:url];

通过上面的代码调用, 在点击后,会跳出应用,跳转到safari浏览器来打开视频会议的地址。 通过尝试基本满足要求。 但在使用完成后,返回原生App的体验着实不太友好。 我们知道苹果在iOS9推出了一个SFSafariViewController的控制器,它继承自UIViewController。 接下来的方案尝试用这个控制器来处理。

方案二:

同样, oc拦截h5过来的点击事件,约定一个类型或名称,用于区分是来自哪个事件,并处理逻辑

//创建一个url
NSURL *url = [NSURL URLWithString:@"视频会议的地址"]; //使用SFSafariViewController 打开url
SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:str]];
[vc presentViewController:safariVc animated:YES completion:nil];

通过测试,SFSafariViewController 可以完美支持WebRTC引擎的调用,而且打开的这个页面也是在App内进行的,并没有跳出App,使用体验上有所增强。

视频会议的场景是创建一个room,分享出去。其他用户可以通过room名称及密码来加入到房间。 这个功能非登录用户同样可以使用,本质和业务系统的登录授权没有太多关系,只需要知道room名称及密码就可以加入到视频会议中来。

但在IM即时通讯的功能中,还有一个发起音视频聊天的功能,类似微信的音视频即时通讯。在这个业务场景中,需要用户登录授权,需要发起后,等待对方接听等流程处理。远不是视频会议的使用场景,所以这块就不能简单的通过单纯的SFSafariViewController来处理,还需要解决如下两个问题 :

  1. 用户已登录状态与其他信息如何传递到新开的SFSafariViewController中?
  2. 用户在发起音视频界面,点击挂断,如何能监听到事件,与原生进行交互?

方案三:

更多方案内容详见: https://zhanglei.blog.csdn.net/article/details/121352716

SFSafariViewController 加载的网页与原生oc之间的交互的更多相关文章

  1. 关于android 加载https网页的问题

    我在加载https网页时出现空白, 因此,我就百度一下,可以发现: webView.setWebViewClient(new WebViewClient(){ @Override public voi ...

  2. Scrapy爬取Ajax(异步加载)网页实例——简书付费连载

    这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...

  3. JQuery加载html网页

    在ASP.NET MVC环境中,使用jQuery脚本去实现加载html网页. 一般情况之下,在ASP.NET MVC项目中,你不能在~/Views目录之下添加或是创建任何html为后缀的网页.但这也不 ...

  4. Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果

    1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ...

  5. Django加载静态网页模板

    Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...

  6. iOS-仿支付宝加载web网页添加进度条

    代码地址如下:http://www.demodashi.com/demo/11727.html 目前市场上APP常会嵌入不少的h5页面,参照支付宝显示web页面的方式, 做了一个导航栏下的加载进度条. ...

  7. ajax实现简单的点击左侧菜单,右侧加载不同网页

    实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 原理:ajax的 ...

  8. Qt(QtWebEngine)加载本地网页跨域问题的总结

    目录 1. 概述 2. 详论 2.1. 传参 2.2. JS module 3. 建议 4. 参考 1. 概述 浏览器直接加载本地网页的时候,如果网页涉及到加载本地资源(如图片),会出现跨域的问题.Q ...

  9. .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

随机推荐

  1. DevStream 成为 CNCF Sandbox 项目啦!- 锣鼓喧天、鞭炮齐鸣、红旗招展、忘词了。

    开局两张图,内容全靠"编" 来,有图有真相! DevStream ️ CNCF DevStream joins CNCF Sandbox CNCF Cloud Native Int ...

  2. R语言读取matlab中数据

    1. 在matlab中将数据保存到*.mat 文件夹 save("data.mat","data","label")#将data和label ...

  3. JS:&&运算符

    &&逻辑运算符 当&&连接语句时,两边的语句会转化为布尔类型 1.两边条件都为true时,结果才为true: 2.如果有一个为false,结果就为false: 3.当第 ...

  4. 记ettercap0.8.3的DNS欺骗

    无意间接触到这个叫中间人攻击,找了些教程自己搞了一遍. 局域网内测试,kali虚拟机桥接本地网络,不然不在一个段上面.kali 192.168.1.191 win10 :192.168.1.7 ett ...

  5. 一篇文章带你深入浅出Vuex

    在写Vuex之前,我们先用一个简单的例子来实现一个小demo 大家都知道Vue的父传子用在很多场景,比如像这样: 父组件: <template> <div id="app& ...

  6. SAP Web Dynpro-版本管理

    您可以使用版本管理来管理对象的旧版本,比较版本,也可以重置它们. 在版本管理中,您可以存储ABAP开发对象的不同版本. 在ABAP工作台中,您可以比较不同版本的- 视图 视窗 控制器 您也可以存储对象 ...

  7. SpringBoot 整合文件上传 elment Ui 上传组件

    SpringBoot 整合文件上传 elment Ui 上传组件 本文章记录 自己学习使用 侵权必删! 前端代码 博主最近在学 elment Ui 所以 前端使用 elmentUi 的 upload ...

  8. this关键字、static关键字、方法的调用

    1.带有static关键字的方法,不可使用this关键字.因为其调用方法为类名.方法名(建议这种方式,调用不需要对象的参与),不存在对象. 2.实例方法调用必须有对象的存在,先创建对象,通过引用.的方 ...

  9. python实现人脸关键部位检测(附源码)

    人脸特征提取 本文主要使用dlib库中的人脸特征识别功能. dlib库使用68个特征点标注出人脸特征,通过对应序列的特征点,获得对应的脸部特征.下图展示了68个特征点.比如我们要提 取眼睛特征,获取3 ...

  10. ArrayList分析2 :Itr、ListIterator以及SubList中的坑

    ArrayList分析2 : Itr.ListIterator以及SubList中的坑 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/16409137.html ...