分享面板是跨应用的标准出口
别名: 系统分享 · share sheet · UIActivityViewController · Android Sharesheet
概念解释
系统分享面板(share sheet)是操作系统提供的、把当前内容交给其他应用的标准出口。发送方只声明「这里有一份可交接的内容」,并不自己枚举全机应用、也不自己打开对方的会话页;系统按已安装的接收方、最近使用和用户固定项拼出目标列表,人选定后再由系统完成投递。它和「应用内发给好友」不是同一条路:后者走产品自己的社交图,前者走设备上的跨应用图。这条只谈面板作为出口的角色,不谈自绘图标列会漏谁,也不谈交接时该带哪种数据格式。
机制
移动系统用沙盒隔开应用,发送方既看不到完整的已装列表,也不能直接唤起任意接收方的写入入口。分享面板充当系统中介:发送方登记一份内容(文本、链接、文件、图片),操作系统去匹配曾经声明「我能收这类东西」的扩展或意图过滤器,再把人选的目标接上。最近使用和置顶是系统对这台设备上分享图的记忆,不是发送方产品里的联系人表,所以同一按钮在不同人、不同机上展开的目标完全不同。出口标准化的代价是发送方失去对目标界面的控制——投递之后发生什么,由接收方和系统约定,不由发送方的导航栈决定。
边界
没有可安装第三方接收方的封闭设备(部分功能机、受管终端只允许白名单应用)上,系统面板可能是空的或只剩「存储到文件」,此时应用内发送仍是唯一通路。企业内部分发、仅登录用户之间的投递(报销提交、工单转交)本来就不经过设备级分享图,不该被改成系统面板。桌面端的等价物是拖放和剪贴板,而不是这块从底边滑出的面板;把手机分享面板的交互直接搬到窗口应用里,会找不到对应的系统表面。人只是要把内容留在当前应用(收藏、添加到专辑)时,那是应用内动作,不是跨应用出口。
怎么落地
- 内容上凡是「拿到别的应用里继续」的动作,入口接到系统分享面板,而不是只打开自家的好友选择器。
- 发送方只负责交出内容和一份可读的预览标题;不要在面板弹出前再套一层「选平台」的中间页。
- 验证:在测试机上另装一个从未与产品对接过的笔记或文件应用,从产品里点分享,该应用应出现在系统面板中且能完成接收,产品代码无需为它增加一项。