- (void)creatLocalNotification
{
// ios 8
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])
{
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
// 创建一个本地推送
UILocalNotification *notification = [[UILocalNotification alloc] init] ;
// 设置本地通知触发的时间(如果要立即触发,此处无需设置),这里设置为20秒后
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:20];
if (notification != nil)
{
// 设置推送时间
notification.fireDate = pushDate;
// 设置时区
notification.timeZone = [NSTimeZone defaultTimeZone];
// 设置重复间隔
notification.repeatInterval = kCFCalendarUnitMinute;
// 设置提醒的声音,可以自己添加声音文件,这里设置为默认提示音
notification.soundName = UILocalNotificationDefaultSoundName;
// 推送内容
notification.alertBody = @"alertBody:开店10周年庆典,全场消费最高5折,欢迎光临";
// 显示在icon上的红色圈中的数字
notification.applicationIconBadgeNumber = 0;
// 设置userinfo 方便在之后需要撤销的时候使用
NSDictionary *info = [NSDictionary dictionaryWithObject:@"notification_id_0"forKey:@"key"];
notification.userInfo = info;
// 添加推送到UIApplication
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
// 立即触发通知
// [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
}
二、取消一个本地推送
- (void)cancelLocalNotification
{
NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
// 获取目标推送
for (int i=0; i<notifications.count; i++)
{
UILocalNotification *lNotification = notifications[i];
NSString *keyValue = [lNotification.userInfo objectForKey:@"key"];
if ([keyValue isEqualToString:@"notification_id_0"])
{
// 取消此通知
[[UIApplication sharedApplication] cancelLocalNotification:lNotification];
break;
}
}
// 取消所有本地通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
三
/*
* @ 本地通知的响应方式,如果已经注册了本地通知,当客户端响应通知时:
a、应用程序在后台的时候,本地通知会给设备送达一个和远程通知一样的提醒,提醒的样式由用户在手机设置中设置
b、应用程序正在运行中,则不会收到任何提醒,但是会走应用程序 delegate 中的方法,代码如下
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
}
如果想实现程序在后台时候的那种提醒效果,可以在上面这个方法中添加相关代码,如下:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"消息" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
}
@ 需要注意的是,在情况a中,如果用户点击提醒进入应用程序,也会执行收到本地通知的回调方法,这种情况下如果添加了上面那段代码,则会连续出现两次提示,为了解决这个问题,修改代码如下:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
if ([[notification.userInfo objectForKey:@"key"] isEqualToString:@"notification_id_0"])
// 判断应用程序当前的运行状态,如果是激活状态,则进行提醒,否则不提醒
if(application.applicationState == UIApplicationStateActivie)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"消息" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
}
}
}
*/