如何设置每次重复不同内容的每日通知?
How do I set up a repeating daily notification with different content each time?
我正在开发一款可以在中午向您发送通知的应用程序。这个通知应该每天都不一样。
我收到了自己的通知:
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() 函数被调用,它 returns 一个字符串,并且设置了一个重复通知,它会在指定时间出现, 但始终具有相同的内容。
我将如何制作每天提供独特内容的通知?
现在无法测试,但请尝试并告诉我
如果它不在一个函数中,我会把它放在一个函数中。然后你从你的委托方法中调用它。不要忘记将其更改为不可重复。
您必须有一个 class 来处理它的委托方法,可以是您的 AppDelegate 或您创建的任何其他 class。
委托 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)
}
}
}
}
}
这个答案也能帮到你
好的,这是解决方案。
不可能每天安排一个随机内容的重复通知。内容在安排通知时定义,以后无法更改。
不过,您可以提前安排多达 64 条通知。因此,您可以在接下来的 64 天内安排 64 条独特的通知,然后每当您打开应用程序时检查剩余的数量,并再次将通知计划填满至 64。
如果您在 64 天后未打开该应用程序,则通知将停止发送:P
我正在开发一款可以在中午向您发送通知的应用程序。这个通知应该每天都不一样。
我收到了自己的通知:
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() 函数被调用,它 returns 一个字符串,并且设置了一个重复通知,它会在指定时间出现, 但始终具有相同的内容。
我将如何制作每天提供独特内容的通知?
现在无法测试,但请尝试并告诉我
如果它不在一个函数中,我会把它放在一个函数中。然后你从你的委托方法中调用它。不要忘记将其更改为不可重复。
您必须有一个 class 来处理它的委托方法,可以是您的 AppDelegate 或您创建的任何其他 class。
委托 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)
}
}
}
}
}
这个答案也能帮到你
好的,这是解决方案。
不可能每天安排一个随机内容的重复通知。内容在安排通知时定义,以后无法更改。
不过,您可以提前安排多达 64 条通知。因此,您可以在接下来的 64 天内安排 64 条独特的通知,然后每当您打开应用程序时检查剩余的数量,并再次将通知计划填满至 64。
如果您在 64 天后未打开该应用程序,则通知将停止发送:P