WWDC Quick Look 💓 By SwiftGGTeam
Add SharePlay to your app

Add SharePlay to your app

观看原视频

Highlight

SharePlay 在 iOS 17 新增了三项扩展:通过 AirDrop 近距离发起共享、五种新活动类型(Workout/Shop/Read/Learn/Create Together)、以及跨平台跨场景的连续性体验,让任何应用都能将单人活动变为多人协作。

核心内容

从远程到面对面:AirDrop 发起 SharePlay

SharePlay 最初只能在 FaceTime 通话中使用,后来扩展到 Messages。但很多时候,朋友就在你身边——地铁上一起听歌、餐厅里一起点餐、商场里一起挑家具。

03:02)iOS 17 新增了 SharePlay via AirDrop。两台设备靠近就能开始 SharePlay,不需要交换用户名或邮箱。这把 SharePlay 的适用场景从”远程同乐”扩展到了”面对面协作”。

更妙的是连续性体验。从 AirDrop 发起的 SharePlay,如果朋友们随后分开,可以无缝切换到 Messages 继续;想语音聊天了,一键就能跳到 FaceTime 通话。tvOS 17 也支持在大屏幕上进行 FaceTime 并启动 SharePlay。

更丰富的活动类型

04:45)除了已有的 Watching Together、Listening Together、Playing Together 和 Generic,今年新增了五种活动类型:Workout、Shop、Read、Learn、Create Together。这些类型决定了系统 HUD 中显示的图标和文案,帮助用户一眼识别当前在做什么。

你带活动,Apple 带人群

SharePlay 的核心理念是”你带活动,Apple 带人群”。应用只需要定义活动内容和同步逻辑,剩下的交给 GroupActivities 框架:人群发现、邀请发送、端到端加密的数据通道、群组管理 UI(人员选择器、通知、状态变化)全部内置。

01:06)数据通道使用与 FaceTime 相同的端到端加密技术,Apple 无法看到任何应用数据。这对用户隐私是一个强有力的保障。

详细内容

定义 GroupActivity

04:15)一个 SharePlay 活动需要实现 GroupActivity 协议:

import GroupActivities

struct OrderTogether: GroupActivity {
    // 唯一标识符,供系统引用
    static let activityIdentifier = "com.example.TacoTruck.OrderTogether"

    // 应用特定数据,用于在其他设备上启动活动
    let orderUUID: UUID
    let truckName: String

    var metadata: GroupActivityMetadata {
        var metadata = GroupActivityMetadata()
        metadata.title = "Order Tacos Together"
        metadata.subtitle = truckName
        metadata.previewImage = UIImage(named: "ActivityImage")?.cgImage
        metadata.type = .shopTogether
        return metadata
    }
}

关键点:

  • activityIdentifier 必须是全局唯一的反向域名格式
  • metadata.title 是活动的名称(不是应用名称)
  • subtitle 提供额外上下文信息
  • previewImage 是活动专属图片(不是应用图标)
  • type 选择最匹配的活动类型,影响系统 UI 展示

元数据配置示例

04:15)基础元数据设置:

var metadata: GroupActivityMetadata {
    var metadata = GroupActivityMetadata()
    metadata.title = "Order Tacos Together"
    metadata.type = .generic
    return metadata
}

关键点:

  • 如果应用有多个活动,确保每个活动的标题和图标不通用
  • 系统会根据 type 在 HUD 中显示对应的图标(观看、聆听、游戏或通用)
  • 新类型(Workout、Shop、Read、Learn、Create)在 iOS 17、iPadOS 17、macOS Sonoma 和 tvOS 17 上可用

跨场景连续性

03:36)SharePlay 现在支持三种发起方式,且可以无缝切换:

  1. FaceTime:在通话中点击 Share 按钮,系统展示支持 SharePlay 的应用列表
  2. Messages:无需通话,直接在消息中发起共享活动
  3. AirDrop:设备靠近即可发起,适合面对面场景

08:35)一旦进入 SharePlay 会话,参与者可以随时切换活动类型,不需要重新配置群组。比如从”一起听歌”切换到”一起看视频”,整个群组会跟随切换。

应用发现与安装

08:54)如果群组中有人还没有安装支持 SharePlay 的应用,系统会自动引导他们到 App Store 下载。这降低了新用户加入的门槛。

核心启发

  1. 做一起购物的电商应用

    • 做什么:情侣或室友可以一起浏览商品、共同决定购买什么家具或装饰
    • 为什么值得做:SharePlay via AirDrop 让面对面购物场景变得自然,不需要凑在一起看同一个屏幕
    • 怎么开始:定义一个 GroupActivity,type 设为 .shopTogether,用 GroupSessionMessenger 同步当前浏览的商品和标注
  2. 做协作学习的教育应用

    • 做什么:学生可以一起看教学图表、做标注、讨论问题,内容实时同步
    • 为什么值得做:教育场景天然适合多人协作,SharePlay 提供了端到端加密的同步通道,不需要自建服务器
    • 怎么开始:type 设为 .learnTogether,将画布操作(画笔、标注、翻页)通过 GroupSessionMessenger 广播
  3. 做一起健身的运动应用

    • 做什么:朋友可以一起跟练课程,实时看到对方的进度和心率
    • 为什么值得做:新类型 .workoutTogether 让系统在 HUD 中显示健身图标,用户一眼就知道在做什么
    • 怎么开始:定义 GroupActivity 时设置 type 为 .workoutTogether,同步当前训练阶段和完成状态
  4. 做共享白板的设计应用

    • 做什么:设计师和客户可以一起在白板上贴图、画线、写注释
    • 为什么值得做:结合 GroupSessionJournal(见 Share files with SharePlay),可以传输图片附件到共享画布
    • 怎么开始:用 GroupSessionMessenger 同步画笔操作,用 GroupSessionJournal 传输参考图片
  5. 做一起点餐的外卖应用

    • 做什么:一群人一起浏览菜单,各自选自己想吃的,最后合并下单
    • 为什么值得做:这是 Session 中的演示场景,非常贴近日常生活,用户接受度高
    • 怎么开始:type 设为 .shopTogether.generic,同步每个人的选择和购物车状态

关联 Session

评论

GitHub Issues · utterances