ios推送通知之本地推送
2015-09-01 19:37
543 查看
本地推送,ios8和以往ios7有些变化,多了一些注册相关的步骤。如下:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:settings]; }
如果是ios7就不用上面的代码了
其中UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound是枚举变量,表示要推送的是图标右上角显示的消息数量,手机下拉通知栏的消息,推送的声音。具体的一些变量用法可以自行在xcode里浏览。
简单做个例子:
首先介绍一个方法好让后面的部分理解
推送的程序写在在程序启动时的一个方法中执行的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
在这个方法中值得注意的一点是launchOptions这个变量,如你们可见,它是一个NSDictionary*类型的变量,重点就是这里。如果我们正常启动程那么launchOptions是空值,在这里正常启动就是点击应用图标或者xcode run进入的意思。如果是其他方式进入,launchOptions就不为空,具体什么情况进入的,就赋值为不同的值。
在控制器中新建一个button ,作用是发送一个通知。button连线到这个方法里
- (IBAction)addLocalNote:(id)sender { // 1.创建一个本地通知相关属性可以自定义设置 UILocalNotification *localNote = [[UILocalNotification alloc] init]; // 2.设置本地通知的一些属性(通知发出的时间/通知的内容) // 2.1.设置通知发出的时间 localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0]; // 2.2.设置通知的内容 localNote.alertBody = @"吃饭了吗?"; // 2.3.设置锁屏界面的文字 localNote.alertAction = @"查看具体的消息"; // 2.4.设置锁屏界面alertAction是否有效 localNote.hasAction = YES; // 2.5.设置通过点击通知打开APP的时候的启动图片(无论字符串设置成什么内容,都是显示应用程序的启动图片) localNote.alertLaunchImage = @"111"; // 2.6.设置通知中心通知的标题 localNote.alertTitle = @"222222222222"; // 2.7.设置音效 localNote.soundName = @"buyao.wav"; // 2.8.设置应用程序图标右上角的数字 localNote.applicationIconBadgeNumber = 1; // 2.9.设置通知之后的属性 localNote.userInfo = @{@"name" : @"张三", @"toName" : @"李四"}; // 3.调度通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNote]; }
通知会在这个方法中接受到- (void)application:(UIApplication )application didReceiveLocalNotification:(UILocalNotification )notification。
在这个方法中我没写下如下代码
if (application.applicationState == UIApplicationStateActive) return; if (application.applicationState == UIApplicationStateInactive) { // 当应用在后台收到本地通知时执行的跳转代码 UILabel *redView = [[UILabel alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(0, 100, 300, 400); redView.numberOfLines = 0; // redView.text = [NSString stringWithFormat:@"%@", launchOptions]; [self.window.rootViewController.view addSubview:redView]; //同时打印之前设置的信息 NSLog(@"%@", notification);
nslog打印了之前button里面设置的东西。
其中UIApplicationStateActive表示程序在前台,UIApplicationStateInactive表示程序即将进入时的状态。上面的判断的用意就是如果程序在前台就不用显示通知。但是下拉通知栏中还是显示。如果程序运行在后台的话,手机就会弹出通知,当我们点击通知,便会进入程序。然后视图中便会创建一个redView(看上述代码)。
但是如果我们点击了按钮然后马上把程序被杀死了,通知还会继续吗,答案是当然的。大家应该没有忘记刚开始的lauchOPtions这个变量吧,我们在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中加入如下代码
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { // 当被杀死状态收到本地通知时执行的跳转代码 // [self jumpToSession]; UILabel *redView = [[UILabel alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(0, 100, 300, 400); redView.numberOfLines = 0; redView.text = [NSString stringWithFormat:@"%@", launchOptions]; [self.window.rootViewController.view addSubview:redView]; 4000 UIView *jj=[[UIView alloc] initWithFrame:CGRectMake(0, 200, 100, 100)]; jj.backgroundColor=[UIColor yellowColor]; [self.window.rootViewController.view addSubview:jj]; }
之所以将打印信息写在label中是因为当程序被杀死的那一刻,xcode就不能调试了,只是程序自己在跑。所以为了方便就把信息写在label中方便查看button按钮传递过来的数据。
相关文章推荐
- IOS科研IOS开发笔记学习基础知识
- ios js oc相互调用(截获url的方式)(三)
- EAIntroView–高度可定制的iOS应用欢迎页通用解决方案
- iOS中init和initialize的特点
- EAIntroView–高度可定制的iOS应用欢迎页通用解决方案
- ios9 SFSafariViewController完整web体验
- ios下安卓开发环境的搭建
- iOS事件机制(二)
- iOS事件机制(一)
- 使用blend改变图片颜色
- 69.iOS Team Provisioning Profile 解释
- 58.iOS AutoLayout自动布局中级开发教程(3)-等宽等高等中心
- IOS常用正则表达式
- 65.iOS AutoLayout自动布局中级开发教程(2)-初识autolayout
- 66.iOS AutoLayout自动布局中级开发教程(1)-浅谈autolayout
- 关于ios图片无限轮播
- 64.iOS AutoLayout自动布局中级开发教程(5)-修改约束的值,延迟加载
- 63.iOS AutoLayout自动布局中级开发教程(4)-label文字自动适应大小,宽度(新)
- iOS开发-正则表达式的使用方法
- 57.阐明iOS证书和provision文件