废话不多说, 这东西老容易忘,记下来供以后查询,并附上详细的解释 首先我们设置一个按钮, 点击这个按钮发送本地通知:
// 发出本地通知 - (IBAction)fireLocalMessage:(id)sender { /* ios8以上版本需要在appdelegate中注册申请权限 本地通知在软件杀死状态也可以接收到消息 */ // 1.创建本地通知 UILocalNotification *localNote = [[UILocalNotification alloc] init]; // 2.设置本地通知(发送的时间和内容是必须设置的) localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:3.0]; localNote.alertBody = @"吃饭了么?"; /** 其他属性: timeZone 时区 repeatInterval 多长时间重复一次:一年,一个世纪,一天.. region 区域 : 传入中心点和半径就可以设置一个区域 (如果进入这个区域或者出来这个区域就发出一个通知) regionTriggersOnce BOOL 默认为YES, 如果进入这个区域或者出来这个区域 只会发出 一次 通知,以后就不发送了 alertAction: 设置锁屏状态下本地通知下面的 滑动来 ...字样 默认为滑动来查看 hasAction: alertAction的属性是否生效 alertLaunchImage: 点击通知进入app的过程中显示图片,随便写,如果设置了(不管设置的是什么),都会加载app默认的启动图 alertTitle: 以前项目名称所在的位置的文字: 不设置显示项目名称, 在通知内容上方 soundName: 有通知时的音效 UILocalNotificationDefaultSoundName默认声音 可以更改这个声音: 只要将音效导入到工程中,localNote.soundName = @"nihao.waw" */ localNote.alertAction = @"快点啊"; // 锁屏状态下显示: 滑动来快点啊 // localNote.alertLaunchImage = @"123"; localNote.alertTitle = @"东方_未明"; localNote.soundName = UILocalNotificationDefaultSoundName; localNote.soundName = @"nihao.waw"; /* 这里接到本地通知,badge变为5, 如果打开app,消除掉badge, 则在appdelegate中实现 [application setApplicationIconBadgeNumber:0]; */ localNote.applicationIconBadgeNumber = 5; // 设置额外信息,appdelegate中收到通知,可以根据不同的通知的额外信息确定跳转到不同的界面 localNote.userInfo = @{@"type":@1}; // 3.调用通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNote]; }
现在基本都视频iOS8以上版本,所以我们要在appdelegate中注册获取权限
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //打开app时候,消除掉badge [application setApplicationIconBadgeNumber:0]; if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { // iOS8以后 本地通知必须注册(获取权限) UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; [application registerUserNotificationSettings:settings]; } }
如果接收到通知了, 我们想要页面跳转怎么办呢?
首先分为三种情况:
1.我们应用程序本来在前台状态,我们就不要一下子跳转了,给个提示,然后再跳转
2.应用程序在后台,点击通知,进入前台的时候,直接跳转到指定界面
3.程序在杀死退出状态,接收到通知,点击通知进入到应用,也应跳转到指定界面首先我们看前两种情况
/** app在前台收到本地通知调用或者在home情况下点击通知进入前台调用 */ - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { NSLog(@"收到本地通知"); // 可以让用户跳转到指定界面 app在前台接收到通知直接跳转界面不太好,所以要判断一下,是从后台进入前台还是本身就在前台 if (application.applicationState == UIApplicationStateInactive) {// 进入前台时候 NSLog(@"跳转到指定界面"); // 如果接收到不同的通知,跳转到不同的界面: NSLog(@"%@", notification.userInfo); //通知的额外信息,根据设置的通知的额外信息确定 } }
如果是第三种情况: 程序在杀死退出状态,接收到通知,点击通知进入到应用,也应跳转到指定界面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //打开app时候,消除掉badge [application setApplicationIconBadgeNumber:0]; if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { // iOS8以后 本地通知必须注册(获取权限) UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; [application registerUserNotificationSettings:settings]; } // 页面跳转(针对应用程序被杀死的页面跳转) /* launchOptions: 1.点击图标打开是空的 2.应用间跳转是有值的 3.杀死的应用接收到本地通知,也是有值的 虽然说launchOptions有值,但是他们不同的key有值 */ if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { // 如果这个key有值,代表是杀死的程序接收到本地通知跳转 // 根据这种方式查看launchOptions的内容 UILabel *infoLabel = [[UILabel alloc] init]; infoLabel.frame = CGRectMake(0, 0, 300, 300); infoLabel.backgroundColor = [UIColor yellowColor]; infoLabel.numberOfLines = 0; infoLabel.font = [UIFont systemFontOfSize:10]; infoLabel.text = [NSString stringWithFormat:@"%@",launchOptions]; [self.window.rootViewController.view addSubview:infoLabel]; NSLog(@"跳转到指定页面"); } return YES; }
如何查看launchOptions中不同的key值
查看的key值
运行程序我们可以看到:
上面显示的内容为
我们照样可以拿到type,来进行指定页面的跳转
作者:东方_未明
链接:http://www.jianshu.com/p/25b5397769f3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
iOS 本地通知
最新推荐文章于 2024-08-27 09:31:22 发布