SFSafariViewController 加载的网页与原生oc之间的交互
问题描述:
工作中碰到这样一种场景, 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来处理,还需要解决如下两个问题 :
- 用户已登录状态与其他信息如何传递到新开的SFSafariViewController中?
- 用户在发起音视频界面,点击挂断,如何能监听到事件,与原生进行交互?
方案三:
更多方案内容详见: https://zhanglei.blog.csdn.net/article/details/121352716
SFSafariViewController 加载的网页与原生oc之间的交互的更多相关文章
- 关于android 加载https网页的问题
		我在加载https网页时出现空白, 因此,我就百度一下,可以发现: webView.setWebViewClient(new WebViewClient(){ @Override public voi ... 
- Scrapy爬取Ajax(异步加载)网页实例——简书付费连载
		这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ... 
- JQuery加载html网页
		在ASP.NET MVC环境中,使用jQuery脚本去实现加载html网页. 一般情况之下,在ASP.NET MVC项目中,你不能在~/Views目录之下添加或是创建任何html为后缀的网页.但这也不 ... 
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
		1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ... 
- Django加载静态网页模板
		Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ... 
- iOS-仿支付宝加载web网页添加进度条
		代码地址如下:http://www.demodashi.com/demo/11727.html 目前市场上APP常会嵌入不少的h5页面,参照支付宝显示web页面的方式, 做了一个导航栏下的加载进度条. ... 
- ajax实现简单的点击左侧菜单,右侧加载不同网页
		实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 原理:ajax的 ... 
- Qt(QtWebEngine)加载本地网页跨域问题的总结
		目录 1. 概述 2. 详论 2.1. 传参 2.2. JS module 3. 建议 4. 参考 1. 概述 浏览器直接加载本地网页的时候,如果网页涉及到加载本地资源(如图片),会出现跨域的问题.Q ... 
- .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
		系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ... 
随机推荐
- 基于MybatisPlus代码生成器(2.0新版本)
			一.模块简介 1.功能亮点 实时读取库表结构元数据信息,比如表名.字段名.字段类型.注释等,选中修改后的表,点击一键生成,代码成即可提现出表结构的变化. 单表快速转化restful风格的API接口并对 ... 
- 学了WEB缓冲投毒-挖SRC的时候咋利用
			学了WEB缓冲投毒-挖SRC的时候咋利用 昨天发了哥WEB缓存投毒的学习文章,但是除了理论和训练营并无实践,正巧翻到了一篇文章,感觉还有点关系,转的一个国外的老哥的文章. 微信公众号:小惜渗透,欢迎大 ... 
- BUUCTF-BJDCTF2020]just_a_rar
			BJDCTF2020]just_a_rar 压缩包提示是四位数密码 爆破得知压缩包密码 16进制查看解压的图片后发现flag flag{Wadf_123} 
- npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)
			前言 在此之前,你需要去npm官网注册一个属于自己的账号,记住自己的账户名以及密码.邮箱,后面会用的到.第一步,安装webpack简易框架 vue init webpack-simple marque ... 
- SAP APO - 简介
			SAP高级计划和优化(SAP APO)是SAP SCM中的关键模块之一,在供应链流程中控制供应网络计划,备件计划,TP / VS和需求计划. 它可以帮助组织在动态环境中管理其供应链流程. SAP AP ... 
- 深入理解springboot的自动注入
			一.开篇 在平时的开发过程中用的最多的莫属springboot了,都知道springboot中有自动注入的功能,在面试过程中也会问到自动注入,你知道自动注入是怎么回事吗,springboot是如何 ... 
- Web思维导图实现的技术点分析(附完整源码)
			简介 思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,有免费的也有收费的,此外也有一些可以用来帮助快速实现的JavaScript类库,如:jsMind.KityM ... 
- .NET ORM框架HiSql实战-第一章-集成HiSql
			一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ... 
- VS Code 调教日记(2022.6.26更新)
			VS Code 调教日记(2022.6.26更新) 基于msys2的MinGW-w64 GCC的环境配置 下载并安装msys2 到路径...msys2安装路径...\msys64\etc\pacman ... 
- ReentrantLock 公平锁源码 第0篇
			ReentrantLock 0 关于ReentrantLock的文章其实写过的,但当时写的感觉不是太好,就给删了,那为啥又要再写一遍呢 最近闲着没事想自己写个锁,然后整了几天出来后不是跑丢线程就是和没 ... 
