美文网首页
iOS 12 中的 User Notification (消息分

iOS 12 中的 User Notification (消息分

作者: 猴子的饼干 | 来源:发表于2019-08-06 17:13 被阅读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之前的限制交互风格。

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

    • performNotificationDefaultAction()
      启动APP,并触发APP的通知委托,以此来告知是从哪条通知进来的。
    • dismissNotificationContentExtension()
      关闭通知,仅关闭,未移除。
      (移除的方法为:removeDeliveredNotifications(withIdentifiers:))

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


    image

    notificationActions 需要通过扩展调用,如

    self.extensionContext?.notificationActions = []
    

    推送细节设置

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

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

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

    image

    临时授权

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

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

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

    重要提醒

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

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

    相关文章

      网友评论

          本文标题:iOS 12 中的 User Notification (消息分

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