美文网首页iOS随笔
iOS 本地推送通知

iOS 本地推送通知

作者: TIGER_XXXX | 来源:发表于2017-08-02 17:56 被阅读13次
    1. 什么是本地推送通知
      不需要联网的情况下,应用程序经由系统发出的通知
    2. 本地推送的使用场景
      定时提醒,如玩游戏、记账、闹钟、备忘录等
    3. 实现本地推送通知的步骤
      1. 创建本地推送通知的对象UILocalNotification
      2. 设置本地推送通知对象的属性
        • fireDate 推送的时间
        • alertBody 通知的内容
        • alertName 锁屏时的标题
        • soundName 音效名称
        • applicationIconBadgeNumber 徽章显示的数字
        • timeZone 时区
      3. 将通知排入到应用程序中
    4. 点击通知内容的处理
      1. 应用没有关闭,在后台
        1. 自动进入前台
        2. 自动调用AppDelegate下的didReceiveLocalNotification方法
      2. 应用已关闭
        1. 自动进入应用
        2. 自动执行AppDelegate下的didFinishLaunchingWithOptions方法
    5. 代码
      写在AppDelegate.m中
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        
        if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {//iOS8以后需要询问用户是否允许接收通知
            //一下代码回实现的效果是
            //第一次运行程序,系统弹出一个提示框
            //询问用户是否允许接收通知
            UIUserNotificationType noteType = UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge;
            UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:noteType categories:nil];
            [application registerUserNotificationSettings:setting];
        }
        
        //如果是因为点击查看了通知而启动了应用程序
        //那么通知的信息都会存在launchOptions参数中
        UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
        if (notification != nil) {//点通知进来的
            UILabel *label = [[UILabel alloc]init];
            label.frame = CGRectMake(0, 40, 300, 200);
            label.backgroundColor = [UIColor blueColor];
            label.numberOfLines = 0;
            label.font =[UIFont systemFontOfSize:30];
            label.textColor = [UIColor whiteColor];
            label.text = [NSString stringWithFormat:@"3333333%@",notification.userInfo];
            [self.window.rootViewController.view addSubview:label];
            [application setApplicationIconBadgeNumber:0];
        }
        return YES;
    }
    
    
    /*
     1.App在前台,通知到了,直接自动执行该方法
     2.App在后台,通知到了,点击查看通知,该方法才执行
     3.App已经退出,通知到了,点击查看通知,此方法不执行,但是didFinishLaunchingWithOptions方法一定会被执行,通知传入的参数也可以在launching方法中获取到
     */
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
        UILabel *label = [[UILabel alloc]init];
        label.frame = CGRectMake(0, 250, 300, 200);
        label.backgroundColor = [UIColor grayColor];
        label.numberOfLines = 0;
        label.font =[UIFont systemFontOfSize:30];
        label.textColor = [UIColor whiteColor];
        //alertBody用于存储显示的通知的文字内容
        //uesrInfo用于存储额外要传递的通知内容
        label.text = [NSString stringWithFormat:@"%@",notification.userInfo];
        [self.window.rootViewController.view addSubview:label];
        //去掉应用程序图标中出现的红色数字提醒
        [application setApplicationIconBadgeNumber:0];
    }
    

    写在注册通知的位置

    //1.创建本地通知对象
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        
        //2.设置通知的一些属性
        notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];//10秒后发通知
        notification.alertBody = @"这是一条新的通知";
        notification.userInfo = @{@"name":@"张三",
                                   @"age":@20
                                  };
        notification.applicationIconBadgeNumber = 2;
        
        //3.将通知添加到应用程序的日程清单中
        UIApplication *application = [UIApplication sharedApplication];
        [application scheduleLocalNotification:notification];
    

    demo:https://github.com/TigerCui/iOSDemo/tree/master/LocalNotification

    相关文章

      网友评论

        本文标题:iOS 本地推送通知

        本文链接:https://www.haomeiwen.com/subject/ltrylxtx.html