Notification的用法

作者: IIronMan | 来源:发表于2016-05-26 15:24 被阅读307次

    一、苹果中的通知

    1、广播通知(NSNotificationCenter)

      1)实现一个对象对多个对象的通信
      2)是抽象的,肉眼看不到的
    

    2、推送通知

      1)可以让不在前台运行的app,告知用户app内部发生了什么事情
    
      2)肉眼看看到的
    
      3)设置提示样式
    
         设置 ---- 通知中心  点击任意应用通知  提示样式
    
      4)推送通知有两种
    
         本地通知(Local Notification)
    
         远程通知(Remote Notification)
    

    二、本地推送通知

    1、概念

    • 不需要联网就能发出的推送通知(不需要服务器的支持)

    2、使用场景

    • 常用来定时提醒用户完成一些任务,即使程序被杀死提示照样有,例如:记事本、备忘录等

    3、如何发送出本地通知 (必须要有的5步)(其中5.1和5.2放到Appdelegate.m里面)

    //1.通知对象
    UILocalNotification *local = [[UILocalNotification alloc]init];
    
    //2.通知的时间
    
    local.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    
    //3.通知的内容
    
    local.alertBody = @"你吃饭了吗???";
    
    //4.调度本地通知
    
    [[UIApplication sharedApplication] scheduleLocalNotification:local];
    
    //5.打开通知的设置权限
    
    //5.1获取授权的内容
    
     UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeNone |
          UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    
    //5.2使用Applaction对象授权
    
    [application registerUserNotificationSettings:setting];
    
    • 当然还有一些其他的通知属性如下:(选用上面本地通知的对象local)

    //1.锁屏时的动作标题
    
        local.alertAction = @"来消息了";
    
    //2.设置音效内容(要的是声音的字符串)
    
        local.soundName = @"布谷鸟.caf";
    
        //local.soundName = UILocalNotificationDefaultSoundName //系统默认的声音
    
    //3.设置app图标文字
    
        local.applicationIconBadgeNumber = 99;
    
    //4.还可以帮助设置App启动图片
    
        local.alertLaunchImage = @"图片的名字";
    
    //5.设置通知的时候的附加信息
    
        local.userInfo = @{@"type":@"1",@"hello":@"word"};
    
    //6 取消所有通知
    
        UIApplication *app = [UIApplication sharedApplication];
        [app cancelAllLocalNotifications];
    

    三、监听本地通知点击(一条通知一个附加信息)

    1、点击通知,应用程序进入前台或者在前台时调用,如果程序杀死(也就是移除APP),点击通知信息不执行

     - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    
     } 
    

    例如:

    -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
     {
      //在这里还可以设置进入前台的状态(比如说刚开始的状态时:进入前台)
    if (application.applicationState == UIApplicationStateInactive )
       {                          
           NSLog(@"我是从后台进来的");
       }
    else
          {
             NSLog(@"我是从前台进入的");
          }
      }
    
    • 里面还可以嵌套一个if来判断userinfo通知附件信息里面的一些内容
      例如

      -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
      {
      
       //在这里还可以设置进入前台的状态(比如说刚开始的状态时:进入前台)
      if (application.applicationState == UIApplicationStateInactive ) {
        
        if ([notification.userInfo[@"type"] isEqualToString:@"1"]) {
            
            NSLog(@"跳转所需求的控制器");//type是我的userinfo的里面的信息
        }
        
       }
      
      }
      

      2、如果程序被杀死后还想点击通知信息进入相应界面,需要在下面方法里做相应判断

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

        if(launchOptions){

        UILocalNotification *localNote = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];

        }
        }

    例如 (写到程序启动的方法里面)

    //如果launchOptions是nil,就代表正常启动,如果不为空就代表点击通知的启动 
    if (launchOptions) {
        //得到通知的对象
        UILocalNotification *local = launchOptions[UIApplicationLaunchOptionsAnnotationKey];
        
        if ([local.userInfo[@"type"] isEqualToString:@"1"] ) {
            
            NSLog(@"我是杀死之后进来的");
        }
    }
    

    3、在Appdelegate的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions向window添加试图时,要重写window

    • 重写window只需要3步

      1.创建窗口
      self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
      2.设置窗口根控制器
      self.window.rootViewController = [[ViewController alloc]init];
      3.显示窗口
      [self.window makeKeyAndVisible];
      

    四远程通知

    (一) 远程通知的概念
    1.从远程服务器推送给客户端的通知(需要联网)
    2.又称APNS(Apple Push Notification Services)
    3.为什么需要远程推送通知
    (1):传统获取数据的局限性
    只要用户关闭了app,就无法跟服务器沟通,无法从服务器上获取新的数据内容
    (2)远程推送通知可以解决以上问题:
    不管用户打开还是关闭app,只要联网了,都能接到服务器推送的远程通知
    (二)远程通知使用须知

      所有苹果设备,在联网状态下,都会与苹果的服务器建立长链接
           1)链接
                  1.长连接
    
                  只要联网了,就一直建立链接,服务器给你主动发送信息,可以进行时间校正
    
                  2.短链接
    
                  发送请求并响应就会断开链接,我只求发送请求,服务器才能给我传数据,服务器无法主动给我们发送信息
            2)长连接作用
    
                   时间校准
    
                   系统升级
    
                   查找iPhone
            3)长链接的好处
    
                 数据传输速度快
                 数据保持最新状态
    

    (三)推送通知原理

    简易推送原理
    完整推送原理
          1、发送设备的UDID和应用的Bundle Identifer给APNS服务器
    
          2、经苹果加密生成一个deviceToken,通过devieceToken能找到某个设备上的某个应用程序
    
          3、发送当前用户张三的deviceToken和用户的标志(比如id或qq)给QQ服务器
    
          4、QQ服务器将发送过来的内容存到数据库
    
          5、李四的手机给张三发信息--吃了么,实际是先发送到服务器
    
          6、去数据库查询张三的deviceToken
    
          7、将内容发送给苹果的APNS
    
          8、APNS通过deviceToken找到张三现在的设备,并发送相应信息
    

    (四)、开发iOS程序的推送功能,iOS端需要做的事情

    • 1、向苹果请求获得deviceToken

    • 2、得到苹果返回的deviceToken

    • 3、发送deviceToken给公司的服务器

    • 4、监听用户对通知的点击

    五、调试iOS远程推送功能,必备条件

    • 1、真机

    • 2、调试推送需要的证书文件,

      1)aps_development.cer 
      
      某台电脑就能调试app的推送服务
      
      2)iPhone5_qq.mobileprovision
      
      某台电脑就能利用某台设备调试某个程序
      
    • 3、发布具有推送服务的app

      1)aps_production.cer
      
      如果发布的程序中包含了推送服务,就必须安装这个证书
      
      2)qq.mobileprovison
      
      某台电脑就能发布某个程序

    相关文章

      网友评论

        本文标题:Notification的用法

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