iOS共享与动作应用程序扩展

我想实现一个应用程序扩展,但我不能决定是否应该作为共享扩展或行动扩展实现它。

文档没有太多说明差异,只是这个:

  • 分享(iOS和OS X) :发布到分享网站或与他人分享内容
  • 操作(iOS和OS X; UI和非UI变体) :操纵或查看源自主机应用程序的内容

是否也有技术上的差异(例如,Action扩展是否允许我做一些Share扩展没有的function),还是仅仅是Apple希望你遵循的一个约定,以减less用户的困惑?

似乎至less有一个区别是,如果你想要一个非UI动作,你必须select一个动作而不是共享扩展。

其他的区别是什么?

我正在寻找的东西的例子:

  • 他们是否都允许我自定义用户界面?
  • 这两个都给我一些默认的UI使用?
  • 他们是否有相同的权限,还是我被允许在一个和另一个之间做更多的事情?
  • 他们都收到来自主机应用程序相同的input?
  • 他们都可以发回相同的数据到主机应用程序?

这是我迄今为止的发现:

概要:

  • 图标 :共享附加信息具有彩色图标。
  • 图标位置 :某些应用程序(如Safari)具有大量与您的图标竞争的不可隐藏的活动图标。
  • 用户界面 :共享扩展应具有一致的用户界面。
  • 意图 :共享扩展是为了共享内容而保留,但即使是苹果也违反了这个要求。

图标

共享附加信息会显示一个彩色的图标,与您应用的主图标一样。 事实上,苹果声明:“如果你在你的共享扩展目标中提供了一个单独的图标,Xcode会忽略它。” [B]

动作扩展程序使用应用程序图标的“单色版本” [E]或“模板图像版本” [B]

在这里输入图像说明


图标的位置

共享附加信息出现在中间行,附加行动信息出现在最下面一行。

根据目标应用程序的不同,您的图标可能会与更多或更less的图标进行竞争,作为共享与动作的扩展。 例如,如果用户将主要通过Safari访问您的扩展程序,则您的应用程序将默认与另外4个图标竞争作为共享扩展名*,或另外8个图标作为操作扩展名。 另一方面,如果您定位到Google地图应用,那么您将与更多图标竞争作为共享扩展(4)而不是动作扩展(2)。

因此,为了最大限度地提高用户曝光率,您希望在定位到Safari时select共享附加信息,而在定位地图时则需要添加动作。

注意:大多数活动是由主机应用程序本身使用UIActivity和UIActivityViewController API提供的。 关于他们NSHipster有一个很好的写作 。

*显然,共享和活动扩展的数量根据安装的应用程序以及用户select显示/隐藏的内容而改变。

iOS 9.1模拟器的例子:

  • 联系方式:
    • 分享(1):邮件
    • 活动(0):
  • 地图:
    • 分享(4):邮件, 提醒,Twitter,Facebook
    • 活动(2):添加到collections夹,打印
  • 新闻:
    • 分享(4):邮件, 提醒,Twitter,Facebook
    • 活动(5):添加到阅读列表,复制,在Safari中打开,报告问题,静音通道
  • 相片:
    • 分享(4):邮件, 推特,Facebook,Flickr
    • 活动(6):复制,幻灯片,隐藏,分配给联系人,用作壁纸,打印
  • 苹果浏览器:
    • 分享(4):邮件, 提醒,Twitter,Facebook
    • 活动(10):添加到collections夹,添加书签,添加到阅读列表,添加到主屏幕,添加到共享链接, 添加到新闻 ,复制,打印,在页面上查找,请求桌面站点
  • (突出显示的文字):
    • 分享(3):邮件, Twitter,Facebook
    • 活动(1):复制

(斜体表示图标可以隐藏。)


用户界面

默认的共享扩展模板带有SLComposeServiceViewController的子类,以保持一致。 苹果希望你“尽可能地使用共享扩展中的系统提供的UI”。 [E]

另一方面, 动作扩展允许您select一个动作types呈现用户界面无用户界面 ),前者带有一个空白的UIViewController。

在这里输入图像说明 在这里输入图像说明
默认的共享扩展; 默认呈现用户界面操作扩展。


意图

尽pipe苹果表示,一个共享扩展应该“张贴到共享网站或与他人分享内容”,即使他们违反了这个要求与提醒。

操作扩展程序旨在“操纵或查看源自主机应用程序的内容”。 [一个]


事情是一样的

  • 两者都允许您的应用程序提供扩展的多个版本。 (例如,你的应用程序可以提供两个共享扩展和两个动作扩展。)
  • 在我有限的testing中,他们似乎都被默认禁用,用户必须明确点击更多button才能启用共享/操作扩展。

参考

  • 答: 应用程序扩展增加您在应用程序扩展编程指南中的影响
  • B: 在应用程序扩展编程指南中创build应用程序扩展
  • C: 在应用程序扩展编程指南中分享
  • D: 应用程序扩展程序devise指南中的操作
  • E: iOS人机界面指南中的应用程序扩展