iOS 12 中的 User Notification (消息分

2019-08-06  本文已影响0人  猴子的饼干

iOS12中,在用户通知上强化并新增了部分的功能,大致分为以下五类:

  1. 通知分组
  2. 通知视图交互优化
  3. 通知设置细节的设置
  4. 临时授权
  5. 重要通知

本文基于之前iOS10时的一篇介绍推送扩展的文章,具体的实现推送等功能不再赘述,本篇着重介绍iOS12中新增内容。

分组

在iOS12以前,用户通知是逐条显示的,随着手机应用已足够丰富,尤其是即时类应用的通知会非常频繁,如聊天类,新闻类的应用,一天,可能几十条上百条的通知,要是有一个喜欢刷屏的朋友~通知栏当场就炸了,以至于需要打开APP才能看到某条被挤下去的重要信息...
所幸的是,在 iOS12 中终于加入了分组功能,可以让开发者将大量的通知加以区分,同时优化了用户端的显示与管理。

默认情况下是根据APP进行分组,开发者可通过设置消息的ThreadIdentifier来进行手动区分。
系统设置中,每个APP都有三种分组风格进行设置(如下图:)

image

“自动”(默认):优先根据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之前的限制交互风格。

同时也新增了两个方法用户控制通知的状态:

例如下方示例中实现了展示区与交互(喜欢按钮),动态更改notificationActions实现二级菜单


image

notificationActions 需要通过扩展调用,如

self.extensionContext?.notificationActions = []

推送细节设置

在iOS12中,用户不仅仅可以在系统设置中对通知消息的展示方式,风格进行设置,还能够进入到应用内提供的页面根据业务需求进行更加详细的设置。

实现方法也很简单,AppDelegate中实现UNUserNotificationCenterDelegate代理的userNotificationCenter(center:notification:) 方法来捕获到用户进入设置的事件,进而再跳转到设置界面。

前提是,在请求权限时(requestAuthorization),加入了通知设置的权限(providesAppNotificationSettings ),否则在系统设置的底部不会出现应用设置一栏。(下图高亮位置)

image

临时授权

以前,请求获取权限要么在初次进入应用时,要么在初次涉及到通知消息的功能时询问用户给予权限。前者简单粗暴,极易被用户拒绝,后者可能会应为业务场景的复杂度而变得不好维护。
在iOS12中,开发者可以先试用临时授权来进行推送,让用户在之后自行决定是保留推送还是关闭,这样极大的提升了应用的用户体验,也间接性的给予了应用更多的开放性。

实现临时授权只需要在请求权限时(requestAuthorization)加入 .provisional 选项。原本会主动请求权限的提示就不会再显示,可直接获取临时授权。

临时授权的样式与其他已获取授权的通知消息不同,其下方会显示的显示出“保持...”“关闭” 等提示用户进行权限设置的选项。

重要提醒

重要提醒拥有最高权限,可以忽略勿扰模式,也能发出声音,需要苹果授权才能使用,偏向于医疗健康公共安全等领域。用户也可以单独设置只接受重要提醒,重要提醒的角标是一个红色感叹号。

以上的很多功能,如果APP中的推送功能使用了第三方工具,那么就需要查看相关文档,以第三方工具的所暴露出来的方法为准(例如极光推送就截取了部分方法或参数,以至于当你使用它来管理推送时,在系统中不能拿到回调,)

上一篇下一篇

猜你喜欢

热点阅读