ios推送通知之本地推送

来源:互联网 发布:c语言从右至左的运算符 编辑:程序博客网 时间:2024/04/30 02:50
本地推送,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就不为空,具体什么情况进入的,就赋值为不同的值。

  1. 在控制器中新建一个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];}
  1. 通知会在这个方法中接受到- (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];        UIView *jj=[[UIView alloc] initWithFrame:CGRectMake(0, 200, 100, 100)];        jj.backgroundColor=[UIColor yellowColor];        [self.window.rootViewController.view addSubview:jj];    }

这里写图片描述
之所以将打印信息写在label中是因为当程序被杀死的那一刻,xcode就不能调试了,只是程序自己在跑。所以为了方便就把信息写在label中方便查看button按钮传递过来的数据。

0 0
原创粉丝点击