Post

什么?iOS 12 不需使用者授权就能收到推播通知(Swift)

UserNotifications Provisional Authorization 临时权限、iOS 12 静音通知介绍

什么?iOS 12 不需使用者授权就能收到推播通知(Swift)

Click here to view the English version of this article.

點擊這裡查看本文章正體中文版本。

基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。

文章目录


什么?iOS 12 不需使用者授权就能传送推播通知(Swift) — (2019–02–06 更新)

UserNotifications Provisional Authorization 临时权限、iOS 12 静音通知介绍

MurMur……

前阵子在改善APP推播通知允许及点击率过低问题,做了些优化调整;最初版的时候体验非常差,APP 安装完一启动就直接跳「APP想要传送通知」的询问视窗;想当然而关闭率非常高,根据前一篇使用 Notification Service Extension 统计通知实际显示数,推测按允许推播的使用者只有大约10%.

目前调整新安装引导流程、配合介面优化将询问通知视窗的跳出时机调整如下:

[结婚吧APP](https://itunes.apple.com/tw/app/%E7%B5%90%E5%A9%9A%E5%90%A7-%E4%B8%8D%E6%89%BE%E6%9C%80%E8%B2%B4-%E5%8F%AA%E6%89%BE%E6%9C%80%E5%B0%8D/id1356057329?ls=1&mt=8){:target="_blank"}

结婚吧APP

如果使用者还在犹豫或想使用看看再决定要不要接收通知,可按右上角「略过」,避免一开始因对APP还不熟悉而按下「不允许」造成之后也无法再询问一去不复返的结果。

进入正题

在做上面这个优化项目时发现 UserNotifications iOS 12 中新增一项 .provisional 权限,翻成白话就是临时的通知权限, 不用跳询问通知视窗取得允许通知权限就能对使用者发送推播通知(静音通知) ,实际效果跟限制我们接著看下去。

如何要求临时通知权限?

1
2
3
4
5
6
7
8
9
10
if #available(iOS 12.0, *) {
    let center = UNUserNotificationCenter.current()
    let permissiones:UNAuthorizationOptions = [.badge, .alert, .sound, .provisional]
    // 可以只要求临时权限.provisional,或是顺便先要求所有要用的权限XD
    // 都不会触发显示询问通知视窗
    
    center.requestAuthorization(options: permissiones) { (granted, error) in
        print(granted)
    }
}

我们将以上程式加入 AppDelegate didFinishLaunchingWithOptions 然后开启APP,就会发现没有跳出询问通知视窗;这时我们去 设定 查看 APP通知设定

(图一) 取得静音通知权限

(图一) 取得静音通知权限

我们就这样默默地取得了静音通知权限🏆

在程式判断当前推播通知权限的部分新增 authorizationStatus .provisional 项目 (仅iOS 12之后):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if #available(iOS 10.0, *) {
    UNUserNotificationCenter.current().getNotificationSettings { (settings) in
        if settings.authorizationStatus == .authorized {
            //允许
        } else if settings.authorizationStatus == .denied {
            //不允许
        } else if settings.authorizationStatus == .notDetermined {
            //没问过
        } else if #available(iOS 12.0, *) {
            if settings.authorizationStatus == .provisional {
                //目前是临时权限
            }
        }
    }
}

请注意! 如果你有针对当前通知权限状态做判断, settings.authorizationStatus == .notDeterminedsettings.authorizationStatus == .provisional

都是可以再跳出通知询问视窗问使用者允不允许接收通知的

静音通知能干嘛?推播如何显示?

先来张图整理一下静音通知会显示的时机:

可以看到如果是静音推播通知,APP在背景状态下收到通知时 不会跳出横幅、不会有声音提示、不能标记、不会出现在锁定画面,只会出现在手机解锁状态下下拉的通知中心之中

可以看到您的发送的推播通知,并且会自动聚合成一个分类

点击展开后使用者可选择:

此展开的询问视窗只会出现在「临时权限」时静音推播之下

此展开的询问视窗只会出现在「临时权限」时静音推播之下

  1. 要「继续」接收推播 — 「传送重要通知」: 通知权限就全开了!通知权限就全开了!通知权限就全开了! 真的很重要所以讲三次,这时候前面程式码要求权限那段一并要求所有权限的效果就相当显著了。 或维持接收静音通知

  2. 「关闭」 — 「关闭所有通知」点击后完全关闭推播通知(含静音通知)。

附注:要怎么手动把现有的APP调成静音通知?

静音通知是iOS 12对通知优化推出的新设定与临时权限无关,只不过是程式那端拿到临时权限就能发静音通知;针对APP的通知要设成静音也很简单,方法之一就是去「设定」-「通知」- 找到APP 将其所有权限都关闭只留「通知中心」(如图ㄧ)即是静音通知. 或是收到APP通知时重压/长压展开后,点击右上角「…」选择传送静音通知亦同:

有了临时权限在之后触发跳出询问通知视窗时:

要求通知权限的部分拿掉 .provisional 就能依然正常询问使用者要不要允许接收通知:

1
2
3
4
5
6
7
if #available(iOS 10.0, *) {
    let center = UNUserNotificationCenter.current()
    let permissiones:UNAuthorizationOptions = [.badge, .alert, .sound]
    center.requestAuthorization(options: permissiones) { (granted, error) in
        print(granted)
    }
}

按「允许」取得所有通知权限、按「不允许」关闭所有通知权限(含本来取得的静音通知权限)

整体流程如下:

总结:

iOS 12的这项通知贴心优化,让使用者跟开发者之间对通知功能更容易达搭起互动的桥梁,能尽量避免一去不复返关闭通知的状况。

对使用者来说,往往跳询问通知视窗时不知该按下允许还是拒绝因为我们不知道开发者会传什么样的通知给我们,可能是广告亦可能是重要消息,未知的事物是可怕的,所以大部分的人都会先保守按下拒绝。

对开发者来说,我们精心准备了许多项目包含重要消息要推送给使用者知道,但就因上述问题而被使用者屏蔽,我们花费心思设计的文案就这样白费了!

此功能可让开发者把握使用者刚安装APP时的机会,设计好推播流程、内容,对使用者优先推送感兴趣项目,增加使用者对此APP通知的认识度,并追踪推播点击率,在适当的时机再触发询问使用者要不要接收通知。

虽然能曝光的地方只有 通知中心 但有曝光有机会;换个角度想,我们是使用者的话,没按允许通知,APP如果能传一堆有横幅+有声音+还出现在解锁画面的通知给我,应该会觉得非常干扰恼人(隔壁阵营就是XD),苹果这个做法则是在使用者与开发者之间取得了平衡。

目前的问题大概就是….iOS 12的用户还太少🤐

延伸阅读

有任何问题及指教欢迎 与我联络


Buy me a beer

本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。

Improve this page on Github.

This post is licensed under CC BY 4.0 by the author.