1.从iOS8 开始想要使用本地通知要首先注册:
// 注意: 在iOS8中, 必须提前注册通知类型
if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
// 注册通知类型
[application registerUserNotificationSettings:settings];
}
2.本地通知的基本使用:
- (void)scheduleLocalNotification{
NSLog(@"%s", __func__);
// 1.创建本地通知对象
UILocalNotification *note = [[UILocalNotification alloc] init];
// 指定通知发送的时间(指定5秒之后发送通知)
note.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
// 注意: 在真实开发中一般情况下还需要指定时区(让通知的时间跟随当前时区)
note.timeZone = [NSTimeZone defaultTimeZone];
// 指定通知内容
note.alertBody = @"这是通知内容";
// 设置通知重复的周期(1分钟通知一期)
// note.repeatInterval = NSCalendarUnitSecond;
// 指定锁屏界面的信息
note.alertAction = @"这是锁屏界面的信息";
// 设置点击通知进入程序时候的启动图片
note.alertLaunchImage = @"Default";
// 收到通知播放的音乐
note.soundName = @"buyao.wav";
// 设置应用程序的提醒图标
note.applicationIconBadgeNumber = 998;
// 注册通知时可以指定将来点击通知之后需要传递的数据
note.userInfo = @{@"name":@"lnj",
@"age":@"28",
@"phone": @"12345678912"};
// 2.注册通知(图片的名称建议使用应用程序启动的图片名称)
UIApplication *app = [UIApplication sharedApplication];
// 每次调用添加方法都会将通知添加到scheduledLocalNotifications数组中
[app scheduleLocalNotification:note];
}
3.取消本地通知:
1.取消全部的本地通知:
UIApplication *app = [UIApplication sharedApplication];
// 清空通知
[app cancelAllLocalNotifications];
2.取消某个本地通知:
UIApplication *app = [UIApplication sharedApplication];
for (UILocalNotification *notification in app.scheduledLocalNotifications){
[app cancelLocalNotification:notification];
}
4.本地通知的处理:
1>有本地通知 + app在后台存活 + 点击app图标启动 —–> 和普通app点击图标启动一样
2>有本地通知 + app在后台存活 + 点击本地通知启动 —–> 调用以下代理方法
/**
* 当用户点击本地通知进入app的时候调用 、通知发出的时候(app当时并没有被关闭)
*/
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
//在这个方法中可以指定app跳转到某个界面
if (application.applicationState == UIApplicationStateActive) return;
HMViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
[homeVc performSegueWithIdentifier:@"home2detail" sender:notification];
}
3>有本地通知 + app在前台 —–> 调用情况2的代理方法(和2的区别只是3情况的看不到)
4>有本地通知 + app被杀死 + 点击app图标启动 —–> 和普通app点击图标启动一样
5>有本地通知 + app被杀死 + 点击本地通知启动 —–> 调用以下代理方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//通过UIApplicationLaunchOptionsLocalNotificationKey拿出本地通知,也可跳转到指定页面
UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
return YES;
}