macOS 开发 - SafariServices

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 - 竹韵清风 - 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、内容拦截

官方教程: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

    扫描二维码关注公众号,回复: 10046062 查看本文章
  • 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 调用。

发布了164 篇原创文章 · 获赞 162 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/lovechris00/article/details/101849432