七麦数据专栏

WWDC 18 后,iOS 12 “通知”拓展,开启交互新模式!

2018年06月12日 | 技术干货 | 阅读(12668)

渠道的数量众多,属性千差万别,同一套素材,在不同渠道甚至会表现出天上与地下的差别,如果全渠道覆盖,成本很高,一般公司玩不起,所以,选择出适合自家产品的推广的渠道,就显得十分重要。


iOS 10 新增的 UserNotifications.framework 用一套易用的接口替换了之前版本杂乱的接口,是一次通知接口的大重构。而 iOS 12 则从用户体验的角度为通知带来了诸如通知分类等便捷的新特性, 通知内容扩展也在此次更新中获得了更强的交互能力。本文也从这两个方面对 iOS 12 通知特性的变更进行介绍。


新增特性


1. 应用通知分组( Grouped Notifications )


iOS 12 中同一类型的通知会被合成一个通知组,用户可以通过点击通知组展开组里的所有通知。


分组使用两种分组方式:自动分组( Automatic grouping ) 和线程标识( Thread identifier )。开发者不需要对自动分组做额外的操作,系统会根据 App 的 bundle id 对推送进行分组。如果需要对通知做更细致的分组就需要用上线程标识了。


// 本地通知

let content = UNMutableNotificationContent()

content.title = "New Photo"

content.body = "Jane Doe posted a new photo"


// 自定义标识

content.threadIdentifier = "thread-identifier"


// 远程通知

  "aps" : { 

    "alert" : { 

      "title" : "New Photo",

      "body" : "Jane Doe posted a new photo", 

      "thread-id" : "thread-identifier",

        }

    }

}

用户可以在通知管理页面对通知分组进行管理:

  • 自动( Automatic )

  • 按应用( By App )

  • 关闭( Off )注:如果用户选择了按应用分组,系统会无视你设定的线程标识只通过 bundle id 对通知进行分组。



2. 通知中心新增通知管理界面


由于现在的用户管理单个应用通知设置的入口太深,iOS 12 推出了全新的推送管理页面以便用户更快捷的操作。



新的通知管理页面中我们可以看到两个明显的按钮:隐式推送( Deliver Quietly )和 关闭( Turn Off ) 。 隐式推送(根据用户行为有时展示为显式推送)是 iOS 12 为方便用户对通知设置的两种便捷模式之一:


  • 隐式推送( Deliver Quietly )隐式推送只会显示在通知中心,不会带有声音提醒,应用角标。



  • 显式推送(Deliver Prominently)显示推送会开启所有的通知选项。



  • 展示管理页面有 3 种方式:

    左滑通知,点击 管理 按钮



  • 入通知详情页面,点击右上角的 更多 按钮



  • 统根据用户行为自动的给出提示,点击 管理 按钮



定义通知设置页面( Custom Settings )


由于新的通知管理页面也支持用户关闭通知提示,App 可以为通知提供更详细的管理页面引导用户关闭部分他们不希望收到的推送而不是关闭所有。当用户点击通知设置页面对应的按钮时,iOS 12 提供了新的代理方法获取这个事件并处理。 注:代理中 notification 参数是个 optional ,当用户从设置页面点击管理通知时这个参数会是 nil 。


import UIKit

import UserNotifications


class AppDelegate: UIApplicationDelegate, UNUserNotificationCenterDelegate { 


 func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification? ) {


    }


}



3. 无需用户授权也能给用户推送的新机制:临时授权( Provisional Authorization )


iOS 12 提供了一种新的通知授权机制:临时授权。这种机制不会给用户授权的弹窗而直接尝试给用户推送,需要注意的是临时授权推送的消息只会以隐式推送的方式展示给用户。



在代码中我们只需要设置参数 provisional 就能使用这种机制。


let notificationCenter = UNUserNotificationCenter.current()


notificationCenter.requestAuthorization(options:[.badge, .sound, .alert, .provisional]) {


}


4. 勿扰模式下依然可以收到的通知:重要提醒( Critical Alerts )


当我们在开会或者参与一些很重要的活动时,通常会开启勿扰模式或者关闭铃声,但这个操作有可能会让我们错过一些关键的通知。 iOS 12 中加入的重要提醒能够无视勿扰模式和铃声开关的限制,收到这类通知时会伴随一个系统或 App 设定的提示音。需要推送重要提醒的应用需要前往developer.apple.com/contact/req… 获得授权。


注:所谓的重要提醒是指那些需要用户即刻做出反应的通知,例如与医疗和健康相关的通知,与家庭安全相关的通知,与公共安全相关的通知等。

通知设置页面重要提醒的开关区别于普通的通知开关



统允许只接收重要提醒



在代码中我们需要设置参数 criticalAlert ,用户会看到单独的重要提醒授权


let notificationCenter = UNUserNotificationCenter.current()


notificationCenter.requestAuthorization(options:[.badge, .sound, .alert, .criticalAlert]) {


}



推送重要提醒通知和普通通知的区别在于提示音


// 本地重要提醒

let content = UNMutableNotificationContent()

content.title = "WARNING: LOW BLOOD SUGAR"

content.body = "Glucose level at 57."

content.categoryIdentifier = "low-glucose—