iOS系統的授權邏輯
根據筆者的觀察總結,目前為止網絡上關于產品授權相關的文章大多數都是介紹基于正常流程的用戶體驗層面相關的設計,很少有涉及技術層面的文章。本文為筆者采用不完全歸納法總結分析得出,遍歷與iOS系統授權相關的各種邊界情況。
相比于Android系統,iOS一向以注重保護用戶隱私而著稱,在需要獲取用戶相關隱私權限時都需要用戶手動授權。而且iOS只給開發者一次去征詢授權的機會,在人文層面上做到了尊重用戶。
因此做好iOS應用授權的設計并非易事,作為產品設計者必須熟悉iOS系統關于授權相關的技術文檔,才能確定功能的可行性。不然,脫離了技術的產品設計只能叫做意淫罷了,雖然意淫是個很美的詞。
一、iOS的授權類型
在這些授權中比較特殊有「聯網授權」、「位置服務授權」和「藍牙授權」,其中「聯網授權」最為特殊。因為對于這三種權限來說,即使用戶為應用授權允許,應用也不一定能正常獲取,因為手機針對這三個權限設置有單獨的全局性開關,因此在權限的使用過程中,就會出現多種類型的異常情況組合。
不同于其他權限,「聯網授權」只會在應用首次安裝并打開的時候彈出(當時手機正常聯網),開發者無權配置觸發點。當應用再次安裝的時候,應用會默認選擇之前的授權記錄。
除了「聯網授權」,其他所有的權限在應用每次安裝的時候都有且只有一次主動征詢用戶授權的機會,開發者可以自主配置觸發點。
「聯網授權」的補充說明:
由于工信部出臺了相關規定,要求應用在未經用戶允許的前提下,系統不能授予其使用聯網、獲取定位等功能。因此在iOS10之后,蘋果公司針對中國大陸地區iOS系統專門提供了需要用戶授權「無線網絡與蜂窩數據連接」的彈窗提示,這個功能便享有了中國特供的殊榮。用戶在 iOS ?系統中第一次安裝并打開應用時,會被要求對于是否授予應用聯網權限進行選擇。
此「中國特供」功能出現的異常情況:
很久之前,筆者在安裝某個APP的時候就曾遇到應用無法彈出網絡授權彈窗的情況,在「應用的權限」列表頁也無法找到無線數據這個權限,「使用無限局域網與蜂窩移動的應用」列表頁根本找不到該應用,反復卸載重裝依舊如此,當時被整整困惑了好多天。
之后通過網絡檢索才發現這是此「中國特供」功能推出之后iOS的系統級bug。
原因是iOS沒有向開發者提供類似「位置服務授權」的「請求聯網權限」API,開發者沒法調用這個功能,因而無法確保自己的 App 每次都能彈出請求「請聯網權限」的彈窗。
解決辦法:
- 方法 1:多次退出重進 App,有一定幾率會彈出提示框。
- 方法 2:在「設置 – 蜂窩移動網絡」內打開「無線局域網助理」開關,再進入無法聯網的 App,會彈出提示框。解決之后,就可以關掉助理開關。
- 方法 3:先去設置里隨意關閉一個 App 的聯網權限,然后打開,再進入無法聯網的 App,會彈出提示框。
二、利用deep-link引導用戶再次授權
自從iOS 8開始,app可以在自己的界面中提供deep-link將用戶直接帶去系統設置界面。開發者可以配置觸發點,通過deep-link便可鏈接到「應用的權限」列表頁。
系統級的引導可鏈接到「使用無限局域網與蜂窩移動的應用」列表頁、「定位服務開關」頁面、「藍牙開關」頁面等。
三、聯網授權情況遍歷
1.首次安裝并啟動APP&手機未連接無限局域網或蜂窩移動數據(手機斷網)
在這種情況下,應用無法獲取數據,系統聯網請求授權彈窗將不會彈出。
2.首次安裝并啟動APP&手機連接無限局域網或蜂窩移動數據(手機有網)
在iOS11版本中,蘋果多提供了僅限無限局域網這一選項。
3.手機連接蜂窩移動數據(手機有網)&應用不允許使用無限局域網與蜂窩移動數據
或:手機連接蜂窩移動數據(手機有網)&應用允許使用無限局域網數據
此征詢引導為iOS系統級的引導,開發者無權限調用。并且只有在手機有網的情況下才可以征詢,征詢頻率有限制的,并不是每次請求數據系統都會彈出。
4.手機連接無限局域網數據(手機有網)&應用不允許使用無限局域網與蜂窩移動數據
5.手機斷網
- 手機未連接無限局域網與蜂窩移動數據&應用為允許使用無限局域網與蜂窩移動數據
- 手機未連接無限局域網與蜂窩移動數據&應用為允許使用無限局域網數據
- 手機未連接無限局域網與蜂窩移動數據&應用為不允許使用無限局域網與蜂窩移動數據
以上枚舉了手機無法聯網的情況,在無網情況下iOS無法進行系統級的引導。此時最好的辦法就是:將所有可能的解決方案列舉出來供引導用戶。
四、定位服務授權情況遍歷
1.首次征詢定位服務授權&手機未開啟定位服務開關
(1)手機定位服務的開啟是「位置服務授權」的前置條件。首先,系統會通過默認彈窗引導打開定位服務開關,此彈窗除了APP名稱外不可配置。
(2)在用戶打開定位服務開關的前提下,系統征詢用戶定位服務授權,此彈窗除了APP名稱外可配置說明文字。
2.手機未開啟定位服務開關&應用為永不允許訪問位置信息(默認為永不)
或:手機開啟定位服務開關&應用為永不允許訪問位置信息
應用未獲取訪問位置信息權限包含所述的兩種情況,但應用是無法判斷具體屬于哪一種。根據筆者的觀察統計:大多數應用通過配置彈窗引導用戶到「應用的權限」列表頁引導用戶獲取權限。然而此方法對問題的定位是不準確的,即使跳轉到了「應用的權限」列表頁也無法開啟定位權限,因為手機可能本身未開啟定位服務開關。
特殊的案例:調用系統引導應用(deep-link)到定位服務開關頁面
在筆者體驗的所有用到定位服務權限的應用中,只有滴滴的引導開啟做的最為精確,直接引導至定位服務開關頁面,因此此方法包含了以上兩種情況,即使手機未開啟應用服務開關,用戶也可以在一個頁面完成定位服務權限的獲取。據筆者推測此定位API應該由iOS系統提供。
五、其他隱私權限授權
1.首次征詢授權的時機
若為必要授權,可在應用首次安裝啟動的時候,向用戶征詢。關于如何提高用戶授權的成功率,網上有很過相關的策略,筆者再次不再啰嗦。
除了「聯網授權」、「通知授權」,其他隱私授權得系統征詢彈窗都是可以配置說明文字的。
若為非必要授權,可在具體功能用到該功能的時候,設置對應的觸發點獲取授權彈窗。
2.若用戶拒絕,再次引導用戶再次授權
若在第一次征詢用戶授權的時候被拒,利用iOS提供的deep-link,引導用戶到「應用的權限」列表頁。
以上總結分析,只是筆者通過體驗大量應用+檢索相關資料歸納得出,并非專業的iOS開發者,如有技術冒犯,歡迎拍磚。
本文由@產品范 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自PEXELS,基于CC0協議
很有用!
調用系統引導應用(deep-link)到定位服務開關頁面。我體驗過的滴滴出行和高德地圖會在打開app時,直接彈窗引導跳轉至定位服務開關頁。并且只能有一次的權限調用,后期引導開啟只能跳轉至app權限列表頁。