You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Framework7+Cordova应用:求支持条件判断的提醒插件替代方案

解决方案:结合后台任务插件实现条件式定时提醒

针对你的需求,推荐两种可行的方案,既能实现定时检查本地存储,又能管理通知/任务的调度:

方案一:cordova-plugin-background-task + 原本地通知插件

你可以保留原来的本地通知插件,搭配后台任务插件实现定时触发自定义逻辑(含本地存储检查),弥补原插件无法执行条件判断的缺陷:

步骤1:安装插件

cordova plugin add cordova-plugin-background-task
cordova plugin add cordova-plugin-local-notifications

步骤2:注册每日定时任务

用户设置目标时间后,计算触发时间并注册周期性后台任务,任务触发时自动检查本地存储:

// 处理用户设置的时间(示例为17:00)
const setTargetTime = (hour, minute) => {
  const target = new Date();
  target.setHours(hour, minute, 0, 0);
  // 如果当前时间已过目标时间,自动顺延至次日
  if (target < new Date()) target.setDate(target.getDate() + 1);
  return target;
};

// 注册每日重复的后台任务
const scheduleDailyTask = (hour, minute) => {
  const target = setTargetTime(hour, minute);
  const delay = target.getTime() - Date.now();

  cordova.plugins.backgroundTask.schedule({
    delay: delay,
    period: 86400000, // 24小时重复一次
    callback: () => {
      // 检查本地存储的点击标记
      const hasClicked = localStorage.getItem('dailyBtnClicked') === 'true';
      
      if (!hasClicked) {
        // 未点击则发送提醒
        cordova.plugins.notification.local.schedule({
          id: 1,
          title: '每日提醒',
          text: '请点击按钮完成今日操作'
        });
      } else {
        // 已点击则取消可能存在的通知
        cordova.plugins.notification.local.cancel(1);
      }
      
      // 重置当日标记(次日重新判断)
      localStorage.removeItem('dailyBtnClicked');
    }
  });
};

// 调用:用户设置17:00时执行
scheduleDailyTask(17, 0);

步骤3:按钮点击逻辑

用户点击按钮时更新本地存储,并取消当前通知:

document.querySelector('#actionBtn').addEventListener('click', () => {
  localStorage.setItem('dailyBtnClicked', 'true');
  cordova.plugins.notification.local.cancel(1);
});

方案二:替代插件 cordova-plugin-schedule

该插件支持直接调度带自定义回调的定时任务,回调中可自由访问本地存储,同时支持取消已调度的任务,无需额外插件配合:

核心用法示例

# 安装插件
cordova plugin add cordova-plugin-schedule
// 注册每日任务
const taskId = cordova.plugins.schedule.schedule({
  at: setTargetTime(17, 0),
  repeat: 'daily',
  callback: () => {
    const hasClicked = localStorage.getItem('dailyBtnClicked') === 'true';
    if (!hasClicked) {
      // 这里可直接调用原生通知API或原插件发送提醒
      cordova.plugins.notification.local.schedule({
        id: 1,
        title: '每日提醒',
        text: '请点击按钮'
      });
    }
  }
});

// 取消任务(比如用户修改时间时)
cordova.plugins.schedule.cancel(taskId);

注意事项

  • Android和iOS对后台任务的限制不同,iOS后台任务执行时间有限,需尽量精简回调逻辑;
  • 每日标记需在任务触发后重置,避免跨天判断错误;
  • 测试时需注意平台权限配置,比如通知权限、后台运行权限。

内容的提问来源于stack exchange,提问作者user1756202

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:57:50