如何设置重复的每日通知,每次都有不同的内容?

Posted

技术标签:

【中文标题】如何设置重复的每日通知,每次都有不同的内容?【英文标题】:How do I set up a repeating daily notification with different content each time? 【发布时间】:2018-04-10 15:13:43 【问题描述】:

我正在开发一款可以在中午向您发送通知的应用。这个通知应该每天都不一样。

我让通知自己工作:

let notificationOptions: UNAuthorizationOptions = [.alert, .sound];
UNUserNotificationCenter.current().requestAuthorization(options: notificationOptions)  (granted, error) in
    if !granted 
        print("Something went wrong")
     else 
        let content = UNMutableNotificationContent()
        content.body = getRandomDailyString()
        content.sound = UNNotificationSound.default()

        let date = DateComponents(hour: 12, minute: 15)
        let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)

        let request = UNNotificationRequest(identifier: "Daily String", content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request)  (error) in
            if let error = error 
                print(error.localizedDescription)
            
        
    

现在发生的事情是调用了 getRandomDailyString() 函数,它返回一个字符串,并设置了一个重复通知,该通知确实出现在指定的时间,但始终具有相同的内容。

我将如何制作每天提供独特内容的通知?

【问题讨论】:

好的,明白了……思路相同,但完全不同。在这种情况下,您的请求始终相同。你添加一次,它会重复。您永远不会更改内容或触发器或什么都没有。您应该使您的请求无效并在每次触发时添加新的请求 我认为问题出在repeats: true,因此您创建的此通知将重复显示。您应该一次安排 1 个通知。 【参考方案1】:

目前无法测试,但请尝试并告诉我

如果它不在函数内,我会将它放在一个函数中。然后你从你的委托方法中调用它。不要忘记将其更改为不可重复。

您必须有一个类来处理其委托方法,可以是您的 AppDelegate 或您创建的任何其他类。

代表UNUserNotificationCenterDelegate

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
    x()


func x() 
    let notificationOptions: UNAuthorizationOptions = [.alert, .sound];
    UNUserNotificationCenter.current().requestAuthorization(options: notificationOptions)  (granted, error) in
        if !granted 
            print("Something went wrong")
         else 
            let content = UNMutableNotificationContent()
            content.body = getRandomDailyString()
            content.sound = UNNotificationSound.default()

            let date = DateComponents(hour: 12, minute: 15)
            let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: false)

            let request = UNNotificationRequest(identifier: "Daily String", content: content, trigger: trigger)
            UNUserNotificationCenter.current().add(request)  (error) in
                if let error = error 
                    print(error.localizedDescription)
                
            
        
    

这个答案也可以帮助你

Getting local notifications to show while app is in foreground Swift 3

【讨论】:

好主意!最终没有工作,很遗憾。当前通知之后的下一个通知最终不会发生 如果应用程序在前台,此解决方案是相关的。否则,不会安排新的通知。也许使用来自某些服务的推送通知服务器是可能的方式。 不知道为什么这个问题被否决了。我想做到这一点:随机“每日单词”的通知。 @IcarusTyler 你终于找到解决方案了吗? 感谢您签入@Carmen!我想出了一个潜在的解决方案,但对于我的应用程序的简单添加来说,它变得相当复杂。不可能每天使用新的随机字符串安排重复解决方案,但可以提前安排多达 64 个通知(具有唯一内容)。解决方法是检查应用程序输入仍有多少通知仍被安排,然后创建足够的新通知以再次安排 64 个安排的通知! :) 可悲的是,这也意味着它会在 64 天未打开应用程序后停止工作 @Carmen 你能解释一下如何在每个通知中更新内容正文吗?【参考方案2】:

好的,这是解决这个问题的方法。

不可能每天安排带有随机内容的重复通知。内容是在计划通知时定义的,以后不能更改。

不过,您可以提前安排多达 64 条通知。因此,您可以在接下来的 64 天内安排 64 条唯一通知,然后在您打开应用程序时检查剩余的通知数量,然后再次将通知计划填写到 64 条。

如果您在 64 天后未打开应用程序,则通知将停止发送:P

【讨论】:

以上是关于如何设置重复的每日通知,每次都有不同的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在每天不同的时间在android studio中设置每日重复通知?

如何每天在不同时间重复本地通知

如何根据 CVcalendar 中的特定时间进行每日本地通知?

iOS中都有哪些不同类型的通知以及如何正确配置它们?

iOS中都有哪些不同类型的通知以及如何正确配置它们?

无法通过 UNUserNotificationCenter 获得重复的每日通知以显示