在iOS应用中使用实时活动与灵动岛
iOS16系统引入了实时活动与灵动岛相关的API。实时活动API能够让用户在桌面直接浏览到应用程序所提供的实时性较高的信息,例如比赛的比分信息,外卖的配送进度信息,票务信息等。在支持灵动岛的设备上,实时活动配合灵动岛,更是能带给用户沉浸式的信息获取体验,在某些特定应用场景下非常有用。
1 - 引言
从iOS16开始,实时活动能够在锁屏、待机桌面以及灵动岛等位置提供信息更新展示。在某些特定场景下,实时活动可以提供给用户几个小时内掌握实时事件、活动或任务更新。常见的应用场景有:
- 外卖类应用实时提供用户配送进度,剩余时间。
- 赛事类应用的实时分数。
- 健身类应用与可穿戴设备的实时体能状态更新。
实时应用将会展示在设备的:
- 锁屏页面
- 通知列表顶部
- 在支持灵动岛的设备上,在灵动岛位置展示
- 不支持灵动岛的设备上,实时活动的更新会在屏幕顶部弹出通知
- 待机显示时,实时活动会充满整个屏幕
需要注意,灵动岛的可可显示区域优先,在开发实时活动时,在设计上可以参考下面的最佳实践文档:
https://developer.apple.com/cn/design/human-interface-guidelines/live-activities/
2 - 开发实时活动与适配灵动岛
首先,要支持实时活动需要在工程中创建一个Widget Extension,实时活动本身也是小组件的一种。如下图所示:
需要注意,在创建Widget小组件时,将Include Live Activicy选中,如下图:
虽然实时活动也是小组件,但其他普通的Widget区别很大,小组件是通过Timeline来进行更新,而实时活动只能通过App触发更新或特殊Push更新和关闭;小组件需要用户手动添加使用,而实时活动则是由主App进行开启。创建好Tatget后,模版自带3个文件,其中LiveWidgetLiveActivity中实时活动的核心框架代码,我们做些简单的修改,如下:
import ActivityKit
import WidgetKit
import SwiftUI
// 状态结构体
struct LiveWidgetAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
// 动态的状态,有App或Push来触发更新
var score: String
}
// 静态的状态,实时活动开启时指定
var name: String
var teamA: String
var teamB: String
}
// 编写SwiftUI页面
struct LiveWidgetLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: LiveWidgetAttributes.self) { context in
// Lock screen/banner UI goes here
VStack {
Text(context.attributes.name)
Text("
标签:Text,iOS,实时,灵动,context,活动,public
From: https://blog.51cto.com/u_11643026/9042149