@chenbinghua
2017-04-13T02:38:28.000000Z
字数 2366
阅读 1373
iOS笔记
注意:这里说的推送通知跟NSNotification有所区别
NSNotification是抽象的,不可见的
推送通知是可见的(能用肉眼看到)
iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)
推送通知的使用细节
1.发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
2.点击推送通知后,默认会自动打开发出推送通知的app
3.不管app打开还是关闭,推送通知都能如期发出
1.在AppDelegate申请推送权限
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 请求获取DeviceToken 分开iOS7和iOS8两种情况if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {// 1.获取发送通知的权限UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];[application registerUserNotificationSettings:settings];// 2.注册远程通知[application registerForRemoteNotifications];} else {[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];}return YES;}
2.启动本地通知
- (IBAction)fireNotification:(id)sender {// 1.创建本地通知UILocalNotification *localNote = [[UILocalNotification alloc] init];// 2.设置本地通知的信息// 2.1.设置提示信息localNote.alertBody = @"吃饭了吗?";// 2.2.设置通知弹出的时间localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0];// 2.3.设置滑块显示的文字localNote.alertAction = @"屌你老母";// 2.4.是否让上面的文字生效localNote.hasAction = YES;// 2.5.设置通知中心的标题localNote.alertTitle = @"小码哥哥";// 2.6.设置通知的声音localNote.soundName = @"buyao.wav";// 2.7.设置应用程序图标右上角的数字localNote.applicationIconBadgeNumber = 10;// 2.8.设置点击通知的启动图片localNote.alertLaunchImage = @"这里随便写都是显示启动图片";// 3.调度通知[[UIApplication sharedApplication] scheduleLocalNotification:localNote];}
当用户点击本地推送通知,会自动打开app,这里有2种情况
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {}return YES;}// app并没有关闭,一直隐藏在后台// 让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)// 接收到本地通知 应用程序在进入前台,或者在前台的时候都会执行该方法- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{// 跳转到固定的界面if (application.applicationState == UIApplicationStateInactive) {// 进行页面的跳转} else {// 其他情况不需要跳转}}// app已经被关闭(进程已死)启动app,启动完毕会调用AppDelegate的下面方法// launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}