本地通知

作者: 明月钓无痕 | 来源:发表于2016-03-02 00:14 被阅读225次

    这里说的通知不是我们平常说的NSNotificationCenter,而是一种推送信息.
    本地推送是在不需要联网的情况下发出的推送通知
    经常用来定时提醒用户,比如说闹钟.
    下面看一下如何使用:
    有三步:

    1. 创建本地通知对象
    2. 设置通知内容
    3. 调用通知
      override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            // 1. 创建本地通知
            let localNote = UILocalNotification()
            
            // 2. 内容
            // 发出通知的时间
            localNote.fireDate = NSDate(timeIntervalSinceNow: 3)
            localNote.alertBody = "这是一条本地通知"
    
            // 重复的频率. 枚举值
            localNote.repeatInterval = .Day
            
            localNote.alertAction = "呵呵"
            // 可以随便写,都会调用LaunchImage图片
            localNote.alertLaunchImage = "haha"
            localNote.alertTitle = "通知"
            // 通知声音 系统的字符串
            localNote.soundName = UILocalNotificationDefaultSoundName
            
            // 设置
            localNote.applicationIconBadgeNumber = 10
            
            // 其他信息,这个可以在代理方法中获取
            localNote.userInfo = ["note" : "haha"]
    
            // 3. 调用    UIApplication.sharedApplication().scheduleLocalNotification(localNote)
        }
    

    注意
    在iOS8以上,需要获取权限,在func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool中设置

     if Double(UIDevice.currentDevice().systemVersion) >= 8.0 {
              // Types可以设置的内容是个枚举值
                let setting = UIUserNotificationSettings(forTypes: [.Badge, .Alert, .Sound], categories: nil)
                application.registerUserNotificationSettings(setting)
                
       }
    

    添加上面代码,在第一次启动应用时会进行选择.


    如果我们需要在点击通知后做某些事情的话,需要在下面的代理方法里面写

        // 当程序进入前台或在前台时,执行该方法
        func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
            debugPrint("接收到通知")
            // 打印的是上面说的 localNote.userInfo
            debugPrint(notification.userInfo)
            // 不是处于前台
            if application.applicationState == .Inactive {
                debugPrint("进行一些事件处理")
            }
        }
    

    但是如果退出了应用,就不会执行上面的代理方法,这时点击通知依然会启动程序,这种情况需要在 didFinishLaunchingWithOptions 方法中获取应用启动方式,如果是

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
            if Double(UIDevice.currentDevice().systemVersion) >= 8.0 {
                
                let setting = UIUserNotificationSettings(forTypes: [.Badge, .Alert, .Sound], categories: nil)
                application.registerUserNotificationSettings(setting)
                
            }
            // 各种打开apple的方式,key是字符串常量,如果正常点击图标启动的话launchOptions是一个空值nil
    // 这里是判断是否是通过本地通知打开
            if ((launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey]) != nil) {
                debugPrint("通过本地通知进入,处理事件") // 打印无效果
    /*
                // 由于重新启动了程序无法验证打印的信息,我们可以通过添加控件进行验证
                let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
                view.backgroundColor = UIColor.redColor()
                window!.rootViewController?.view.addSubview(view)
            }
    */  
            
            return true
        }```
    

    相关文章

      网友评论

        本文标题:本地通知

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