【发布时间】:2017-10-16 10:52:24
【问题描述】:
在本地通知中有 repeatInterval 属性,我们可以将单位重复间隔设置为分钟、小时、天、周、年等。
我希望在祈祷时间和每天相同的过程中重复间隔。
所以每个祷告时间都会收到本地通知。
祷告时间是每天不同的时间
【问题讨论】:
在本地通知中有 repeatInterval 属性,我们可以将单位重复间隔设置为分钟、小时、天、周、年等。
我希望在祈祷时间和每天相同的过程中重复间隔。
所以每个祷告时间都会收到本地通知。
祷告时间是每天不同的时间
【问题讨论】:
你不能通过重复来做到这一点。在接下来的 30 天内,制作一堆不同的制作通知 - 每天一个。当用户打开应用时,为接下来的 30 次重新创建它们。
【讨论】:
您可以将重复间隔设置为天,并传递不同时间的本地通知数组。
myapp.scheduledLocalNotifications = arrayOfNOtifications;
这可能会对你有所帮助:how to create multiple local notifications
【讨论】:
我做过这样的应用试试这个。
func scheduleNotification() {
let dateString = "2017-04-04 09:00:00"
let dateFormatter = DateFormatter()
var localTimeZoneName: String { return TimeZone.current.identifier }
var secondsFromGMT: Int { return TimeZone.current.secondsFromGMT() }
dateFormatter.timeZone = TimeZone(secondsFromGMT: secondsFromGMT)
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateObj:Date = dateFormatter.date(from: dateString)!
let triggerDaily = Calendar.current.dateComponents([.hour,.minute,.second,], from: dateObj)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)
let content = UNMutableNotificationContent()
content.title = "mIdeas"
content.body = getRandomMessage()
content.sound = UNNotificationSound.default()
content.categoryIdentifier = "myCategory"
let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().delegate = self
//this commented code is to remove the pre-seted notifications so if you need multiple times don't use this line of code
//UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("Uh oh! i had an error: \(error)")
}
}
}
调用这个函数来设置通知你可以修改这个函数并添加参数来打发时间
【讨论】:
是的,您可以使用重复选项在特定时间和日期推送通知。
按照下面的代码:
//1. catch the notif center
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
//2. I prefer removing any and all previously pending notif
[center removeAllPendingNotificationRequests];
//then check whether user has granted notif permission
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus != UNAuthorizationStatusAuthorized) {
// Notifications not allowed, ask permission again
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
//request authorization succeeded!
}
}];
}
}];
//3. prepare notif content
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:NSLocalizedString(@"Hello! Today's Sunday!!",nil) arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:NSLocalizedString(@"Sleep tight!",nil) arguments:nil];
content.sound = [UNNotificationSound defaultSound];
content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
//4. next, create a weekly trigger for notif on every Sunday
NSDate* sundayDate = startDate;
NSDateComponents *components = [[NSDateComponents alloc] init];
while(true){
NSInteger weekday = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday fromDate:sundayDate];
if(weekday == 1){//sunday, stay asleep reminder . LOL
components.weekday = 1;
components.hour = 9;
components.minute = 0;
break;
}else{//keep adding a day
[components setDay:1];
sundayDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:sundayDate options:0];
}
}
//5. Create time for notif on Sunday
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:unitFlags fromDate:sundayDate];
comps.hour = 9;
comps.minute = 0;
sundayDate = [calendar dateFromComponents:comps];
NSDateComponents *triggerWeekly = [[NSCalendar currentCalendar] components:NSCalendarUnitWeekday + NSCalendarUnitHour + NSCalendarUnitMinute fromDate:sundayDate];
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:triggerWeekly repeats:YES];
//6. finally, add it to the request
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"LocalIdentifier" content:content trigger:trigger];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"Local Notification succeeded");
} else {
NSLog(@"Local Notification failed");
}
}];
如果您在通知中寻找可操作的项目。您应该将它添加到中心的某个位置。
UNNotificationAction *snoozeAct = [UNNotificationAction actionWithIdentifier:@"Snooze"
title:NSLocalizedString(@"Snooze",nil) options:UNNotificationActionOptionNone];
UNNotificationAction *deleteAct = [UNNotificationAction actionWithIdentifier:@"Delete"
title:NSLocalizedString(@"Delete",nil) options:UNNotificationActionOptionDestructive];
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:identifier
actions:@[snoozeAct,deleteAct] intentIdentifiers:@[]
options:UNNotificationCategoryOptionNone];
NSSet *categories = [NSSet setWithObject:category];
[center setNotificationCategories:categories];
content.categoryIdentifier = @"ActionIdentifier";
确保为通知请求设置不同的标识符!
【讨论】: