二. 本地推送通知的附加行为

2016-05-29  本文已影响33人  面糊

一. application: didReceiveLocalNotification: notification:

  1. 该方法的调用时间
    • 该方法是App接收到通知的时候调用的
    • 如果App在前台的时候接到通知, 会调用此方法执行一些操作, 但是不会有推送通知的提示
    • 如果App在后台的时候接到通知, 那么会在点击通知, App从后台转移到前台的时候调用这个方法
    • 但是, 如果App已经退出了, 那么接到本地通知, 点击通知从后台跳转到前台的时候, 就不会调用这个方法
  2. 该方法的使用注意点
    • 通过application的运行周期属性application.applicationState, 来执行一些操作
    • 当App处于前台的时候, 使用.Active来执行一些操作
    • 当App从前台跳转到后台的时候, 使用.Inactive来执行一些操作
    • 注意, 此方法当App完全退出之后, 不会调用

二. 在申请授权的时候执行额外操作

  1. 为通知创建操作组(categories)

    • 在iOS8.0之后, 如果要使用本地通知, 就必须先注册这个本地通知, 然后才能使用

    • 在注册时, 可以为通知设置很多详细的属性, 其中一个就是通知的操作行为

    • 操作行为, 会在你的App处于后台时, 当他接到通知, 你的通知会多出两个额外的按钮, 这两个按钮就是操作组的action

    • 操作行为可以详细设置为前台触发, 后台触发

    • 操作行为必须有一个组标识, 这样在你发送这个通知的时候, 才能发送出有标识的这个通知

        // 申请通知授权
        func localNotificationAuthority() {
            if #available(iOS 8.0, *) {
                // 创建通知类型
                let typeValue = UIUserNotificationType.Alert.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Sound.rawValue
                let type = UIUserNotificationType(rawValue: typeValue)
                
                // 创建一个操作组
                let category : UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()
                // 设置组标识
                category.identifier = "select"
                
                // 添加组行为
                let action1 = UIMutableUserNotificationAction()
                action1.identifier = "action1"
                action1.title = "action1"
                // 操作行为的环境条件
                // Foreground: 当用户点击了这个行为, 必须进入到前台才能执行
                // Background: 当用户点击了这个行为, 在后台也可以执行
                action1.activationMode = .Foreground
                action1.destructive = false // 通过颜色来标识这个行为
                
                // 创建第二个组行为
                let action2 = UIMutableUserNotificationAction()
                action2.identifier = "action2"
                action2.title = "action2"
                action2.activationMode = .Background
                action2.authenticationRequired = true // 是否在解锁屏幕之后才能执行, 如果activation为前台, 此属性会被忽略
                action2.destructive = true
                // 在iOS9.0之后, 通知是可以绑定一些操作行为的
                if #available(iOS 9.0, *) {
                    action2.behavior = .TextInput
                    action2.parameters = [UIUserNotificationTextInputActionButtonTitleKey: "回复"]
                }
                
                // 创建操作数组
                let actions : [UIUserNotificationAction] = [action1, action2]
                
                // 设置操作组
                // 参数1: 操作行为数组
                // 参数2: 通知行为的上下文, 作用在弹窗的样式
                // Default: 最多可以有四个行为; Minimal: 如果空间不够, 最多只有两个行为
                category.setActions(actions, forContext: UIUserNotificationActionContext.Default)
                
                // 创建操作选项组
                let categories : Set<UIUserNotificationCategory> = [category]
                
                let setting = UIUserNotificationSettings(forTypes: type, categories: categories)
                
                UIApplication.sharedApplication().registerUserNotificationSettings(setting)
            }   
      
  2. 点击操作组会触发的方法

    • 当用户点击了本地通知的某个操作行为时会调用这个方法

    • 可以根据操作的标识, 判断用户点击了哪个按钮, 以做出不同的操作

    • 一定要调用系统提供的回调函数

        // 当用户点击了本地通知的某个行为时调用
        func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {
            
            if identifier == "action1" {
                print("点击了action1")
            } else if identifier == "action2" {
                print("点击了action2")
            }
            
            // 注意要调用系统回调的block
            completionHandler()
        }
上一篇下一篇

猜你喜欢

热点阅读