介绍 SFSafariViewController iOS 9 之后推出的一种 UIViewController,用于加载与显示 Web 内容,页面展示类似 Safari 浏览器的效果。 { showSafariViewController() } // MARK: 显示SFSafariViewController func showSafariViewController () { // URL let url = URL(string: "https://www.baidu.com") // 创建SFSafariViewController let safariViewController = SFSafariViewController(url: url!) ) { print(#function) } } 注意:SFSafariViewController 只能加载 HTTP/HTTPS 的 URL。
iOS 9 中的 SFSafariViewController 可以使我们非常方便的传入一个 url 来展示一个网页,调用起来是下面这样: let safari = SFSafariViewController url) self.presentViewController(safari, animated: true, completion: nil) 这里我尝试给出一个简化版(仅仅展示网页,没有其他功能)的 SFSafariViewController import UIKit import WebKit // 如果用户使用 iOS 8,则没有 SFSafariViewController,用这个 VC 来加载一个网页 class FakeSafariViewController screenRotate(notification:NSNotification) { webview.frame = self.view.frame } } 调用时,表现起来和 SFSafariViewController 是一样的: let realSafari = SFSafariViewController(URL: url) let fakeSafari = FakeSafariViewController(URL
在开发的过程中,如果我们需要给用户提供一个浏览器功能的支持、又或者需要让用户来从系统相册挑选图片,那么利用 UIKit 给我们提供的现成的 SFSafariViewController 和 UIImagePickerController 将是非常方便的事情,但是 let pc = UIImagePickerController() let sf = SFSafariViewController(URL: NSURL(string 比如说我们整个App都是采用的白色状态栏,而 SFSafariViewController 和 UIImagePickerController 都是默认背景为白色的(即需要一个黑色状态栏,否则用户看不清内容 ),这时候我们需要一个默认自身的状态栏永远为黑色的 SFSafariViewController 或 UIImagePickerController 下面以 UIImagePickerController 调用的时候,直接 let pc = CustomImagePC() SFSafariViewController 同理,当然你也可以在这些代码里插入其他内容,如果你想更高程序地定制一个 UIImagePickerController
userContentController: WKUserContentController, didReceive message: WKScriptMessage) { ... } } SFSafariViewController showSafariViewController() { // URL let url = URL(string: "https://www.baidu.com") // 创建SFSafariViewController let sf = SFSafariViewController(url: url!) SFSafariViewControllerDelegate { // 点击左上角的完成(done) func safariViewControllerDidFinish(_ controller: SFSafariViewController ) { print(#function) } // 加载完成 func safariViewController(_ controller: SFSafariViewController
比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View 在 SwiftUI 组件中显示会异常。 How do I use SFSafariViewController with SwiftUI? TP40017632-CH7-SW1 [14] iAppStore - GitHub: https://github.com/37iOS/iAppStore-SwiftUI [15] How do I use SFSafariViewController - Stack Overflow: https://stackoverflow.com/questions/56518029/how-do-i-use-sfsafariviewcontroller-with-swiftui
除了WKWebKit以外,另外一个访问网页的选择是使用SFSafariViewController。 因为其实SFSafariViewController就是一个独立于 app 的 Safari 进程,所以它完全不受 ATS 的限制。
比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View 在 SwiftUI 组件中显示会异常。 How do I use SFSafariViewController with SwiftUI? Marketing Tools and Resources - Apple Services 37iOS/iAppStore-SwiftUI - GitHub ios - How do I use SFSafariViewController
今天碰到这样一个场景,我需要一个仅仅用来展示网页的页面,那么在 iOS 9 中,我可以使用 SFSafariViewController,而在 iOS 8 及之前版本中,我会使用一个 WebView 来占据整个视图空间
方案二:使用 SFSafariViewController 传递参数 SFSafariViewController 是 iOS 9.0 出现的,可以通过 Safari 对应的 cookier 传递参数,
Authorization 创建一个“登录”按钮,该按钮将在应用程序中打开一个安全的网络浏览器(ASWebAuthenticationSession或SFSafariViewController在 iOS 在 iOS 上,这是ASWebAuthenticationSession或SFSafariViewController,在 Android 上,这被称为“自定义标签”。
takeSnapshot(with:completionHandler:) 方法用来捕获网页的快照 新增了 WKContentRuleList 用于处理一组Web内容的规则列表 更新了iOS9才支持的 SFSafariViewController
例如,开发者无法区分实际的 Safari(有“添加到主屏幕”按钮)和 SFSafariViewController View(没有这个按钮)。 需要注意的是,许多应用内浏览器使用了 SFSafariViewController,如 Twitter 的 iOS 应用。 结果,开发者别无选择,只能显示自定义指令。
Safari Cookie方案:通过SFSafariViewController共享Cookie,建立设备与服务器的唯一关联。
SFSafariViewController *webView = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:square.url
这首先是SFSafariViewController在 iOS 9 中添加的,后来SFAuthenticationSession在 iOS 11 和ASWebAuthenticationSessioniOS
/ 3 if identifier == "VIEW_IDENTIFIER", let url = NSURL(string: newsItem.link) { let safari = SFSafariViewController SFSafariViewController 显示这个链接内容。 在处理完用户交互动用之后调用系统传递给你的 completionHandler 回调。 编绎运行,退出App。发送通知。
该动作会将应用程序切换到Safari 如果您想在iOS中支持链接预览,但又想要在应用程序中保留用户,那么您可以将WKWebView类转换为SFSafariViewController类 如果您使用WebView 作为应用内浏览器,那么进行这种更改是最佳选择 SFSafariViewController自动支持链接预览 iOS 10.0+开始支持自定义链接预览,你也可以通过这种方式来实现用户预览网页并pop后仍然留在应用内而不用切换到
MeasurementSKAdNetwork 4.0 支持网页版 SKAdNetwork,让广告商能归因那些会转至推广 App 的 App Store 产品页面的网页广告,除了移动网站外,苹果还支持 iOS 和 iPadOS app 的 SFSafariViewController