iOS 本地通知

 
 

废话不多说, 这东西老容易忘,记下来供以后查询,并附上详细的解释 首先我们设置一个按钮, 点击这个按钮发送本地通知:

// 发出本地通知
- (IBAction)fireLocalMessage:(id)sender {

    /*
        ios8以上版本需要在appdelegate中注册申请权限 本地通知在软件杀死状态也可以接收到消息
     */

    // 1.创建本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];
    // 2.设置本地通知(发送的时间和内容是必须设置的)
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:3.0];
    localNote.alertBody = @"吃饭了么?";

    /**
     其他属性: timeZone 时区
              repeatInterval 多长时间重复一次:一年,一个世纪,一天..
              region 区域 : 传入中心点和半径就可以设置一个区域 (如果进入这个区域或者出来这个区域就发出一个通知)
              regionTriggersOnce  BOOL 默认为YES, 如果进入这个区域或者出来这个区域 只会发出 一次 通知,以后就不发送了
              alertAction: 设置锁屏状态下本地通知下面的 滑动来 ...字样  默认为滑动来查看
              hasAction: alertAction的属性是否生效
              alertLaunchImage: 点击通知进入app的过程中显示图片,随便写,如果设置了(不管设置的是什么),都会加载app默认的启动图
              alertTitle: 以前项目名称所在的位置的文字: 不设置显示项目名称, 在通知内容上方
              soundName: 有通知时的音效 UILocalNotificationDefaultSoundName默认声音
                         可以更改这个声音: 只要将音效导入到工程中,localNote.soundName = @"nihao.waw"
     */

    localNote.alertAction = @"快点啊"; // 锁屏状态下显示: 滑动来快点啊
//    localNote.alertLaunchImage = @"123";
    localNote.alertTitle = @"东方_未明";
    localNote.soundName = UILocalNotificationDefaultSoundName;
    localNote.soundName = @"nihao.waw";

    /* 这里接到本地通知,badge变为5, 如果打开app,消除掉badge, 则在appdelegate中实现
        [application setApplicationIconBadgeNumber:0];
     */
    localNote.applicationIconBadgeNumber = 5;

    // 设置额外信息,appdelegate中收到通知,可以根据不同的通知的额外信息确定跳转到不同的界面
    localNote.userInfo = @{@"type":@1};

    // 3.调用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];

}

现在基本都视频iOS8以上版本,所以我们要在appdelegate中注册获取权限

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //打开app时候,消除掉badge
    [application setApplicationIconBadgeNumber:0];

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        // iOS8以后 本地通知必须注册(获取权限)
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

        [application registerUserNotificationSettings:settings];
    }
}

如果接收到通知了, 我们想要页面跳转怎么办呢?
首先分为三种情况:
1.我们应用程序本来在前台状态,我们就不要一下子跳转了,给个提示,然后再跳转
2.应用程序在后台,点击通知,进入前台的时候,直接跳转到指定界面
3.程序在杀死退出状态,接收到通知,点击通知进入到应用,也应跳转到指定界面

首先我们看前两种情况

/**
    app在前台收到本地通知调用或者在home情况下点击通知进入前台调用
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"收到本地通知");
    // 可以让用户跳转到指定界面 app在前台接收到通知直接跳转界面不太好,所以要判断一下,是从后台进入前台还是本身就在前台
    if (application.applicationState == UIApplicationStateInactive) {// 进入前台时候
        NSLog(@"跳转到指定界面");

        // 如果接收到不同的通知,跳转到不同的界面:
        NSLog(@"%@", notification.userInfo); //通知的额外信息,根据设置的通知的额外信息确定

    }
}

如果是第三种情况: 程序在杀死退出状态,接收到通知,点击通知进入到应用,也应跳转到指定界面

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //打开app时候,消除掉badge
    [application setApplicationIconBadgeNumber:0];

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        // iOS8以后 本地通知必须注册(获取权限)
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

        [application registerUserNotificationSettings:settings];
    }


    // 页面跳转(针对应用程序被杀死的页面跳转)
    /* launchOptions: 1.点击图标打开是空的
                      2.应用间跳转是有值的
                      3.杀死的应用接收到本地通知,也是有值的
                      虽然说launchOptions有值,但是他们不同的key有值

    */

    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { // 如果这个key有值,代表是杀死的程序接收到本地通知跳转

    // 根据这种方式查看launchOptions的内容
        UILabel *infoLabel = [[UILabel alloc] init];
        infoLabel.frame = CGRectMake(0, 0, 300, 300);
        infoLabel.backgroundColor = [UIColor yellowColor];
        infoLabel.numberOfLines = 0;
        infoLabel.font = [UIFont systemFontOfSize:10];
        infoLabel.text = [NSString stringWithFormat:@"%@",launchOptions];
        [self.window.rootViewController.view addSubview:infoLabel];        


        NSLog(@"跳转到指定页面");
    }
    return YES;
}

如何查看launchOptions中不同的key值


2056B106-E077-4DF6-8147-A3E27ABA5F65.png

查看的key值


key.png

运行程序我们可以看到:


12.gif

上面显示的内容为


type.png


我们照样可以拿到type,来进行指定页面的跳转



作者:东方_未明
链接:http://www.jianshu.com/p/25b5397769f3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值