美文网首页
二. 本地推送通知的附加行为

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

作者: 面糊 | 来源:发表于2016-05-29 14:47 被阅读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()
          }

    相关文章

      网友评论

          本文标题:二. 本地推送通知的附加行为

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