PHP小丑 发表于 2022-5-5 12:17:24

SFSafariViewController 加载的网页与原生oc之间的交互

问题描述:
工作中碰到这样一种场景, WebApp 已经实现了IM即时通讯及基于WebRTC实现的音视频会议,音视频聊天。 也是半路接手的项目,项目整体是使用WKWebView套壳加载h5 页面实现(后期过审还有很多路要走) 。 h5与原生交互的方案使用的javascriptCore(具体如何使用,不在本文之内)。 大部分的交互工作都是可以得到解决,唯独需要调起WebRTC引擎进行音视频会议,音视频聊天时,WKWebView就无法再提供支持了。
但在手机的Safari浏览器中加载的WebApp在使用音视频这块是完全支持的。 所以首先想到的就是涉及到WebRTC这块的功能,我们能否放到Safari中去处理 ?
方案探索:
方案一:
点击h5中的 发起视频会议通过javascriptCore引擎与oc进行交互, oc拦截到并调起safari浏览器来打开h5封装的音视频会议功能。
//创建一个url
NSURL *url = ;

//打开url
[ openURL:url];
通过上面的代码调用, 在点击后,会跳出应用,跳转到safari浏览器来打开视频会议的地址。 通过尝试基本满足要求。 但在使用完成后,返回原生App的体验着实不太友好。 我们知道苹果在iOS9推出了一个SFSafariViewController的控制器,它继承自UIViewController。 接下来的方案尝试用这个控制器来处理。
方案二:
同样, oc拦截h5过来的点击事件,约定一个类型或名称,用于区分是来自哪个事件,并处理逻辑
//创建一个url
NSURL *url = ;

//使用SFSafariViewController 打开url
SFSafariViewController *safariVc = [ initWithURL:];
;
通过测试,SFSafariViewController 可以完美支持WebRTC引擎的调用,而且打开的这个页面也是在App内进行的,并没有跳出App,使用体验上有所增强。
视频会议的场景是创建一个room,分享出去。其他用户可以通过room名称及密码来加入到房间。 这个功能非登录用户同样可以使用,本质和业务系统的登录授权没有太多关系,只需要知道room名称及密码就可以加入到视频会议中来。
但在IM即时通讯的功能中,还有一个发起音视频聊天的功能,类似微信的音视频即时通讯。在这个业务场景中,需要用户登录授权,需要发起后,等待对方接听等流程处理。远不是视频会议的使用场景,所以这块就不能简单的通过单纯的SFSafariViewController来处理,还需要解决如下两个问题 :


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

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

本文来自博客园,作者:reyzhang,转载请注明原文链接:https://www.cnblogs.com/reyzhang/p/16199164.html


   
   
   
      

https://www.cnblogs.com/reyzhang/p/16199164.html
页: [1]
查看完整版本: SFSafariViewController 加载的网页与原生oc之间的交互