如果应用程序已打开,则不要发送每日本地通知
Don't send daily Local Notification if app already opened
我每天同一时间发送 Local Notification
。
我想知道是否有办法如果用户当天已经打开应用程序则不发送通知?
这是我用来检查是否允许通知然后发送通知的代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
// before we create any new ones, cancel all existing notifications
[[UIApplication sharedApplication]cancelAllLocalNotifications];
if ([[[UIApplication sharedApplication] currentUserNotificationSettings] types] != UIUserNotificationTypeNone) {
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comp = [cal components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]];
comp.hour = 19; // 19 = 7PM
comp.minute = 45; // 7:45 PM
comp.second = 01; // 7:45:01 PM
localNotification.fireDate = [cal dateFromComponents:comp];
localNotification.alertBody = @"Local Notification in iOS8";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.repeatInterval = NSCalendarUnitDay;
// this will schedule the notification to fire at the fire date
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
// this will fire the notification right away, it will still also fire at the date we set
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
}
编辑:这是我尝试根据以下答案实施方法建议的代码?虽然我显然没有得到正确的东西:/
- (void)isDateLowerThanToday {
NSDate *now = [NSDate date];
int daysToAdd = -1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
NSLog(@"NewDate1 = %@", newDate1);
}
您可以在 NSUserDefaults
存储上次通知发送日期。然后,当应用程序打开时,您检查此值,如果它为空或低于今天,您将发送通知并使用当前日期更新 NSUserDefaults
上的值。
像这样应该可以解决问题
NSString *key = @"LAST_NOTIFICATION_SENT_DATE";
NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:key];
// You have to implement isDateLowerThanToday
if (!date || [self isDateLowerThanToday:date]) {
[self sendNotification];
date = [NSDate date];
[[NUserDefaults standardUserDefaults] setObject:date forKey:key];
}
这里有isDateLowerThanToday
实现
-(bool)isDateLowerThanToday:(NSDate *)date {
NSDate * now = [NSDate date];
NSComparisonResult result = [now compare:date];
return result == NSOrderedDescending;
}
我每天同一时间发送 Local Notification
。
我想知道是否有办法如果用户当天已经打开应用程序则不发送通知?
这是我用来检查是否允许通知然后发送通知的代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
// before we create any new ones, cancel all existing notifications
[[UIApplication sharedApplication]cancelAllLocalNotifications];
if ([[[UIApplication sharedApplication] currentUserNotificationSettings] types] != UIUserNotificationTypeNone) {
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comp = [cal components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]];
comp.hour = 19; // 19 = 7PM
comp.minute = 45; // 7:45 PM
comp.second = 01; // 7:45:01 PM
localNotification.fireDate = [cal dateFromComponents:comp];
localNotification.alertBody = @"Local Notification in iOS8";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.repeatInterval = NSCalendarUnitDay;
// this will schedule the notification to fire at the fire date
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
// this will fire the notification right away, it will still also fire at the date we set
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
}
编辑:这是我尝试根据以下答案实施方法建议的代码?虽然我显然没有得到正确的东西:/
- (void)isDateLowerThanToday {
NSDate *now = [NSDate date];
int daysToAdd = -1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
NSLog(@"NewDate1 = %@", newDate1);
}
您可以在 NSUserDefaults
存储上次通知发送日期。然后,当应用程序打开时,您检查此值,如果它为空或低于今天,您将发送通知并使用当前日期更新 NSUserDefaults
上的值。
像这样应该可以解决问题
NSString *key = @"LAST_NOTIFICATION_SENT_DATE";
NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:key];
// You have to implement isDateLowerThanToday
if (!date || [self isDateLowerThanToday:date]) {
[self sendNotification];
date = [NSDate date];
[[NUserDefaults standardUserDefaults] setObject:date forKey:key];
}
这里有isDateLowerThanToday
实现
-(bool)isDateLowerThanToday:(NSDate *)date {
NSDate * now = [NSDate date];
NSComparisonResult result = [now compare:date];
return result == NSOrderedDescending;
}