在Apple Watch上添加不同重复间隔的提醒通知

Posted

技术标签:

【中文标题】在Apple Watch上添加不同重复间隔的提醒通知【英文标题】:Add reminder notification on apple watch with different different repeat interval 【发布时间】:2017-06-08 10:26:04 【问题描述】:

我正在开发一个 Apple Watch 应用,我需要提醒用户通知来唤醒用户。

我可以用 make repeat: true 设置UserNotification,它会每天提醒用户。

但我需要的是单日应用程序会根据用户选择通知如下。

如果用户选择了 3 分钟的理想时间,则每 3 分钟用户会在手表上收到带有振动的通知。

与 5 分钟、10 分钟和 15 分钟相同。

我将下面的代码用于UserNotification

func scheduleNotification(at date: Date) 
        let calendar = Calendar(identifier: .gregorian)
        let components = calendar.dateComponents(in: .current, from: date)
        let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute)
        
        let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: true)
        
        let content = UNMutableNotificationContent()
        content.title = "Test Reminder"
        content.body = "Show More detail in Body!"
        content.sound = UNNotificationSound.default()
        content.categoryIdentifier = "myCategory"
        
        if let path = Bundle.main.path(forResource: "logo", ofType: "png") 
            let url = URL(fileURLWithPath: path)
            
            do 
                let attachment = try UNNotificationAttachment(identifier: "logo", url: url, options: nil)
                content.attachments = [attachment]
             catch 
                print("The attachment was not loaded.")
            
        
        
        let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
        
        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
        UNUserNotificationCenter.current().add(request) (error) in
            if let error = error 
                print("Uh oh! We had an error: \(error)")
            
        
    

通过将以下触发器与 repeats: true

一起使用
let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: true)

第二天同一时间重复。

有什么方法或方法可以根据用户选择在指定的时间间隔后设置重复吗?

任何帮助将不胜感激!

提前致谢。

【问题讨论】:

【参考方案1】:

尝试使用UNTimeIntervalNotificationTrigger 而不是UNCalendarNotificationTrigger

例如:

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 2*60, repeats: true)

这将创建一个每 2 分钟触发一次的触发器。 timeInterval 是触发每个通知之间的秒数。

【讨论】:

很好的解决方案但是我有一个问题,它什么时候会停止通知,或者它会在用户 iPhone 或 Watch 上重复多长时间? 让我先试试 谢谢你的解决方案! 很高兴我能提供帮助,如果有效,请记住将答案标记为已接受。对于您的问题,通知应该无限重复,直到您将其删除,但有一些报告称,对于 ios 10 上的某些用户,它会在几个小时后停止。 @Coder256 我有一个场景,如果应用程序在后台并且屏幕没有打开,我在手表端没有收到本地通知。这是预期的行为吗? @G.Abhisek 不,这很奇怪。我真的不知道如果来自其他应用程序的通知在手表上运行,并且来自您的应用程序的通知在手机上运行,​​会导致什么。也许验证设置 -> 通知 -> 你的应用和手表 -> 我的手表 -> 通知 -> 你的应用设置正确。

以上是关于在Apple Watch上添加不同重复间隔的提醒通知的主要内容,如果未能解决你的问题,请参考以下文章

带有 SwiftUI 的 Apple Watch 上列表项的背景 [重复]

iOS WatchOS5 - 如何以编程方式检测 Apple Watch 是不是在特定时间间隔戴在手腕上(佩戴)?

在 Apple Watch 模拟器上推送通知

在 Apple Watch 上的 SwiftUI 中,更新描述自具有 Always On 状态的日期以来的间隔的字符串的最佳方法是啥?

苹果手表Apple Watch表盘怎么添加文字图案

如何使用 Swift 在 Apple Watch 上添加下拉刷新功能