Flutter日历应用:如何用OneSignal API实现无限重复定时通知
日历应用重复定时通知的OneSignal实现方案
一、OneSignal API原生支持的重复定时通知配置
OneSignal的计划通知(Scheduled Notifications)支持通过recurrence参数配置永久重复规则,具体选项如下:
- 每日重复:指定重复类型为
daily,可通过interval设置间隔天数(默认1天) - 每周重复:指定类型为
weekly,搭配weekdays数组设置重复的星期(1=周一,7=周日),例如[1,3,5]代表周一、周三、周五重复 - 每月重复:两种模式可选:
- 按固定日期:
{"type": "monthly", "day_of_month": 15}(每月15号触发) - 按周几:
{"type": "monthly", "week_of_month": 2, "weekday": 3}(每月第2个周三触发)
- 按固定日期:
- 每年重复:指定类型为
yearly,搭配month和day设置固定日期,例如{"type": "yearly", "month": 10, "day": 5}(每年10月5号触发)
请求示例(POST创建永久重复通知)
POST /notifications { "app_id": "你的OneSignal应用ID", "contents": {"en": "事件提醒:你有一个待办事项即将开始"}, "scheduled_time": "2024-06-01T09:00:00Z", // 首次触发的UTC时间 "recurrence": { "type": "daily", "interval": 1 }, "include_player_ids": ["目标用户的Player ID"] }
注:该配置默认永久重复,若需停止可添加
end_time字段指定停止的UTC时间。
二、原生功能受限的替代实现逻辑
如果因版本兼容或其他限制无法使用原生重复功能,可通过以下两种方案实现无限重复通知:
- 方案1:触发后自动创建下一次通知
- 在客户端监听OneSignal的通知接收/点击事件
- 当通知触发时,根据原事件的重复规则(日/周/月/年)计算下一次触发的UTC时间
- 调用OneSignal API创建该时间点的计划通知,以此循环实现永久重复
- 方案2:批量生成未来N次通知
- 根据事件重复规则,一次性生成未来6个月/12个月的所有触发时间点
- 调用OneSignal API批量创建这些时间点的计划通知
- 当用户修改事件重复规则时,删除所有未触发的通知,重新生成新的计划通知
注意:所有时间计算需处理时区转换,确保最终传入OneSignal的
scheduled_time为UTC时间,避免通知时间偏差。
内容的提问来源于stack exchange,提问作者Tomas Ward
相关产品推荐
相关产品推荐

