美文网首页
推送通知-本地推送

推送通知-本地推送

作者: 一个人的思考 | 来源:发表于2017-05-08 09:09 被阅读49次

    iOS推送通知

    • 注意:这里说的推送通知跟NSNotification有所区别

    • NSNotification是抽象的,不可见的

    • 推送通知是可见的(能用肉眼看到)

    • iOS中提供了2种推送通知
    • 本地推送通知(Local Notification)

    • 远程推送通知(Remote Notification)

    • 推送通知的作用
      • 让app不在前台时,告示用户App的最新情况
    • 推送通知的呈现方式
      • 在屏幕顶部一块横幅
      • 在屏幕中间弹出UIAlertView
      • 同时可以播放音效
      • 锁屏时展示
      • App图标右上角额数字提示
    • 本地推送通知(具体实现)

      • 本地通知的作用:清理App缓存,记账,买衣服,看电影,玩游戏等
    • 发送本地通知

        /**
         创建本地通知对象
         */
        UILocalNotification *localnotification = [[UILocalNotification alloc]init];
        /**
         *  设置推送的相关属性
         */
        localnotification.fireDate = [NSDate dateWithTimeInterval:5.0 sinceDate:[NSDate date]];//通知触发时间
        localnotification.alertBody = @"明天放假啦";//通知具体内容
        localnotification.alertTitle = @"房租";//谁发出的通知
        localnotification.soundName = @"buyao.wav";//通知时的音效
        localnotification.applicationIconBadgeNumber = 1;
        localnotification.alertAction = @"查看更多精彩内容";//默认为 滑动来 +查看;锁屏时显示底部提示
        /**
         *  调度本地通知,通知会在特定时间发出
         */
        [[UIApplication sharedApplication] scheduleLocalNotification:localnotification];
        [[UIApplication sharedApplication] presentLocalNotificationNow:localnotification];//立即发出本通知
    

    • 点击本地通知,会自动打开app

    • 当用户点击本地推送通知,会自动打开app,这里有2种情况
    • app并没有关闭,一直隐藏在后台
      让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
    
    • app已经被关闭(进程已死)
      启动app,启动完毕会调用AppDelegate的下面方法
    //launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    

    • 具体代码如下:(要注意iOS8之后,需要获取用户授权)

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        //授权
        if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0) {
            /**
             *  iOS8注册授权,设置本地通知模式
             */
            /*
             UIUserNotificationTypeNone    = 0,      不发出通知
             UIUserNotificationTypeBadge   = 1 << 0, 改变应用程序图标右上角的数字
             UIUserNotificationTypeSound   = 1 << 1, 播放音效
             UIUserNotificationTypeAlert   = 1 << 2, 是否运行显示横幅
             */
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound |UIUserNotificationTypeAlert  categories:nil];
            /**
             *  然后注册通知
             */
            [application registerUserNotificationSettings:settings];
        }
        /**
         *  如果程序正常启动(冷启动),launchOptions的参数为null
         *  如果程序非正常启动(热启动),launchOptions的参数时有值的
         */
        if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
            NSLog(@"%@",launchOptions);
    
            [self jumpToSession];
        }
        return YES;
    }
    
    /**
     *  该方法,接收到本地通知执行,如果应用程序在前台,依然收到通知,但不应该执行跳转;
        如果应用程序在后台,收到通知,点击通知,执行跳转代码;
        应用程序被关闭,收到通知,但不能执行跳转代码,(需要在didFinishLaunchingWithOptions方法中执行)
     *
     */
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
        NSLog(@"收到本地通知");
        [application setApplicationIconBadgeNumber:0];
        
        if (application.applicationState == UIApplicationStateActive) {
            return;
        }else if (application.applicationState == UIApplicationStateInactive)
        {
            [self jumpToSession];
        }else if(application.applicationState == UIApplicationStateBackground){
            /**
             *  不会执行该代码
             */
            NSLog(@"在后台");
        }
    }
    
    - (void)jumpToSession
    {
        NSLog(@"执行跳转页面");
        UIView *redView = [[UIView alloc]init];
        redView.backgroundColor = [UIColor redColor];
        redView.frame = CGRectMake(100, 100, 100, 100);
        [self.window.rootViewController.view addSubview:redView];
    
        
    }
    
    
    • 远程推送请看下一篇内容

    • 发现错误请各位多多指正,谢谢.

    相关文章

      网友评论

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

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