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

Swift中首条通知触发后创建周期性重复通知的技术问询

Swift 固定间隔重复通知解决方案(首条触发后生效)
  • 核心思路:首条通知仅触发一次,不设置重复规则;当首条通知被触发时,在回调中创建基于固定时间间隔的重复通知,确保后续通知严格按照设定的间隔(如8小时)触发,避免沿用首条触发逻辑导致的间隔偏差。

  • 具体实现步骤:

    1. 保留你已实现的首条通知代码,但需确保首条通知的UNNotificationTrigger设置为repeats: false,同时给首条通知分配唯一标识符(例如"first_notification"),方便后续识别。
    2. 实现UNUserNotificationCenterDelegate的回调方法,监听首条通知的触发事件,在回调中创建固定间隔的重复通知:
      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
          let notificationID = response.notification.request.identifier
          
          // 判断是否为预设的首条通知触发
          if notificationID == "first_notification" {
              // 构建重复通知内容
              let repeatContent = UNMutableNotificationContent()
              repeatContent.title = "定时提醒"
              repeatContent.body = "每8小时触发一次"
              repeatContent.sound = .default
              
              // 设置固定间隔触发器(8小时转秒)
              let interval = 8 * 3600
              let repeatTrigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: true)
              
              // 创建重复通知请求,使用唯一标识符便于管理
              let repeatRequest = UNNotificationRequest(identifier: "repeat_notification", content: repeatContent, trigger: repeatTrigger)
              
              // 添加前先移除同ID的待处理通知,避免重复创建
              UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["repeat_notification"])
              UNUserNotificationCenter.current().add(repeatRequest) { error in
                  if let err = error {
                      print("创建重复通知失败:\(err.localizedDescription)")
                  }
              }
          }
          
          completionHandler()
      }
      
    3. 在App启动时注册通知代理,确保回调能被正常触发:
      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
          UNUserNotificationCenter.current().delegate = self
          // 其他初始化逻辑
          return true
      }
      
  • 关键注意事项:

    • 首条通知必须禁用重复,否则会和后续的固定间隔通知产生冲突。
    • 若用户需要修改间隔或停止重复通知,可通过"repeat_notification"标识符调用removePendingNotificationRequests方法移除对应请求。
    • 确保已获取用户的通知权限,否则通知无法正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:20:26