跳转至正文

后台任务 Capacitor 插件

通过 Expo 风格的任务注册机制,在 iOS 和 Android 上调度周期性的后台 fetch 任务

安装

bun add @capgo/capacitor-background-task bunx cap sync
npm、pnpm 或 yarn
  • npm install @capgo/capacitor-background-task
  • pnpm add @capgo/capacitor-background-task
  • yarn add @capgo/capacitor-background-task

指南

如何在 Capacitor 中使用 Background Task

在设备上测试

下载 Capgo App,然后扫描二维码 code。

Background Task 插件预览二维码 code

使用 @capgo/capacitor-background-task

在 Capacitor 应用中调度周期性后台 fetch 任务,支持命名任务、持久化注册、状态检查、注销和开发触发。该插件使用 Android WorkManager 和 iOS BGTaskScheduler。

安装

npm install @capgo/capacitor-background-task
npx cap sync

iOS 配置

为以下应用添加后台处理支持 ios/App/App/Info.plist:

<key>UIBackgroundModes</key>
<array>
  <string>processing</string>
</array>
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
  <string>app.capgo.backgroundtask.processing</string>
</array>

然后运行:

npx cap sync ios

插件暴露的内容

  • defineTask - 为指定任务定义 JavaScript 回调。
  • registerTaskAsync - 持久化并调度周期性任务。
  • unregisterTaskAsync - 取消单个任务。
  • isTaskRegisteredAsync - 检查单个任务的注册状态。
  • getRegisteredTasksAsync - 列出已注册的任务名称。
  • getStatusAsync - 检查原生后台任务是否可用。
  • triggerTaskWorkerForTestingAsync - 开发时立即触发已注册的任务。
  • addExpirationListener - 在 iOS 任务过期时进行响应。

用法示例

在模块作用域内定义任务,以便在 OS 唤醒 App 时可用:

import { BackgroundTask, BackgroundTaskResult } from '@capgo/capacitor-background-task';

const SYNC_TASK = 'sync-offline-data';

BackgroundTask.defineTask(SYNC_TASK, async () => {
  try {
    await fetch('https://api.example.com/sync', { method: 'POST' });
    return BackgroundTaskResult.Success;
  } catch {
    return BackgroundTaskResult.Failed;
  }
});

await BackgroundTask.registerTaskAsync(SYNC_TASK, {
  minimumInterval: 30,
  requiresNetwork: true,
});

检查状态和已注册的任务名称:

const status = await BackgroundTask.getStatusAsync();
const tasks = await BackgroundTask.getRegisteredTasksAsync();

console.log({ status, tasks });

触发开发运行:

await BackgroundTask.triggerTaskWorkerForTestingAsync();

取消任务:

await BackgroundTask.unregisterTaskAsync(SYNC_TASK);

平台注意事项

  • 后台任务调度具有随机性,并非精确计时器。
  • Android 的周期性工作最小间隔为 15 分钟。
  • iOS 将 minimumInterval 视为最早开始时间,可能会延迟运行。
  • 请在真机上测试 iOS 后台处理功能。

完整参考

从“使用 @capgo/capacitor-background-task”继续

如果你正在使用 使用 @capgo/capacitor-background-task 要规划原生插件工作,请将其与 @capgo/capacitor-background-task 有关 @capgo/capacitor-background-task 的实现细节, 快速入门 有关“入门指南”中的实现细节, Capgo 插件目录 查看 Capgo 插件目录中的产品工作流, Capgo 提供的 Capacitor 插件 有关 Capgo 开发的 Capacitor 插件的实现细节,以及 添加或更新插件 有关添加或更新插件的实现细节。

常见问题

Background Task 插件常见问题

如何在 Capacitor 应用中安装 Background Task 插件?

运行 "bun add @capgo/capacitor-background-task"(或 "npm install @capgo/capacitor-background-task"),然后运行 "bunx cap sync",使 iOS 和 Android 项目同步 native code。最后在你的应用 code 中从 "@capgo/capacitor-background-task" 导入即可。

@capgo/capacitor-background-task 是否支持 React、Vue 和 Angular?

支持。Background Task 是一个 Capacitor 包,因此它支持任何在 Capacitor 中运行的 Web 框架,包括 Ionic、React、Vue、Angular、Svelte 以及原生 JavaScript。

@capgo/capacitor-background-task 支持哪个版本的 Capacitor?

Capgo 插件遵循 Capacitor 的主版本号:请使用与 Capacitor 主版本号一致的插件主版本(例如插件 v8 对应 Capacitor 8)。GitHub README 中的兼容性表列出了仍在维护的版本。

@capgo/capacitor-background-task 是免费开源的吗?

是的。code 的源码已在 GitHub 公开,地址为 https://github.com/Cap-go/capacitor-background-task/,且可以通过 npm 免费安装。欢迎提交 Bug 报告和 Pull Request。

我可以在无需经过 App Store 审核的情况下,更新使用了 Background Task 的 code 吗?

安装或升级插件会改动原生 code,因此需要重新做一次商店构建。之后,调用该插件的 JavaScript、HTML 和 CSS 改动就能通过 Capgo live updates 立即发布。

无需等待应用审核,即可发布 Background Task 的变更

只要插件已包含在你的商店版本中,Capgo live updates 就能在几分钟内把 JavaScript、HTML 和 CSS 的改动推送给用户。

开始使用 Capgo