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权限列表页。