Objective-C:使用 UNUserNotificationCenter 设置计时器以显示提醒
Posted
技术标签:
【中文标题】Objective-C:使用 UNUserNotificationCenter 设置计时器以显示提醒【英文标题】:Objective-C: Set timer to display a reminder using UNUserNotificationCenter 【发布时间】:2018-06-14 07:33:35 【问题描述】:我希望在适当的时候在应用程序的前台或后台显示自定义提醒或弹出消息。我试过this link ,但似乎没有用。
当我启动我的应用程序时没有发生任何事情。它会说本地通知成功,但我没有看到任何弹出的自定义消息框。请帮忙。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//===Every 20 secs I will call setSchedule method
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(setSchedule) userInfo:nil repeats:YES];
return YES;
-(void)setSchedule
NSDate *now = [NSDate date];
NSLog(@"NSDate:%@",now);
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];
UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"Notification!" arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"This is local notification message!" arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];
/// 4. update application icon badge number
objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"ten" content:objNotificationContent trigger:trigger];
/// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error)
if (!error)
NSLog(@"Local Notification succeeded");
else
NSLog(@"Local Notification failed");
];
【问题讨论】:
【参考方案1】:首先,UNUserNotification
不会在前台触发。
第二件事,如果您想每 20 秒或任何时间间隔触发一次通知,请不要使用 UNCalendarNotificationTrigger
。
检查下面的触发方法并在您的代码中设置。
let trigger2 = UNTimeIntervalNotificationTrigger(timeInterval: YourInterval, repeats: true)
【讨论】:
以上是关于Objective-C:使用 UNUserNotificationCenter 设置计时器以显示提醒的主要内容,如果未能解决你的问题,请参考以下文章