在 WWDC22 上,Apple 发布 iOS 16 的时候,公布了一个功能叫实时活动,并向开发者开放 Live Activities API。

那么什么实时活动呢?

实时活动是一种新的交互式消息通知,用户可以在 iPhone 的锁屏界面看到事件的实时更新。比如球赛的比分、打车或订餐的订单状态、运动锻炼的实时数据等。这种消息通知形式允许开发者在实时活动期间更新单个交互式通知,而不是每次有状态更新时都发送新通知。通过减少发送的通知数量,同时使信息更易于访问。

Uber海外版团队设计的实时活动界面

Apple 在 iOS 16 开发者测试版 Beta 4 首次向开发者提供 ActivityKit 开发套件,首次在真机实装,随后在 Beta 6 和 Beta 7 并没有在真机实装实时活动功能。开发者目前只能在模拟器测试这项功能,或者降级回 Beta 4 或 Beta 5。Apple 在开发者网站也明确表示实时活动不会在首个 iOS16 正式版推出,而是在今年晚些时候的正式版突出。下图是模仿目前已有的原神安卓小组件、iOS 小组件做的实时活动版小组件。到了 8 月 16 日一大早用手机更新 Beta 6 之后,手机就不能运行和测试实时活动了,随后也看到其他开发者反馈实时活动在 Beta 6 版本没有实装。本文后面的截图只能在模拟器截取了,但模拟器不能更改壁纸,只有黑色背景。

Xcode真机调试报错ActivityKit没实装

实时活动界面部分是小组件扩展,开发者使用 WidgetKit 功能和 SwiftUI 编写界面布局,ActivityKit 是处理配置、启动、更新和结束实时活动。实时活动是一种消息通知,是一种可以自定义界面布局和更新状态的消息通知。下图是普通类型的消息通知,或许以后能看到换了界面布局的降雨提醒。

普通的消息通知类型

实时活动要求和限制

与小组件不同的是,小组件是通过时间线机制更新界面数据,实时活动是通过远程推送或 ActivityKit 从主应用程序来启动、更新和结束实时活动。实时活动无法访问网络或接收位置更新,下图网络请求图片失败。

ActivityKit 更新和远程推送通知更新的更新动态数据大小不能超过 4KB。

实时活动界面不能包含可交互元素,例如按钮和 WebView。当用户点击实时活动界面,将会打开主应用程序。

自定义实时活动的用户界面时,系统会忽略任何自定义动画,但可以使用系统自带的时间文本动画,当实时活动的动态内容发生变化时,系统会执行一些动画。文本视图通过模糊的内容过渡动画内容变化,系统为图像和 SF Symbols 符号动画内容过渡,根据内容或状态更改从用户界面添加或删除视图,视图会淡入淡出。

系统自带的时间文本动画
系统为图像内容变化作出的动画效果

开发者网站的描述中,如果实时活动的高度超过 160,系统可能会截断它。在实际测试中,实时活动界面最小高度为 64,最大高度可以达到 220。目前实时活动功能还不是正式的版本,有可能在之后的测试版本会有改变。

当用户在 App 首次启动时,点击允许应用程序发送通知时,就代表允许 App 发送实时活动通知,不允许则不会收到实时活动的通知。之后在系统设置 - 对应的 App -实时活动,可以关闭/开启实时活动权限。

实时活动权限位置

实时活动有 4 种活动状态,分别是:等待中、正在进行、成功、失败

实时活动在锁屏界面显示的时候,用户可以左划,点击清除按钮将其清除。用户没有清除的情况下,实时活动最多可以处于活动状态 8 小时,如果用户或应用程序尚未结束活动状态,系统会自动结束它。在此结束状态下,实时活动会在锁定屏幕上最多保留 4 个小时,最后系统会将其删除。


目前实时活动功能还在测试状态,开发者们还在为他们的 App 设计和测试这一项功能,下图是收集几款目前在测试中的实时活动的例子。

一些例子展示

关于实时活动这一功能的一些设想。在这个功能正式上线后,除了官方和大部分媒体提到的比赛比分、运动训练状态、行程状态、订单状态等这些功能以外,我们或许还可以看到这些功能:某餐饮 App 提醒你周四中午吃啥;原神体力、宝钱、参量质变仪到点提示上线领取;购物平台推送提醒商品抢购即将开启、正在抢购还剩余 69 件并且在不断减少等之类的功能。


以上就是关于实时活动这个功能的一些介绍和想法。之前的一篇锁屏天气的文章和视频会有评论说解锁在桌面小组件就能看到天气了啊,左划负一屏添加小组件就能看到天气了啊。不过对于我这种手机懒得解锁的用户来说,对于锁屏实时活动这个功能是非常期待的。大家对于实时活动这个系统特性及功能有什么想法和期待呢?