【极光笔记】iOS 15推送新特性初探

1,801 阅读8分钟

前言
北京时间2021年6月8日凌晨1点,苹果召开了WWDC 21大会。在会上发布了新版的iOS 15系统,iOS的主题是Focus, connect, and explore。

有关注的同学应该发现了本次主题其中提到的Focus正是在iOS 15当中新增的关于通知的变化。本篇文章所分享的就是iOS 15中新增的推送特性。

Focus(专注模式)
其实在iOS 15之前也有专注模式,iOS 15的专注模式,其实是当前版本勿扰模式的演进产品。

能看到第一部分就是具体的模式,默认的有个人,勿扰模式,工作,睡眠。其实四种没什么区别就是用名字作为区分,在不同时间选择不同的模式,来给自己带来更好的通知使用体验。我们还可以手动添加专注模式,设置专注模式的名字,图标,以及对应的配置。

我们可以设置在所有设备中共享专注模式,也可以设置哪些App能够访问用户的专注状态,该功能目前仅开放给苹果自己的App,目前笔者还没有发现有代码和设置能够访问该功能。

电话成为了唯一一个可以单独在专注模式上进行全局设置的App,可以在专注模式打开时指定能够接收的电话。

我们点击“个人”进入具体的专注模式,能看到有多个配置。我们可以为某些通讯录成员和App设置一个不受专注模式影响的白名单。

还可以设置是否打开时效性通知(Time Sensitive)接收功能,时效性通知也是iOS 15中提供的一个新的通知特性,我们会在后续的文章中提到。

设置共享专注状态,和刚刚那个全局的设置可以访问专注模式的功能类似,就是作用域不一样了,但是还是和刚刚的问题一样,目前没发现在哪里能够获取到专注模式的状态,推测苹果会在后续的版本中更新(另一种可能是使用getNotificationSettingsWithCompletionHandler接口进行获取,只是获取到的不是专注模式,这个官方地方文档描述确实有点模糊,还不能完全确认)

Interruption level(中断级别)
在iOS 15及更高版本中,人们可以通过指定的消息派发时间和设置专注模式对通知行为进行更加细粒度的调整。派发通知计划允许用户选择是立即接收通知,还是在他们选择的时间段内使用摘要派发通知。专注模式帮助人们在他们定义的时间段内过滤通知,例如睡眠、工作、阅读或驾驶等活动。

人们可以在专注模式中为选择的联系人和应用程序设置白名单以接受通知。

例如,在以工作为中心的环境中,人们可能希望立即收到来自同事、家庭成员和与工作相关的应用程序的消息。人们可能还希望在开启专注模式期间接收所有对时间敏感的通知。对时间敏感的通知包含人们希望立即获得的基本信息。

需要注意的是即使专注模式可能会延迟通知的派发,通知本身也会在到达时立即可用。

为应用程序可以发送的每个通知指定系统定义的中断级别。系统使用中断级别帮助确定何时派发通知;当通信通知到达时,系统使用发送方的配置确定何时派发通知。

系统为非通信通知定义了四个中断级别:

•Passive(被动的)。人们可以在闲暇时查看信息,比如餐厅推荐。
•Active(活动,默认设置)。当信息到达时,人们可能希望知道它,比如他们最喜欢的球队的分数更新。
•Time Sensitive(时间敏感)。直接影响用户并需要他们立即关注的信息,如帐户安全问题或快递信息。
•Critical(重要)。直接影响用户并要求其立即关注的有关个人健康和公共安全的紧急信息。关键通知非常罕见,通常来自政府和公共机构或医疗保健应用程序。使用该中断级别需要申请对应的权限。

四种级别对应的能力如上图。被动和活跃是一样的,时间敏感的级别能够覆盖定时推送功能和专注模式,重要级别的通知甚至能够屏蔽电话和静音设置。

在这个新特性上我们能看到一些苹果历史以来的设计思路,苹果希望开发者能够准确设置每个通知的紧急程度来建立信任。

用户有几种方法来调整他们从你的应用程序接收通知的方式,例如:关闭所有通知。因此在分配中断级别时,必须尽可能现实。我想你不会希望用户觉得你使用了一个高级别的通知去打断他们的工作,但是信息确是一个低级别的信息,这很可能会导致用户关闭你App的通知权限。

当你的应用程序第一次收到时间敏感的通知时,系统会描述这种通知是如何工作的,如果用户不同意这些信息需要立即关注,系统会提供一种关闭通知的方法。

切勿使用时间敏感的中断级别发送营销通知。用户可能已经同意从你的应用程序接收营销通知,但是这样的通知不应该突破专注模式或预定的通知派发设置。

关于中断级别这段有很大一部分是翻译的苹果原文,有兴趣的同学可以看一下。

笔者尝试全链路的去验证下不同中断级别的体验,然而iOS 15刚刚发布,处于早期阶段,在《生成一个远程通知》文档和《发送通知请求到APNs》文档中,暂时没有找到相关资料,因此无法实测。

于是我转换了一个思路,虽然API没有更新,但是代码可能已经更新了,于是我更新了Xcode 13.0 beta版本并查看对应的框架API。

我们可以在<UserNotifications/UserNotifications.h>框架中找到最新的iOS 15相关的代码,在<UserNotifications/UNNotificationContent.h>中我们能看到新的关于中断级别的枚举。

我们看英文描述,在这里能看到被动和活跃中断级别的区别。被动的中断级别不会亮屏和播放推送声音,并且只会加入到通知列表(应该说的是通知中心)中,而活跃的也就是默认的,会立刻被展示并亮屏,播放推送声音。

除此之外,还有对应的新增的属性。

interruptionLevel应该很好理解,就是该推送的中断级别。除此之外还能看到一个属性叫做relevanceScore相关分数,相关分数的高低会影响在通知中心中的排序,这个在WWDC中有一嘴带过,但是在苹果通知导读文档中却没有提到,这个属性应该在APNs的API也能够设置才对。

不想现在就下载Xcode beta版本,但是又想了解最新的API的在官方的iOS文档中也能够看到。

Xcode越来越大了

定时推送摘要
最后在说一下这个定时推送摘要,前面有经常说到一个根据实际派发推送通知的就是这个。

由于官方APNs API没更新的限制,笔者还没有完全搞清楚定时推送摘要的具体逻辑。我们先看一下在iOS 15中的设置部分。

在通知界面增加了一个定时推送摘要的入口,我们打开这个功能,然后根据时间设置一天推送几次摘要,我们需要选择具体的App适应这个配置,默认是全关闭的。比如说我设置了一天4次派发通知摘要,那么在发送通知的时候应该不会立即提示,而是等到摘要的时间才会显示。

但是实际现象是这样的,我发送了一条通知,立即就收到了,然后比如说我在下午5点发的消息,消息被放到了一个新的分类叫做晚上的推送摘要中和预期不太一样,推测可能是因为默认消息类型是活动导致的,可能需要发送被动类型的消息才能触发这个功能。

对于摘要这一块,还有比较多的不确定的东西需要探索。

那么到这里,关于iOS 15上的通知新特性的初探就结束了,笔者在写这篇文章的时候还是觉得目前iOS 15仍处于一个Beta版本的早期阶段,查阅文档发现的部分功能都还处于未完全放开的阶段,按照苹果的习惯在发布GM版本之前应该还有有一些调整,所以该文章中的内容是有被改动的可能性的,请大家还是以最新的iOS 15上能看到的效果为准。

感谢各位阅读😅。文章编写于2021年6月21日,iOS 15第一个Beta版本。