Add Shared with You to your app
System & Services 进阶 20m

在你的 App 中接入 Shared with You

Add Shared with You to your app

2022年6月6日

在 Apple 官方观看视频

一句话判断

如果你的 App 有内容分享场景,接入 Shared with You 框架能让用户在 iMessage 里收到的链接自然地回流到你的 App 中,提升内容发现效率。

这场 Session 讲了什么

Shared with You 是 iOS 15 引入、iOS 16 开放给第三方开发者的功能。它的核心理念是:朋友在 Messages 里发给你的内容,不应该沉没在聊天记录里,而应该在你打开相关 App 时自动浮现。

Session 详细介绍了 Shared with You 的设计规范和实现方式。包含两个核心 UI 组件:Shared with You Shelf(展示区域)和 Attribution View(来源标识视图)。展示区域是一个专门的浏览区域,突出显示来自 Messages 的内容;来源标识视图展示是谁分享了这条内容,点击可以直接跳回对应的 Messages 对话。

底层技术基于 Universal Links。内容排序由 Siri Suggestions 驱动,综合考虑用户是否查看过、是否置顶、当前使用场景等因素。

值得深挖的点

隐私设计思路值得学习。 Attribution View 是进程外渲染的(out of process),App 无法访问 Messages 的收件人或对话信息。你的 App 只能看到通过 Universal Links 关联的属于自己的内容。这种设计在功能性和隐私之间找到了一个精妙的平衡点。

自动分享授权的渐进式设计。 用户不需要提前授权。当内容被置顶(Pinned)时,隐式地授予了 Shared with You 的展示权限。当系统检测到用户频繁置顶你 App 的内容时,会提示开启自动分享。这种渐进式的权限模型比一次性弹窗授权要好得多。

内容排序不是简单的时间倒序。 第一条内容由 Siri Suggestions 策展,基于多个信号综合排序;其次是置顶内容;剩余部分才按时间排列。这意味着你的 App 在反馈用户交互数据时,会直接影响内容在 Shelf 中的排序。

代码片段

import SharedWithYou

// 获取 Shared with You 内容的高亮中心
class MyViewController: UIViewController, SWHighlightCenterDelegate {

    let highlightCenter = SWHighlightCenter()

    func setupHighlights() {
        highlightCenter.delegate = self
        // highlights 是 [SWHighlight] 数组,按排序展示
        for highlight in highlightCenter.highlights {
            // 用 highlight 构建你的展示区域
        }
    }
}
// 在 SwiftUI 中添加 Attribution View
import SharedWithYou

struct ContentView: View {
    let highlight: SWHighlight

    var body: some View {
        VStack {
            // 你的内容视图
            ContentDetailView()
            // 来源标识视图
            SWAttributionView(highlight: highlight, displayContext: .content)
        }
    }
}

最佳实践

  • 接入前提是先支持 Universal Links。 Shared with You 完全依赖 Universal Links 机制,确保你的 App 和网站之间的双向关联配置正确。
  • 在浏览场景设置 Shared with You Shelf,在详情页展示 Attribution View。 这两个组件各有各的位置,不要混淆。
  • 提供用户交互反馈。 通过 SWHighlightCenter 的 delegate 方法告诉系统用户是否查看了某条内容,这会影响内容排序。
  • 自定义 Remove 操作的文案。 比如 Safari 用的是 “Remove Link”,而不是通用的 “Remove”,让操作意图更清晰。

还有什么值得关注

  • Shared with You 在 iOS 16 才开放给第三方开发者,之前只有系统 App(Safari、Music、Podcasts、TV、News、Photos)支持
  • 接入需要在 Xcode 的 Capabilities 里添加 Shared with You Capability
  • 内容来自群聊时,至少需要一个参与者是你的联系人,才会展示
  • 用户可以在设置里按对话、按 App、或全局级别控制 Shared with You 的内容分享
WWDC 2022