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

如何在Expo开发的React Native应用中实现每日推送不同内容的定时通知

解决方案

你当前使用的单次重复触发通知只能绑定固定内容,无法直接实现每日动态内容切换,可根据你的业务场景选择以下3种可行方案:


方案1:本地预批量调度(适合通知内容提前存储在本地数组/本地数据库、通知总周期可控的场景)

提前将未来N天的通知一次性调度完成,每条通知对应当天的独立内容,不需要设置重复属性:

  1. 预先整理或从本地存储读取所有通知内容:
// 示例内容数组,也可从AsyncStorage/本地SQLite读取
const dailyReminders = [
  { title: "今日提醒", body: "记得补充1500ml水分" },
  { title: "今日提醒", body: "今日运动量建议达到30分钟" },
  // 更多内容
]
  1. 批量调度未来N天的通知,调度前先清空旧通知避免重复:
import * as Notifications from 'expo-notifications';
import { addDays } from 'date-fns'; // 日期处理工具,也可手动计算日期

// 清空已有的旧调度
await Notifications.cancelAllScheduledNotificationsAsync();

// 调度未来30天的通知,可根据需求调整天数,注意不要超过Expo最多64条调度的限制
for (let i = 0; i < 30; i++) {
  const triggerDate = addDays(new Date(), i);
  triggerDate.setHours(12, 30, 0, 0);
  // 过滤掉已经过去的当日时间,从下一个有效时间开始调度
  if (triggerDate < new Date()) continue;

  // 取对应日期的内容,内容不足时可循环取数组内容
  const dayContent = dailyReminders[i % dailyReminders.length];

  await Notifications.scheduleNotificationAsync({
    content: dayContent,
    trigger: triggerDate // 传入具体日期对象,不需要设置repeats属性
  });
}
  1. 优化补充:每次用户打开App时重新执行一次调度逻辑,补充后续天数的通知,避免预设天数用完后无通知推送。

方案2:触发后动态调度下一次通知(适合内容需要实时生成、不想提前批量调度的场景)

利用Expo的通知接收事件钩子,当天的通知推送完成后,立刻拉取新内容调度第二天的通知:

  1. 首次启动App时先调度第一天的通知
  2. 注册通知接收监听器,触发后自动调度下一次:
Notifications.addNotificationReceivedListener(async (notification) => {
  // 过滤非每日提醒类的通知,可通过自定义data字段做类型标记
  if (notification.request.content.data?.type !== 'daily_reminder') return;

  // 从本地数据库/接口拉取下一天的提醒内容
  const nextContent = await fetchNextDayReminder();
  // 计算下一天的12:30触发时间
  const nextTrigger = addDays(new Date(), 1);
  nextTrigger.setHours(12, 30, 0, 0);

  // 调度下一次通知
  await Notifications.scheduleNotificationAsync({
    content: {
      ...nextContent,
      data: { type: 'daily_reminder' }
    },
    trigger: nextTrigger
  });
});

注意:该方案存在限制:如果用户长期不打开App、或杀死App进程,监听器无法触发可能导致通知断更,仅适合通知优先级不高的场景。


方案3:服务端推送(适合内容存储在后端、用户量较大的场景)

如果你的应用有后端服务,最稳定的方案是不用客户端做本地调度,直接通过Expo推送服务由服务端触发:

  • 客户端仅需要获取Expo Push Token上传到后端存储
  • 后端设置定时任务,每日12:30从数据库拉取当日推送内容,批量给所有目标用户推送通知即可,内容可完全动态控制,不受客户端状态影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:03