跳过主要内容
返回插件
@capgo/capacitor-background-task
教程
由 github.com/Cap-go

后台任务

在 iOS 和 Android 上使用 Expo 风格的任务注册来定期调度后台抓取任务

指南

关于后台任务的教程

使用@capgo/capacitor-background-task

在具有命名任务、持久注册、状态检查、注销和开发触发器的Capacitor应用中,定期执行后台抓取工作。该插件使用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 唤醒应用时可用:

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后台处理

全局参考