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

Sen*_*ful 38 ios ios8 ios8-share-extension ios8-extension

我想实现应用程序扩展,但我无法决定是否应将其实现为共享扩展或操作扩展.

文档没有说明差异,只是这样:

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

是否存在技术差异(例如,Action扩展是否允许我执行Share扩展所不具备的功能),还是仅仅是Apple希望您遵循的约定,以减少对用户的混淆?

似乎至少有一个区别是,如果您想要非UI操作,则必须选择Action而不是Share扩展.

还有什么区别?

我正在寻找的事情的例子:

  • 他们都允许我自定义UI吗?
  • 两者都给我一些默认的UI使用吗?
  • 他们都拥有相同的权限,还是我被允许在一个与另一个中做更多的事情?
  • 他们都从Host应用程序接收相同的输入吗?
  • 他们都可以将相同的数据发送回主机应用吗?

Sen*_*ful 77

以下是我的调查结果:

摘要:

  • 图标:共享扩展程序有彩色图标.
  • 图标位置:某些应用程序(如Safari)具有大量不可隐藏的活动图标,您的图标将与之竞争.
  • 用户界面:共享扩展应具有一致的UI.
  • 意图:共享扩展旨在保留用于共享内容,但即使Apple也违反了此要求.

图标

共享扩展程序会显示一个彩色图标,该图标与应用程序的主图标相同.事实上,Apple表示:"如果您在共享扩展目标中提供单独的图标,Xcode会忽略它." [B]

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

在此输入图像描述


图标位置

共享扩展名显示在中间行,操作扩展名显示在底行.

根据所定位的应用,您的图标可能会与或多或少的图标竞争,作为共享与动作扩展.例如,如果用户主要通过Safari访问您的扩展程序,则默认情况下,您的应用程序将与其他4个图标竞争共享扩展程序*,或将8个其他图标作为操作扩展程序进行竞争.另一方面,如果您要定位地图应用,则会将更多图标作为共享扩展(4)而不是动作扩展(2)进行竞争.

因此,为了最大限度地提高您对用户的曝光率,您可能希望在定位Safari时选择共享扩展程序,但在定位Google地图时则需要操作扩展程序.

注意:大多数活动都是由主机应用程序本身使用UIActivityUIActivityViewController API提供的.有一个关于他们的伟大的写了上NSHipster.

*显然,共享和活动扩展的数量会根据已安装的应用程序以及用户选择显示/隐藏的内容而发生变化.

iOS 9.1模拟器中的示例:

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

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


用户界面

默认的Share扩展模板附带了SLComposeServiceViewController的子类,以保持一致.Apple希望您"尽可能在共享扩展中使用系统提供的UI".[E]

另一方面,操作扩展允许您选择操作类型(呈现用户界面无用户界面),前者带有空白的UIViewController.

在此输入图像描述 在此输入图像描述
默认分享延期; 默认显示用户界面操作扩展.


意图

虽然Apple声明共享扩展应该"发布到共享网站或与他人共享内容",[A]即使他们违反了提醒的这一要求.

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


事情是一样的

  • 两者都允许您的应用提供多个版本的扩展程序.(例如,您的应用可以提供两个共享扩展和两个操作扩展.)
  • 在我的有限测试中,默认情况下它们似乎都被禁用,用户必须明确点击更多按钮才能启用共享/操作扩展.

参考