ios推送通知之本地推送

本地推送,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值