授权机制,是手机操作系统安全机制中的一部分,在开发应用时需要用到各种各样的手机系统权限。那在我们的 APP 中,它的授权该如何设计,才能让用户同意授权,或者不反感授权呢?
本文大纲图:
一、认识授权
1. 什么是授权
授权机制,是手机操作系统安全机制中的一部分,在开发应用时需要用到各种各样的手机系统权限。
一般来说,在操作系统中权限会被分类,有些权限级别较低,应用只需在开发时声明即可使用;而与用户有关的权限级别都非常高,需要用户亲自授权才可以。
我们的产品中的功能经常会涉及到这些权限,为了能使应用正常使用,从而给用户带来更好的体验,我们希望用户都能授予我们相关权限。
2. 需要用户授权的权限有哪些
iOS 需要用户授权的权限有下面两种。
涉及到用户隐私的权限:
系统服务权限:
- 无线网络与蜂窝数据(iOS10以后加入,中国大陆特有的权限)
- 通知权限
- VPN
- 键盘
两种权限的区别:
涉及到用户隐私的授权弹窗中,可以添加简短的自定义的向用户解释说明的语句;而系统服务权限弹窗不可以添加说明,有系统的固定提示语。
注意:
- iOS 应用需要使用 iCloud 服务时,如果用户已经在 iPhone 上登录了 iCloud,则不需要用户授权可以直接使用。
- 使用 TouchID,FaceID 也不需要用户授权,可以直接在应用中开启。
Android 中需要用户授权的权限:
Android6.0 后有普通权限和危险权限之分,需要用户授权的权限是危险权限。危险权限共有9个权限组,每个权限组又包括若干子项,在授权时只要用户对一个权限组的任意一个子项授权,则整个权限组都被视为授权。
9个权限组分别为:日历、相机、通讯录、定位、麦克风(用于录音)、电话(一般用于读取本机识别码)、传感器 SMS(短信)、存储。
iOS 与 Android 权限的区别:
在 iOS 和 Android 中对不同的权限需不需要用户授权,划分不一样。
比如:iOS 中最常见的通知权限和网络权限,都需要用户授权才能使用;而这两项权限在 Android 中则不需要用户授权,所以 Android 手机总是有很多弹窗,还有相册权限在 Android 中,也是不需要授权的。
具体两者有何区别,可以结合上面给出的图自行对照,总的对比下来感觉 iOS 对于用户的保护是更到位的。
要注意的是,像我们刚才所说的网络访问和通知权限,并没有在 Android 列表中列出,但这不代表 Android 中没有这两个权限,只是不需要用户授权而已。
知道了 iOS 和 Android 的权限区别后,我们在设计时就知道同一项权限,需不需要针对两个系统分别做设计了。
3. 常用授权
- 第一梯队:网络,通知,位置。
- 第二梯队:通讯录,相册,相机,麦克风等。
Android 和 iOS 的常用授权都一样,只不过 Android 不需要网络和通知权限,不需要授权相册。
4. iOS 和 Android 在设计授权时的区别
在 Android 中所有的系统授权弹窗,都是不能添加说明的;而在 iOS 中涉及到用户隐私的权限,在请求授权时都可以添加简单的说明。
看似区别不大,但是对于用户的体验来说,iOS 显然更胜一筹。
Android 的系统授权框可以出现多次,第一次用户进入应用后,如果没有授权给应用的话,那么下次当用户再次进入应用时,应用还可以调用系统授权框,让用户授权。
在 iOS 中系统授权框自始自终只会出现一次,如果用户点击不允许授权,则以后只能通过给用户提供去设置按钮,让用户自行打开权限开关。
使用系统授权框让用户授权的好处:
通过系统提示框让用户授权,用户只用点击一下就可以授权成功,而通过去设置去开启权限步骤,会需要用户经过两三个步骤才能开启,比较繁琐。
如果没有让用户在第一次授权成功,以后让用户授权成功的可能性更低,所以我们需要珍惜第一次机会,争取让用户一次性授权成功。
虽然 Android 可以在下次用户进入应用时,再次调用系统授权框,可是如果用户第一次都不给你授权,以后又凭什么给你呢?
所以不管是 iOS 还是 Android,在第一次弹窗出现时,拿到用户的授权都是非常重要的。
Android 阵营中不同手机厂商的系统,在授权时的机制都不一样。
比如:作为 Android 系统危险权限的存储权限,在 oppo 的 ColorOS 系统中就是向所有应用开放的,不用通过用户的授权,还有弹窗弹出次数的限制等。
在 oppo 中竟然可以一直给用户弹出授权框,知道授权成功为止,如果进一步为了用户体验的提高,我们可以为不同的手机厂商做定制化处理。
本文中按照适合大部分安卓手机的情况做介绍。
5. 为什么要让用户给我们授权
我们设计的应用中,往往一些功能需要用户给予相应权限,才能正常运行,这样才能为用户正常服务,给用户带来良好的体验。
6. 用户授权过程中存在的问题
- 很多应用,会向用户申请一些与功能关系不大的权限,导致用户对所有软件的信任度很低。
- 应用拿到通知权限以后为所欲为,经常向用户发一些广告,没用的信息,骚扰用户。
- 应用在向用户申请权限的时候,没有说清楚需要权限做什么用。
这些因素导致了我们真正需要一些权限的时候,用户不再信任我们,导致我们软件中的正常功能获取不到权限,不能为用户提供良好的体验。
二、如何针对授权做设计
第一步:确定应用中需要用到哪些权限
梳理一遍应用中的功能,或者和开发沟通,确定我们都需要哪些系统权限,我们需要做到下面两点:
- 确定这些权限确实需要,不去获取多余的权限。
- 确定哪些要为 iOS 设计和哪些要为 Android 设计,还是都要设计。
第二步:针对每一个权限做下列设计
1. 设定系统弹窗弹出时机
在第一次打开应用时申请权限的劣势:
- 用户对应用的信任感在一开始是最低的。
- 一开始缺乏关联场景,用户不知道你要授权干什么。
接下来看看什么样的权限,应该放在第一次打开应用的时候去申请?
第一次打开应用
网络权限(Android 不用设计):
在进入时获取网络权限,这没什么好说的,没有网络权限我们什么也搞不了,直接调用系统授权框即可。
通知权限(Android 不用设计):
这里我的建议就是,对于那些有过硬理由的通讯类应用来说,是可以在一开始请求获取通知权限的;对于没有过硬理由的应用来说,尽量找出那些用户需要用到通知服务的场景,在那时再弹出授权框。
原因是刚才说到了,在一开始去请求授权有两个劣势,但是对于那种有过硬理由的应用来说,不在一开始申请到的话,会对应用有比较大的影响。
而第二个问题对于这种应用来说不用担心,对于没有过硬理由的应用来说,不申请到通知权限也不影响主要功能,所以没必要冒风险在一开始去申请。且等到用户遇到了需要被提醒的场景,再弹出授权框,肯定比一开始没有关联场景去申请要强得多。
没有就会影响到正常使用的权限:
比如:对于照相类应用,如果在一开始没有拿到相机权限,那么进入应用后就会是黑屏,所以拍照权限就应该放到一开始去获取。
注意:对于这种应用来说,获取相机权限就够了,相册权限也不要放到一开始去获取。
再举个例子:百度云网盘在第一次打开时,也会提示你授予通讯录权限,为什么呢?因为百度云要帮你把通讯录信息同步到网盘中,如果不给权限的话,就没法同步。当然你也可以选择不同步通讯录,所以也会在一开始去向用户申请。
使用到相关功能时
刚才我们已经解决了,哪些功能需要放到第一次打开应用的时候去申请。那么除了这些权限,剩下的就是属于在用户使用到相关功能的时候再去申请的权限了。
这些权限大部分都和授权场景有比较强的关联性,放在特定的授权场景触发是更好的选择。但这里也不是说,放在后面弹出弹窗的权限,一定都有比较强的场景关联性。
最主要的是,如果你没有过硬的理由放在前面弹出,那就放在后面弹出吧。
对于这类权限,这时候我们需要做一件事——找出需要用到这些权限的所有功能的触发点。
比如:对于相机权限,那么触发场景有可能是拍照,有可能是扫一扫,触发点就是点击拍照按钮的那一刻,点击扫一扫按钮的那一刻,在这些触发点中,都要能触发授权弹窗。
2. 是否需要 pre-permission
什么是 pre-permission
pre-permission 简单说就是预授权,在系统授权弹窗出现以前,先弹出我们的自定义弹窗,甚至是页面。我们可以用我们的自定义弹窗,来测试用户是否想给我们