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 现在支持三种发起方式,且可以无缝切换:
- FaceTime:在通话中点击 Share 按钮,系统展示支持 SharePlay 的应用列表
- Messages:无需通话,直接在消息中发起共享活动
- AirDrop:设备靠近即可发起,适合面对面场景
(08:35)一旦进入 SharePlay 会话,参与者可以随时切换活动类型,不需要重新配置群组。比如从”一起听歌”切换到”一起看视频”,整个群组会跟随切换。
应用发现与安装
(08:54)如果群组中有人还没有安装支持 SharePlay 的应用,系统会自动引导他们到 App Store 下载。这降低了新用户加入的门槛。
核心启发
-
做一起购物的电商应用
- 做什么:情侣或室友可以一起浏览商品、共同决定购买什么家具或装饰
- 为什么值得做:SharePlay via AirDrop 让面对面购物场景变得自然,不需要凑在一起看同一个屏幕
- 怎么开始:定义一个
GroupActivity,type 设为.shopTogether,用GroupSessionMessenger同步当前浏览的商品和标注
-
做协作学习的教育应用
- 做什么:学生可以一起看教学图表、做标注、讨论问题,内容实时同步
- 为什么值得做:教育场景天然适合多人协作,SharePlay 提供了端到端加密的同步通道,不需要自建服务器
- 怎么开始:type 设为
.learnTogether,将画布操作(画笔、标注、翻页)通过GroupSessionMessenger广播
-
做一起健身的运动应用
- 做什么:朋友可以一起跟练课程,实时看到对方的进度和心率
- 为什么值得做:新类型
.workoutTogether让系统在 HUD 中显示健身图标,用户一眼就知道在做什么 - 怎么开始:定义 GroupActivity 时设置 type 为
.workoutTogether,同步当前训练阶段和完成状态
-
做共享白板的设计应用
- 做什么:设计师和客户可以一起在白板上贴图、画线、写注释
- 为什么值得做:结合
GroupSessionJournal(见 Share files with SharePlay),可以传输图片附件到共享画布 - 怎么开始:用
GroupSessionMessenger同步画笔操作,用GroupSessionJournal传输参考图片
-
做一起点餐的外卖应用
- 做什么:一群人一起浏览菜单,各自选自己想吃的,最后合并下单
- 为什么值得做:这是 Session 中的演示场景,非常贴近日常生活,用户接受度高
- 怎么开始:type 设为
.shopTogether或.generic,同步每个人的选择和购物车状态
关联 Session
- Share files with SharePlay — 使用 GroupSessionJournal API 在 SharePlay 中传输文件和附件
- Build spatial SharePlay experiences — 在 visionOS 中构建空间 SharePlay 体验
- Make a great SharePlay experience — SharePlay 体验设计最佳实践
评论
GitHub Issues · utterances