问题描述:

工作中碰到这样一种场景, 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. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

  2. TypeScript(5)类、继承、多态

    前言 对于传统的 JavaScript 程序我们会使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员使用这些语法就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来 ...

  3. node图片压缩的两员大将

    一.ishrink 全局安装 npm i ishrink -g 1.按url方式压缩 本地图片地址 sk -u C:\Users\admin\Desktop\images\img 网络图片地址 sk ...

  4. 视图模板引擎——Vue【双向绑定】原理剖析

    首先我们来了解一下MVC.MVP.MVMM这三大架构模式在前端角度上的理解. MVC分别是 Model(模型).View(视图).Controller(控制器)三个模块.View(视图层)最主要完成前 ...

  5. SAP 实例 5 CFW Events

    REPORT demo_custom_control . * Declarations ***************************************************** CL ...

  6. VisionPro · C# · 创建项目

    将 VisionPro 引入 C# 项目程序中需要执行以下操作: 1.更改项目程序.NET框架: 2.添加编程引用: 3.添加界面设计控件引用: VisionPro 不同版本对应不同的 .NET 框架 ...

  7. HMS Core音频编辑服务3D音频技术,助力打造沉浸式听觉盛宴

    2022年6月28日,HDD·HMS Core.Sparkle影音娱乐沙龙在线上与开发者们见面.HMS Core音频编辑服务(Audio Editor Kit)专家为大家详细分享了基于分离的3D音乐创 ...

  8. # vue3 ref 和 reactive 函数

    vue3 ref 和 reactive 函数 前言 上一篇博文介绍 setup 函数的时候,最后出现一个问题,就是在 setup 函数中,编写一个事件,直接去修改定义的变量,发现页面上没有更新成功,并 ...

  9. UML图记忆技巧

    什么是UML类图 Class Diagram:用于表示类.接口.实例等之间相互的静态关系 虽然名字叫类图,但类图中并不只有类 记忆技巧 UML箭头方向: 从子类指向父类 我相信 很多同学都会有和我一样 ...

  10. Spring Boot 知识点总结

    现在仅总结重要和实用的知识点,更加全面的请见链接:1.:2.. 微服务:架构风格(服务微化):一个应用应该是一组小型服务:可以通过HTTP的方式进行互通:微服务:每一个功能元素终都是一个可独立替换和独 ...