跳过主要内容
返回插件
@capgo/capacitor-live-activities
教程
@capgo/capacitor-live-activities

实时活动

使用 Capacitor 来管理 iOS Live Activities 和动态岛的布局,使用 JSON 驱动的模板

指南

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:

  1. 运行 bunx cap open ios.
  2. 添加一个 小部件扩展 目标并启用 包含 Live 活动.
  3. 确保设置了 iOS 16.1 或更高版本的 app 和小部件扩展部署目标。
  4. 确保扩展嵌入在主 app 中。
  5. 保持一个 ActivityConfiguration __CAPGO_KEEP_0__ WidgetBundle, with Lock Screen and all Dynamic Island presentations.
  6. 添加到主应用目标的 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&#39;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.widgetUrltapUrl Info &gt; URL 类型 设置中注册任何自定义 URL 方案。 为服务器驱动的更新添加
  • 推送通知 能力,并使用 APNs 实现 ActivityKit 推送令牌处理。 仅在应用程序需要频繁 ActivityKit 推送更新时添加。
  • 仅开启推送通知能力不足;服务器驱动的更新需要原生令牌处理和 APNs 后端。 NSSupportsLiveActivitiesFrequentUpdates ActivityKit 将静态和动态 Live 活动数据的组合限制在 4 KB 内。动态岛仅在支持的设备模型上可见;其他设备使用锁屏幕呈现。

Info &gt; 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
});

全局参考

继续使用@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-原生导航 的原生功能