iOS 12 中的 User Notification (消息分
iOS12中,在用户通知上强化并新增了部分的功能,大致分为以下五类:
- 通知分组
- 通知视图交互优化
- 通知设置细节的设置
- 临时授权
- 重要通知
本文基于之前iOS10时的一篇介绍推送扩展的文章,具体的实现推送等功能不再赘述,本篇着重介绍iOS12中新增内容。
分组
在iOS12以前,用户通知是逐条显示的,随着手机应用已足够丰富,尤其是即时类应用的通知会非常频繁,如聊天类,新闻类的应用,一天,可能几十条上百条的通知,要是有一个喜欢刷屏的朋友~通知栏当场就炸了,以至于需要打开APP才能看到某条被挤下去的重要信息...
所幸的是,在 iOS12 中终于加入了分组功能,可以让开发者将大量的通知加以区分,同时优化了用户端的显示与管理。
默认情况下是根据APP进行分组,开发者可通过设置消息的ThreadIdentifier来进行手动区分。
系统设置中,每个APP都有三种分组风格进行设置(如下图:)
“自动”(默认):优先根据ThreadIdentifier分组,若没有,则根据应用分组。
“按应用”:根据应用分组,且自定义分组就会失效。
“关闭”:使用老式系统中无分组的样式。
概略文本
image概略文本就是分组的一个描述标签,默认为“还有XX个通知”,概略文本的格式可以在进行在初始化Category时通过categorySummaryFormat自定义。
let imageCategory = UNNotificationCategory(identifier: "imageNotificationCategory",
actions: [testAction],
intentIdentifiers: [],
hiddenPreviewsBodyPlaceholder: "新的消息",
**categorySummaryFormat: "还有%u条来自%@的消息",
options: [])
格式化中的 %u 和 %@ 分别对应着NotificationService中的 summaryArgumentCount 与 summaryArgument。
summaryArgumentCount: 还有多少条通知,即总数 -1,一般不会去设置它,由系统管理就好。
summaryArgument: 可以在ServiceExtension中根据业务需要来变更,例如这个分组的类型。
ContentExtension 交互升级
ContentExtension 是用户通知消息UI展示的扩展,主要负责消息在通知栏上的详情展示,在iOS12中苹果放开了展示面板上的交互限制,且可以动态的设置NotificationActions,使得通知栏中具有更多的可操作性。
notificatinoAction 为iOS12中新增的属性,其为当前所有Action的集合,可通过重置其值来动态更改Actions,以实现诸如动态Action,多级菜单的效果。
实现在展示区域交互,需要在 ContentExtension 扩展中的 info.plist 的 NSExtensionAttributes下增加
UNNotificationExtensionUserInteractionEnabled
字段,并设置为YES来打开交互限制,否则还是会保持iOS12之前的限制交互风格。
同时也新增了两个方法用户控制通知的状态:
- performNotificationDefaultAction()
启动APP,并触发APP的通知委托,以此来告知是从哪条通知进来的。 - dismissNotificationContentExtension()
关闭通知,仅关闭,未移除。
(移除的方法为:removeDeliveredNotifications(withIdentifiers:))
例如下方示例中实现了展示区与交互(喜欢按钮),动态更改notificationActions实现二级菜单
image
notificationActions 需要通过扩展调用,如
self.extensionContext?.notificationActions = []
推送细节设置
在iOS12中,用户不仅仅可以在系统设置中对通知消息的展示方式,风格进行设置,还能够进入到应用内提供的页面根据业务需求进行更加详细的设置。
实现方法也很简单,AppDelegate中实现UNUserNotificationCenterDelegate代理的userNotificationCenter(center:notification:) 方法来捕获到用户进入设置的事件,进而再跳转到设置界面。
前提是,在请求权限时(requestAuthorization),加入了通知设置的权限(providesAppNotificationSettings ),否则在系统设置的底部不会出现应用设置一栏。(下图高亮位置)
临时授权
以前,请求获取权限要么在初次进入应用时,要么在初次涉及到通知消息的功能时询问用户给予权限。前者简单粗暴,极易被用户拒绝,后者可能会应为业务场景的复杂度而变得不好维护。
在iOS12中,开发者可以先试用临时授权来进行推送,让用户在之后自行决定是保留推送还是关闭,这样极大的提升了应用的用户体验,也间接性的给予了应用更多的开放性。
实现临时授权只需要在请求权限时(requestAuthorization)加入 .provisional 选项。原本会主动请求权限的提示就不会再显示,可直接获取临时授权。
临时授权的样式与其他已获取授权的通知消息不同,其下方会显示的显示出“保持...”、“关闭” 等提示用户进行权限设置的选项。
重要提醒
重要提醒拥有最高权限,可以忽略勿扰模式,也能发出声音,需要苹果授权才能使用,偏向于医疗健康公共安全等领域。用户也可以单独设置只接受重要提醒,重要提醒的角标是一个红色感叹号。
以上的很多功能,如果APP中的推送功能使用了第三方工具,那么就需要查看相关文档,以第三方工具的所暴露出来的方法为准(例如极光推送就截取了部分方法或参数,以至于当你使用它来管理推送时,在系统中不能拿到回调,)