SafariServices
文章目录
框架简述
SafariServices 可以在 iOS 或 macOS 应用中使用 Safari 的行为,或者拓展 Safari。
- 提供几乎与Safari 应用 相同的 UI。 用户可以在此视图中浏览网页,然后返回你的应用。 相比实现自定义浏览解决方案,该视图使用更少的方法,可以达到与Safari UI 一致的效果。(iOS)
- 添加项目到用户的 Safari 阅读列表。(iOS)
- 在你的应用程序 确定 是否已加载内容拦截程序扩展,如果已加载,告诉它刷新其内容。(iOS,macOS)
- 实现 Safari 应用扩展。在你应用中确定Safari 扩展是否被加载。(macOS)
- 允许用户在应用和 Safari 之间分享 cookies 和网络数据,来通过 SFAuthenticationSession 获得单点登录(SSO)体验。
类与相关使用
1、在你的应用中展示 Safari 内容 (iOS)
- SFSafariExtensionViewController // 展示一个浏览网页的标准视图
- SFAuthenticationCompletionHandler // 用户取消或者完成登录的授权会话
教程可参考: iOS 9之SFSafariViewController - CocoonJin - 博客园
demo:(swift) tutsplus/iOS-SafariViewControllerStarterProject: iOS 9: Getting Started with SFSafariViewController
核心代码
- (IBAction)onButtonClick:(id)sender{
NSString *urlString = @"http://www.baidu.com";
SFSafariViewController *sfViewControllr = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:urlString]];
sfViewControllr.delegate = self;
[self presentViewController:sfViewControllr animated:YES completion:^{
//...
}];
}
// Done 按钮
- (void)safariViewControllerDidFinish:(nonnull SFSafariViewController *)controller{
[controller dismissViewControllerAnimated:YES completion:nil];
}
/*
SFSafariViewController 的接口比较少,就不再继续一一列举了。
另外一个定制功能在于 SFSafariViewControllerDelegate 里面的一个方法:
这个代理会在用户点击动作(Action)按钮(底部工具栏中间的按钮)的时候调用,可以传入UIActivity的数组,创建添加一些自定义的各类插件式的服务,比如分享到微信,微博什么的。
*/
-(NSArray<UIActivity *> *)safariViewController:(SFSafariViewController *)controller activityItemsForURL:(NSURL *)URL title:(nullable NSString *)title{
return @[];
}
2、Safari 阅读列表 (iOS)
SSReadingList
// 用于给用户添加到 Safari 阅读列表SSReadingListErrorDomain
SSReadingListErrorCode
教程可参考:将网页添加至阅读列表——SSReadingList - 竹韵清风 - CSDN博客
核心代码:
[SSReadingList supportsURL:[NSURL URLWithString:@"https://www.baidu.com"]]; //检测阅读列表是否支持添加该网页
[[SSReadingList defaultReadingList]addReadingListItemWithURL:[NSURL URLWithString:@"https://www.baidu.com"] title:@"baidu" previewText:@"hellofdn" error:nil];
/*
URL:需要添加到阅读列表的网页地址
title:网页的标题
previewText:预览的信息
errror:若添加出错后的错误信息,添加成功该值为nil
*/
3、内容拦截
SFContentBlockerManager
// 你的应用内,与内容拦截器进行交互的类SFContentBlockerState
内容拦截拓展的状态
官方教程:Creating a Content Blocker | Apple Developer Documentation
Sample : samisharaf98/AdBlockerPlus: An AdBlocker extension for safari on iOS 9 and later.
4、Safari App Extensions (macOS 10.12)
-
SFSafariExtensionHandler
-
SFSafariExtensionState
-
SFSafariExtensionManager
-
SFSafariExtensionHandling 协议
-
SFSafariApplication
-
SFSafariExtensionViewController
-
SFSafariWindow // 不可创建,只可读取
-
SFSafariTab
-
SFSafariToolbarItem
-
SFSafariPage
-
SFSafariPageProperties
Safari App Extensions | Apple Developer Documentation
Safari Extensions Development Guide
Building a Safari App Extension
适用于 macOS 10.12及以后,或者安装了 Safari 10 的 macOS 10.11.5。
Safari 应用拓展可以通过读取和调整网页内容,给 Safari 添加新的功能。
一个 Safari 应用拓展可以和本地应用通信,共享数据。给应用和web 版本提供统一的体验。
以上为 Safari extension 和 主 app 共享数据描述图。
创建 Safari extension 项目时,extension 作为总工程的一个 target,可以被主 target 调用。
转载:https://blog.csdn.net/lovechris00/article/details/101849432