您的位置:首页 > 移动开发 > IOS开发

iOS - 本地通知

2016-04-20 21:26 639 查看
控制器中

/** 发送本地通知按钮的点击事件 */
/** 发送本地通知 */
- (IBAction)fireLocalNote:(id)sender {
// 1.创建本地通知
UILocalNotification *localNote = [[UILocalNotification alloc] init];

// 2.设置本地通知内容(通知时间和内容必须设置)
// 2.1.设置通知发出的时间(5秒后发通知给我)
localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
// 2.2.设置通知内容
localNote.alertBody = @"吃饭了吗?";
// 2.3.设置滑块的文字
localNote.alertAction = @"快点";
// 2.4.决定alertAction是否生效
localNote.hasAction = NO;
// 2.5.设置点击通知的启动图片(这里可以随便写,不管写什么都是以显示Launch里的启动图!!)
localNote.alertLaunchImage = @"xxx";
// 2.6.设置状态栏通知里的弹框标题(8.2才开始有的属性)
localNote.alertTitle = @"hahaha";
// 2.7.设置有通知时的音效(一般使用默认的声音)
// localNote.soundName = UILocalNotificationDefaultSoundName;
// 也可以自定义声音
localNote.soundName = @"yaobuqi.wav";
// 2.8.设置应用程序图标右上角的数字
localNote.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
// 2.9.设置额外信息(给AppDelegate.m中的didReceiveLocalNotification方法传递信息)
localNote.userInfo = @{@"type" : @1};

// 3.调用通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}


当程序在后台收到通知,点击了通知之后想进入其它界面(比如:与XXX聊天的界面),但在程序一直在前台时收到通知这种情况下不进行跳转,可以在下面这个方法里进行跳转操作。

/**
*  当应用程序在进入前台,或者在前台的时候都会执行该方法
*/
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// 针对应用程序在后台的时候进行跳转
if (application.applicationState == UIApplicationStateInactive) { // 从后台进入前台时
NSLog(@"进行界面的跳转");
NSLog(@"%@", notification.userInfo); // 可以通过通知的userInfo来确定跳转的界面

UIView *redView = [[UIView alloc] init];
redView.frame = CGRectMake(0, 0, 100, 100);
redView.backgroundColor = [UIColor redColor];
[self.window.rootViewController.view addSubview:redView];
}

}
这样虽然可以实现我们需要的功能,但是在程序从后台中被清理掉后收到通知,再点击进去是不会调用该方法的,但是会调用didFinishLaunchingWithOptions这个方法,利用这一点可以对didFinishLaunchingWithOptions这个方法进行如下修改

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// 设置应用程序图标右上角的数字
// [application setApplicationIconBadgeNumber:0];

if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
// 声明要获取的权限 (弹框|图标修改|声音)
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
// 注册获取通知权限
[application registerUserNotificationSettings:settings];
}

// 界面跳转(针对应用程序被杀死的状态下的跳转)
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
// 跳转代码
UILabel *redView = [[UILabel alloc] init];
redView.frame = CGRectMake(0, 0, 200, 300);
redView.numberOfLines = 0; // 自动换行
redView.font = [UIFont systemFontOfSize:12];
redView.backgroundColor = [UIColor redColor];
redView.text = [NSString stringWithFormat:@"%@", launchOptions];

[self.window.rootViewController.view addSubview:redView];
}
return YES;
}


效果图:



从launchOptions里可以拿到传递过来的userinfo

PS:程序在前台收到通知的情况下,launchOptions这个属性是null,其它情况有对应的值,我们这里只需要在本地通知的情况下来进行界面跳转。

其它值如下

NSString *const UIApplicationLaunchOptionsURLKey;
NSString *const UIApplicationLaunchOptionsSourceApplicationKey;
NSString *const UIApplicationLaunchOptionsRemoteNotificationKey;
NSString *const UIApplicationLaunchOptionsLocalNotificationKey;
NSString *const UIApplicationLaunchOptionsAnnotationKey;
NSString *const UIApplicationLaunchOptionsLocationKey;
NSString *const UIApplicationLaunchOptionsNewsstandDownloadsKey;
NSString *const UIApplicationLaunchOptionsBluetoothCentralsKey;
NSString *const UIApplicationLaunchOptionsBluetoothPeripheralsKey;
NSString *const UIApplicationLaunchOptionsShortcutItemKey;
NSString *const UIApplicationLaunchOptionsUserActivityDictionaryKey;
NSString *const UIApplicationLaunchOptionsUserActivityTypeKey;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 通知