iOS本地推送
2015-09-09 19:52
357 查看
推送通知
注意:这里说的推送通知跟NSNotification有所区别NSNotification是抽象的,不可见的
推送通知是可见的(能用肉眼看到)
iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)
推送通知的作用
推送通知的作用可以让不在前台运行的app,告知用户app内部发生了什么事情
推送通知的呈现效果总结
在屏幕顶部显示一块横幅(显示具体内容)在屏幕中间弹出一个UIAlertView(显示具体内容)
在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
更新app图标的数字(说明新内容的数量)
播放音效(提醒作用)
用户也可以决定是否要开启以下4个功能:
显示App图标数字
播放音效
锁屏显示
显示在“通知中心”
推送通知的使用细节
发出推送通知时,如果程序正运行在前台,那么推送通知就不会被呈现出来点击推送通知后,默认会自动打开发出推送通知的app
不管app打开还是关闭,推送通知都能如期发出
如何发送本地推送
1.创建本地推送对象UILocalNotification *localNote = [[UILocalNotification alloc]init];
2.设置通知属性
if (localNote != nil) { // 设置推送时间 NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10]; localNote.fireDate = pushDate; // 设置时区(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区) localNote.timeZone = [NSTimeZone defaultTimeZone]; // 设置重复间隔 localNote.repeatInterval = NSCalendarUnitMinute; // 推送音效,格式只能是.aiff、.wav、.caf三种格式,并且声音的长度不能超过30秒 localNote.soundName = UILocalNotificationDefaultSoundName; //localNote.alertLaunchImage = @"";//点击推送通知打开app时显示的启动图片 // 推送内容 localNote.alertBody = @"推送内容"; // 锁屏后动作提示标题(提示滑动的操作目的) localNote.alertAction=@"推送内容"; // 显示在icon上的红色圈中的数子 localNote.applicationIconBadgeNumber = 1; // 设置userinfo 方便在之后需要撤销的时候使用(附加的额外信息) NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"]; localNote.userInfo = info; //添加推送到UIApplication UIApplication *app = [UIApplication sharedApplication]; // 判断版本设备,因为iOS8.0以后的版本设置和之前的不一样 if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0){ //对通知进行设置 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil]; [app registerUserNotificationSettings:setting];// 注册设置 } [app scheduleLocalNotification:localNote];// 启动推送(在规定时间) }
3.取消本地推送
UIApplication *app = [UIApplication sharedApplication]; [app cancelAllLocalNotifications];// 取消所有本地推送 // 取消指定本地推送 // [app cancelLocalNotification:localNote];
4.获得被调度的所有本地推(等待发出还未发出的推送)
已发出且过期的推送算调度结束,会自动从数组中移除
NSArray *notes = [UIApplication sharedApplication].scheduledLocalNotifications;
5.此方法是立即发送推送(应用场景:程序后台运行时接受到类似于QQ消息后即时推送)
//即时推送 [app presentLocalNotificationNow:notification];
点击本地推送通知
当用户点击本地推送通知,会自动打开app,这里有2种情况app并没有关闭,一直隐藏在后台
让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
示例代码:
/** * 当用户点击本地通知进入app的时候调用 、通知发出的时候(app当时并没有被关闭) */ - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { // self.label.text = [NSString stringWithFormat:@"点击通知再次回到前台---%d", application.applicationState]; // 程序正处在前台运行,直接返回 if (application.applicationState == UIApplicationStateActive) return; NewViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject]; [homeVc performSegueWithIdentifier:@"home2detail" sender:notification]; }
app已经被关闭(进程已死)
启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UILabel *label = [[UILabel alloc] init]; label.backgroundColor = [UIColor redColor]; label.frame = CGRectMake(0, 100, 200, 100); label.font = [UIFont systemFontOfSize:11]; label.numberOfLines = 0; [[[self.window.rootViewController.childViewControllers firstObject] view] addSubview:label]; // launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象 UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (note) { label.text = @"点击本地通知启动的程序"; NewViewController *homeVC = [self.window.rootViewController.childViewControllers firstObject]; [homeVC performSegueWithIdentifier:@"home2detail" sender:note]; } else { label.text = @"直接点击app图标启动的程序"; } self.label = label; return YES; }
相关文章推荐
- iOS整理 -- 多线程之 GCD
- iOS-柱状图
- iOS开发之 面向对象的三大特征以及字符串的处理
- ios-音乐播放器(2)工具类的封装
- iOS开发之 字典和可变字典初解
- IOS学习之ios沙河机制
- iOS开发知识点装逼1:理解assign,copy,retain变strong
- iOS远程推送之使用极光推送
- iOS开发 之数组初解
- IOS之数据持久化(归档与反归档)
- IOS设置button 图片 文字 上下、左右
- iOS-runtime-根据协议名调某一个类有与协议里面放的相同的方法
- IOS-跳转到设置页
- iOS-饼图
- iOS block里的self
- IOS在后台每隔一段时间执行一下
- ios nil、NULL和NSNull 的使用
- iOS框架学习(一)
- iOS9 - ATS
- iOS开发~Cornerstone与Cocopods一起使用的问题