网络推送可能被人最为重视,但是本地推送有时候项目中也会运用到;
闲话少叙,代码如下:
1、添加根视图
self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible];
2、本地创建一个button进行触发
button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(20, 100, WIDTH - 40, 50); button.backgroundColor = [UIColor blueColor]; [button setTitle:@"开始啦" forState:UIControlStateNormal]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; //绑定方法 [button addTarget:self action:@selector(noticClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];
3、注册一个通知
//设置本地通知 传一个时间进去 + (void)registerLocalNotification:(NSInteger)alertTime { UILocalNotification *notification = [[UILocalNotification alloc]init]; //设置触发通知的时间 NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime]; NSLog(@"fireDate=%@",fireDate); notification.fireDate = fireDate; //时区 notification.timeZone = [NSTimeZone defaultTimeZone]; //设置重复的间隔 notification.repeatInterval = kCFCalendarUnitSecond; //通知内容 notification.alertBody = @"该起床了..."; notification.applicationIconBadgeNumber = 1; //通知被触发时播放的声音 notification.soundName = UILocalNotificationDefaultSoundName; //通知参数 NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"起床了,开始学习了ios开发了" forKey:@"key"]; notification.userInfo = userDict; //ios8 以后,需要添加这个注册,才能得到授权 if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; // 通知重复提示的单位,可以是天、周、月 notification.repeatInterval = NSCalendarUnitDay; } else { // 通知重复提示的单位,可以是天、周、月 notification.repeatInterval = NSDayCalendarUnit; } //执行通知注册 [[UIApplication sharedApplication]scheduleLocalNotification:notification]; }
4、调用这个方法
-(void)noticClick:(id)sender { //调用通知 [ViewController registerLocalNotification:4];//4秒钟后 }
5、取消通知的方法
//取消某个本地推送通知 +(void)cancelLocalNotificationWithKey:(NSString *)key { //获取所有本地通知数组 NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications; for (UILocalNotification *notification in localNotifications) { NSDictionary *userInfo = notification.userInfo; if (userInfo) { //根据设置通知参数时指定的key来获取通知参数 NSString *info = userInfo[key]; //如果找到需要取消的通知,则取消 if (info != nil) { [[UIApplication sharedApplication]cancelLocalNotification:notification]; break; } } } }
6、调用这个方法
//本地通知回调函数,当应用程序在前台时调用 -(void)application:(UIApplication *)application didReceiveLocalNotification:(nonnull UILocalNotification *)notification { NSLog(@"notif:%@",notification); //这里真是需要处理交互的地方 //获取通知所带的数据 NSString *notMes = [notification.userInfo objectForKey:@"key"]; UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"本地通知(前台)" message:notMes delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; //更新显示的角标个数 NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber; badge--; badge = badge >= 0 ? badge : 0; [UIApplication sharedApplication].applicationIconBadgeNumber = badge; //在不许要再推送时,可以取消推送 [ViewController cancelLocalNotificationWithKey:@"key"]; }