指南
Live Activities 教程
使用 @capgo/capacitor-live-activities
Capacitor Live Activities 插件,用于管理 iOS Live Activities。
安装
bun add @capgo/capacitor-live-activities
bunx cap sync
iOS 设置
安装并同步插件不会创建原生 Live 活动 UI。 在调用之前, startActivity在 Xcode 中配置 ActivityKit:
- 运行
bunx cap open ios. - 添加一个 小部件扩展 目标并启用 包含 Live 活动.
- 确保设置了 iOS 16.1 或更高版本的 app 和小部件扩展部署目标。
- 确保扩展嵌入在主 app 中。
- 保持一个
ActivityConfiguration__CAPGO_KEEP_0__WidgetBundle, with Lock Screen and all Dynamic Island presentations. - 添加到主应用目标的
NSSupportsLiveActivities仅添加目标是不够的。原生应用或插件必须调用ActivityKit的request、update和endAPI。小部件扩展必须包含SwiftUI__CAPGO_KEEP_0__,能够解码和渲染相同的Info.plist.
<key>NSSupportsLiveActivities</key>
<true/>
Adding the target alone is not sufficient. The native app or plugin must call ActivityKit's request, update, and end APIs. The Widget Extension must contain SwiftUI code that can decode and render the same ActivityAttributes 共享图片
使用图片管理方法时,添加
应用组 能力到主应用和小部件扩展目标。使用插件期望的相同组标识符在两个目标上启用。 Live Activity扩展无法访问网络。下载主应用中的远程图片,保存到共享的应用组中,
group.<MAIN_APP_BUNDLE_ID>.liveactivities
然后从布局中引用保存的图片。捆绑资产也必须属于小部件扩展目标。 saveImage深度链接和推送更新
添加
- 在
behavior.widgetUrl或tapUrlInfo > URL 类型 设置中注册任何自定义 URL 方案。 为服务器驱动的更新添加 - 推送通知 能力,并使用 APNs 实现 ActivityKit 推送令牌处理。 仅在应用程序需要频繁 ActivityKit 推送更新时添加。
- 仅开启推送通知能力不足;服务器驱动的更新需要原生令牌处理和 APNs 后端。
NSSupportsLiveActivitiesFrequentUpdatesActivityKit 将静态和动态 Live 活动数据的组合限制在 4 KB 内。动态岛仅在支持的设备模型上可见;其他设备使用锁屏幕呈现。
Info > URL 类型
设置
什么这个插件暴露
areActivitiesSupported- 检查是否在此设备上支持实时活动。需要 iOS 16.1+ 和设备支持。startActivity- 使用指定的布局和数据启动一个新的实时活动。updateActivity- 使用新数据更新一个现有的实时活动。endActivity- 结束一个实时活动。
示例用法
areActivitiesSupported
- 检查是否在此设备上支持实时活动。需要 iOS 16.1+ 和设备支持。
import { CapgoLiveActivities } from '@capgo/capacitor-live-activities';
const { supported, reason } = await CapgoLiveActivities.areActivitiesSupported();
if (supported) {
console.log('Live Activities are supported!');
} else {
console.log('Not supported:', reason);
}
startActivity
- 使用指定的布局和数据启动一个新的实时活动。
import { CapgoLiveActivities } from '@capgo/capacitor-live-activities';
const { activityId } = await CapgoLiveActivities.startActivity({
layout: {
type: 'container',
direction: 'horizontal',
children: [
{ type: 'text', content: 'Order #{{orderNumber}}', fontSize: 16, fontWeight: 'bold' },
{ type: 'text', content: '{{status}}', fontSize: 14, color: '#666666' }
]
},
dynamicIslandLayout: {
expanded: {
leading: { type: 'image', source: 'sfSymbol', value: 'box.truck' },
trailing: { type: 'text', content: '{{eta}}' },
center: { type: 'text', content: '{{status}}' },
bottom: { type: 'progress', value: 'progress' }
},
compactLeading: { type: 'image', source: 'sfSymbol', value: 'box.truck' },
compactTrailing: { type: 'text', content: '{{eta}}' },
minimal: { type: 'image', source: 'sfSymbol', value: 'box.truck' }
},
data: {
orderNumber: '12345',
status: 'On the way',
eta: '10 min',
progress: 0.6
}
});
console.log('Started activity:', activityId);
updateActivity
- 使用新数据更新一个现有的实时活动。
import { CapgoLiveActivities } from '@capgo/capacitor-live-activities';
await CapgoLiveActivities.updateActivity({
activityId: 'abc123',
data: {
status: 'Arrived!',
eta: 'Now',
progress: 1.0
},
alertConfiguration: {
title: 'Delivery Update',
body: 'Your order has arrived!'
}
});
endActivity
- 结束一个实时活动。
import { CapgoLiveActivities } from '@capgo/capacitor-live-activities';
await CapgoLiveActivities.endActivity({
activityId: 'abc123',
data: { status: 'Delivered' },
dismissalPolicy: 'after',
dismissAfter: Date.now() + 3600000 // 1 hour from now
});
全局参考
- GitHub: https://github.com/Cap-go/capacitor-live-activities/
- 文档:/docs/plugins/live-activities/
继续使用@capgo/capacitor-live-activities
如果您正在使用 使用@capgo/capacitor-live-activities 来规划原生媒体和界面行为,连接它与 @capgo/capacitor-live-activities 了解@capgo/capacitor-live-activities的实现细节 入门 了解入门的实现细节 使用@capgo/capacitor-video-player 为使用@capgo/capacitor-video-player的原生能力 @capgo/capacitor-视频播放器 了解 @capgo/capacitor-视频播放器 的实现细节 使用 @capgo/capacitor-原生导航 了解 @capgo/capacitor-原生导航 的原生功能