详解 iOS 8 的动作扩展
本文转自少数派,英文原文Action extensions in iOS 8: Explained,原作者Rene Ritchie
iOS中的分享菜单有着另外一个名字——活动监视控件,这个名字非常恰当,因为它不仅提供分享功能,同时还可以提供诸如动作之类的其他「服 务」。过去这些动作一直都只有系统自带的,比如剪切粘贴、打印等等。但就像iOS 8中的自定义共享选项一样,自定义动作选项也被添加到了其中,它们是全新的扩展性功能的一部分,新的扩展性将允许安装第三方的键盘、小工具及其他很多自定 义的动作扩展按钮。那么这些扩展动作是如何工作的?它将为我们带来什么呢?
充足的动作
▲ iOS 动作选项的演进。从左至右依次为:iOS 5及更早版本、iOS 6、iOS 8
动作选项第一次出现在 iOS 时还是存在于单调列表按钮中的一部分,仅它提供了很少的视觉区分,同时它也没有很强的扩展性。
当分享选项在 iOS 6 当中变成了网格状的按钮时,动作选项便加入其中。从此,共享选项可以现实其相对应的应用程序色彩斑斓的图标,同时动作选项获得了统一的、灰色的按钮——保 存到相机胶卷、通过 AirPrint 打印、拷贝到剪贴板等。但尽管如此,分享和动作选项仍然被放在一起,这样网格状的显示仅仅比列表好出一点点。
iOS 7 开始,分享选项的模样进行了翻新,匹配了 iOS 全新的外观,同时动作选项从灰度按钮被换成了黑白色,并拥有了一行独立的可滚动的列表,想添加多少就有多少。但即便如此,可使用的动作还是非常少。
iOS 8 终于改变了这一切。
动作扩展如何工作
iOS 8 中的扩展性意味着我们不再拘泥于苹果提供的那些默认动作选项,我们不再需要等待 AirPlay 或 AirPrint 的支持,也不再需要关心苹果会不会为第三方产品提供一个系统级别的服务,现在任何应用程序都可以通过安装扩展的方式来增强其本身以及 iOS 的实用性。
所以不需要苹果和微软就「将 Bing 翻译放入 Safari」而签署什么合作协议,微软可以在自己的 Bing 应用内创建一个动作扩展,Bing 翻译就会像原生服务一样出现在 Safari 当中。
而使用一个动作扩展也非常容易。如果你在 Safari 中阅读 iMore,但是你的母语是法语而非英语,你可以点击分享按钮,在动作选项栏横向滑动找到 Bing 翻译扩展,轻松点击便可以将网页翻译成法语。
同时,你还可以按照你的喜好重新排列动作扩展。滚动到动作选项最右端并点击更多按钮,即可将按钮前后挪动以进行排序。这意味着如果你经常使用 1Password 来帮助你输入密码,你可以将它挪动到最前面。这样每次你点开分享菜单的时候它都会在最前面,不再需要你去滑动寻找。
就像插件一样,动作扩展不仅能添加更多应用程序,它还对系统和已经存在的应用添加更多功能性。对「离开Safari - 打开1Password - 用内置浏览器打开或将密码拷贝 - 再回到Safari」的体验说再见吧!
关联阅读:1Password 在 iOS 8 上展示 Touch ID 验证登录及 Safari 扩展功能
自定义 Safari 动作
在 iOS 8 当中,有一些特定的动作扩展是针对 Safari 的。他们叫做自定义 Safari 动作,有两种类型:
* 有自己界面的动作扩展
* 没有自己界面的动作扩展
有自己界面的动作扩展如 1Password,比如在你登录 YouTube 的时候会询问你要使用你哪一个 Google 账号(如果你有多个 Google 帐号)。
没有自己界面的动作扩展如 Bing 翻译,在 WWDC 会上我们就见到过,它能即时将网页翻译成其他语言。
开发动作扩展
动作扩展允许开发者将应用内的一个功能,通过系统内建的分享页面提供给其他应用程序或者系统使用。尽管扩展主要以界面控制器的形式出现于 iOS,动作扩展可以使用界面控制器的形态,也可以如自定义 Safari 扩展,没有界面。
标准动作扩展和自定义 Safari 扩展之间的唯一区别在于,Safari 自定义扩展可以使用 JavaScript。他们有完整的文件对象模型 ( DOM, Document Object Model ) 访问权限,这意味着他们可以从网页上获取一个图片,对其进行标注,然后将新图片替换到原始文件的位置。
就像分享扩展一样,动作扩展也拥有激活条件,告诉系统他们可以处理什么样的数据。这样一来,如果一段文字被选取,那么只有那些可以对文字进行编辑的选项会被显示。如果是一张照片被选取,那么可以对照片进行修改的选项就会出现。
苹果已经对开发者提供了很多资源,来帮助他们开发动作扩展:
WWDC 2014 为iOS 和 OS X创建扩展,第二部分
动作扩展的安全性
iOS 是一个极度重视安全性和隐私的系统,新的动作扩展也不例外。iOS 中,应用程序都在沙盒机制下运行,只允许访问他们内部的文件,只有当用户给予权限的时候才可以访问特定的某个文件或系统功能。这就是为什么应用程序需要 「访问相机胶卷」的原因,也是为什么你需要点击「打开…」,这样才使得恶意应用不能访问你的系统或你的个人数据。
iOS 8 扩展性带来的改变是,苹果将一个应用程序的扩展保持在该应用沙盒内部,但是允许 iOS 和其他应用通过 iOS 向这个应用请求功能或信息,被请求的应用程序会再对请求应用或 iOS 提供用户界面、信息或其他功能。
对于动作扩展来说,功能来源方的应用程序是宿主,而你所请求的功能则是容器。比如,如果你正在使用Safari,这就是你的宿主程序。如果你在 使用 1Password 来输入密码或者使用 Bing 来进行翻译,这些都是容器。这个机制不仅提供了安全性,还提供了稳定性。(上面例子中,在 iOS 8 下使用 1Password 或 Bing 的扩展功能,都不需要提前运行相应应用或令其在后台运行)
苹果没有详细说明这些的工作原理,但是他们声称使用了与 iOS 其他层面类似的安全技术,自 iOS 7 开始苹果在安全和加密方面下了很多功夫,我相信 iOS 8 新的扩展性会特别安全实用。