- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以前,我在我的应用程序中使用 UILocalNotification
进行提醒。
但由于上述 API 在 iOS 10.0 中已弃用,现在需要使用 UserNotifications Framework 的 UNNotificationRequest
。
使用 UILocalNotification
我能够设置触发日期以及重复间隔,如下所示:
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSDate *tomorrow = [NSDate dateWithTimeInterval:(24*60*60) sinceDate:[NSDate date]];
localNotification.fireDate = tomorrow;
if(repeatUnit!=0){
localNotification.repeatInterval = NSWeekCalendarUnit;
}
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
在上面的代码中,我可以设置明天触发通知的日期,并且我还设置了 1 周的重复间隔,该间隔将从触发日期开始。
如何使用 UserNotifications Framework 的 UNNotificationRequest
实现这一点。
因为在新的 api 中,我们可以使用触发器 UNCalendarNotificationTrigger
和 UNTimeintervalNotificationTrigger
来启动 UNNotificationRequest
。
有什么方法可以像 UILocalNotification
那样设置两者吗?
最佳答案
您仍然可以使用触发日期和重复间隔,但它不像以前那样明显。初始化通知触发器时,将其重复参数设置为 YES
。重复间隔由您通过 dateMatching
参数传递给触发器的日期组件定义:
每日重复:
只需传递日期组件小时、分钟、秒
⟶ 触发器将在每天的那个时间触发
每周重复:
同时传递所需的工作日组件:工作日、小时、分钟、秒
⟶ 触发器将在每周的那个工作日的那个时间触发
这是一个明天同一时间触发通知并每周重复的示例:
objective-C :
UNMutableNotificationContent *notification = [[UNMutableNotificationContent alloc] init];
// find out what weekday is tomorrow
NSDate *sameTimeTomorrow = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
NSInteger weekdayTomorrow = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday fromDate: sameTimeTomorrow];
// set the current time (without weekday)
unsigned unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *firstFireDateComponents = [[NSCalendar currentCalendar] components:unitFlags fromDate:sameTimeTomorrow];
// add tomorrow's weekday
firstFireDateComponents.weekday = weekdayTomorrow;
// set a repeating trigger for the current time and tomorrow's weekday
// (trigger repeats every week on that weekday at the current time)
UNCalendarNotificationTrigger *notificationTrigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:firstFireDateComponents repeats:YES];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"notification" content:notification trigger:notificationTrigger];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler: nil];
swift :
let notification = UNMutableNotificationContent()
// find out what weekday is tomorrow
let weekDayTomorrow = Calendar.current.component(.weekday, from: Date(timeIntervalSinceNow: 60*60*24))
// set the current time (without weekday)
var firstFireDateComponents = Calendar.current.dateComponents([.hour, .minute, .second], from: Date())
// add tomorrow's weekday
firstFireDateComponents.weekday = weekDayTomorrow
// set a repeating trigger for the current time and tomorrow's weekday
// (trigger repeats every week on that weekday at the current time)
let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: firstFireDateComponents, repeats: true)
let request = UNNotificationRequest(identifier: "notification", content: notification, trigger: notificationTrigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
关于ios - 如何在 UNNotificationRequest 中设置重复间隔和触发日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135461/
由于 UILocalNotification 在 iOS10 中已被弃用,我无法理解如何将以下代码更新到 UNNotificationRequest 框架。我基本上让用户在他们选择的时间安排每日通知。
因为 UILocalNotification 现已弃用,我将我的代码移至新的 UNNotificationRequest API。 它声明:'cancelLocalNotification' 在 iO
我这样调用本地通知 let center = UNUserNotificationCenter.current() let content = UNMutableNotificationContent
到目前为止,在将 UNNotificationRequest 添加到包含 UNTimeIntervalNotificationTrigger 的 UNUserNotificationCenter 之后
我正在实现自定义重复提醒,例如默认提醒应用。这里我不介绍如何设置重复间隔,例如每第 N 天/周/月/年触发,即从现在起每 4 天/周/月/年触发通知。 这是我对 interval = 1 的实现
以前,我在我的应用程序中使用 UILocalNotification 进行提醒。 但由于上述 API 在 iOS 10.0 中已弃用,现在需要使用 UserNotifications Framewor
我正在使用 UNNotificationRequest,我希望在单击按钮时立即弹出通知。但在这种情况下,它会在我退出应用程序时出现。这是我的代码 @IBAction func shortNotifBt
我试图找到 UNNotificationRequest 对象的预定触发日期。 我正在像这样获取待处理的通知请求: UNUserNotificationCenter.current().getPendi
更新: 我需要找到下一个通知请求和关联的 ID,所以我最终这样做了: UNUserNotificationCenter.current().getPendingNotificationRequ
我的应用正在下载一个 .wav 文件并将其移动到 Library/Sounds,然后使用该声音的文件名通过 UNNotificationRequest 安排本地通知。此请求按预期发送通知,但我添加的自
我目前正在使用 Swift 4 开发一个包含本地通知的应用程序。当用户点击通知(如呈现特定的 ViewController)时,我试图运行一段特定的代码。我找不到关于堆栈溢出的答案,因为 App de
我有一组 UNNotificationRequest。我想按 nextTriggerDate 对它们进行排序。 据我所知,我会使用 array.sorted(by:predicate) 对数组进行排序
我知道 UILocalNotification 的本地通知限制是 64。它写在Apple Dev Docs .但是 UILocalNotification 在 iOS 10 中被弃用了。Apple 建
自定义声音在 unnotificationrequest 中不起作用 - iOS 10 我试过了: [UNNotificationSound soundNamed:@"Alarm.mp3"] 或 [U
我想在 iOS 10 上使用 UserNotificationFramework 向自己发送仅数据通知——即,没有面向用户的文本或声音。基本上是将其用作持久计时器,以便能够触发应用程序(如果在应用程序
我有一个函数可以设置 UNNotificationRequest传入一些参数后,我将这些参数放入 userInfo 中这样我就可以取回它们并在打开本地通知时使用它们。它的打印显示我正在分配传入的正确值
我正在尝试获取有关本地通知的待处理通知请求。它抛出我的错误:“从'(_) throws -> Void'类型的抛出函数到非抛出函数类型'([UNNotificationRequest]) -> Voi
我是一名优秀的程序员,十分优秀!