Home 什麼?iOS 12 不需使用者授權就能收到推播通知(Swift)
Post
Cancel

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

什麼?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 == .notDetermined 跟 settings.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的用戶還太少🤐

2019–02–06 更新實際應用:

實際應用我已「取消」實作此功能

為什麼?

因為發現在以下情況使用者會被動進入靜音推播模式,要自行手動把所有推播權限(橫幅、聲音、標記)打開

有點尷尬,也就是說使用者如果再詢問通知權限時按否,到設定再打開,那個打開的會只有靜音通知權限;要再請使用者把下方橫幅、聲音、標記都打開有點困難,所以暫時就先取消不使用了。

===

本文首次發表於 Medium ➡️ 前往查看


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

iOS UUID 的那些事 (Swift/iOS ≥ 6)

從 iOS 9 到 iOS 12 推播通知權限狀態處理(Swift)