权限的目的是保护用户隐私,那么在何时以及用什么方式请求用户权限会是比较合适的?本文将详细介绍Android的运行时权限模型,并展示设计一个UX来请求你的应用程序所需的权限,希望对你有所启发。
从Android 6.0开始,没有在安装时请求所有权限,而是引入了运行时权限模型,开发者可以控制应用何时以及如何请求权限。这如同你想邀某人出去约会,过早、过频繁或以错误的方式对你来说并不好。
本文我将详细介绍Android的运行时权限模型,并向你展示如何设计一个UX来请求你的应用程序所需的权限。权限的目的是保护用户的隐私,但当你请求权限时,你是在要求用户放弃一点隐私,因此,你需要提供明确且平等的利益以换取访问。运行时权限允许你在用户更了解你请求权限的原因和授予权限的好处时选择合适的时间请求权限。Android实现它们的方式使得以正确的方式请求它们变得十分重要。
运行时权限模型有利于保护用户的隐私,当你的应用程序请求权限时,Android会显示一个对话框让用户接受或拒绝它,第一次请求权限时对话框不会显示“不再询问”复选框,只会在用户至少一次拒绝权限请求后显示它,你可以检查之前是否被拒绝过,并明智的决定在何时提供更多教育。
从Android 11开始,如果用户在使用应用的过程中多次拒绝某项特定的权限,那么在你的应用再次请求该权限时,用户将不会看到系统权限对话框。该操作表示用户希望“不再询问”。
你无需过度防御,例如在实际请求权限之前你始终通过预许可(预授权)来衡量用户授予权限的可能性,本质上是请求两次,这种双重提示可能是不必要且烦人的,你可以通过在正确的时间以正确的方式询问来达到同样的效果。
Material Design分解了在两个维度上请求权限的不同方法。首先权限对你的应用程序的运行有多重要?其次,你请求它的原因有多清晰?根据这两个因素,建议你采用不同的方法来请求权限。
图片来源:Material Design
一、预先请求权限(Ask up-front)
如果某项权限对应用程序运行至关重要,并且显而易见为什么需要请求它。例如日历应用,拒绝日历权限会使应用程序无法运行,并且用户显然知道日历应用的用途以及请求日历权限的原因,因此不需要用任何不必要的解释来打扰用户,只需在用户首次启动应用时立即请求它即可。
预先请求权限
二、预先教育(Educate up-front)
如果某项权限对应用至关重要,但请求它的原因不是很清晰。例如信贷应用,为了准确评估用户的信贷资格、偿还能力和防范反欺诈,通讯录权限、通话记录权限、位置权限对于风控而言非常重要,建议请求权限之前对用户进行教育。
预先教育
三、使用场景中请求权限(Ask in context)
如果应用中的某项次要功能需要权限,但请求它的原因很清晰,建议你在使用场景中请求权限。例如笔记应用允许用户使用语音或音频创建笔记,那么很明显为什么此功能需要麦克风权限,无需过早的请求它,以免用户负担过重,最好等到用户尝试使用该功能时,因为用户更有可能允许符合其预期的权限请求。
使用场景中请求权限
四、结合使用场景进行教育(Educate in context)
如果应用中的某项次要功能需要权限,并且请求他的原因不是很清晰,建议你结合使用场景进行教育。例如笔记应用允许用户与朋友协作,那么请求联系人权限可能是合理的,但它不是显而易见的,当用户调用该功能时,解释应用获得联系人权限后可为用户提供哪些好处,比如自动填充邮件地址,然后才请求联系人权限让用户授予它。
结合使用场景进行教育
五、处理权限请求遭拒情况
通过使用正确的方法,用户应该清楚应用请求权限的原因以及应用获得权限后可以为他们提供哪些好处。然而,这并不意味着用户一定会授予权限。如果用户拒绝了权限请求,建议采用以下做法:
- 在应用界面中突出显示因为没有获得特定权限而受限的功能所在的具体部分,例如在原本用于显示该功能的结果或数据的位置显示一条消息,让用户知道因缺少权限而无法使用该功能,帮助用户在权限和功能之间建立心理联系。
- 不要阻止界面显示,不要全屏警告消息,让用户根本无法继续使用应用。即使在权限请求遭拒后,应用也应尽可能提供最佳的用户体验。例如即使麦克风使用权限请求遭拒,仍应全面提高文本功能的易用性。
- 用户可能已经选中了“不再询问“复选框,应用可能会在用户未看到权限请求对话框的情况下受到拒绝,此时应用应该提供一个链接,链接到设备设置中用户可以打开权限的具体位置。
六、尽量减少权限请求
在应用中声明权限之前,请先考虑是否需要这样做,或者是否有替代方法可以在应用中支持该功能。因为如果应用声明权限,那么每当用户使用需要运行时权限的功能时,应用便不得不中断用户的操作,请求相应权限。然后,用户必须做出决定。如果用户不能理解您的应用为何请求特定权限,可能就会拒绝授予该权限,甚至卸载应用。下面介绍几个可以在不声明任何权限的情况下实现的用例:
1. 拍摄照片/录制视频
Android为应用提供了相互通信的功能,让你可以将任务委托给其他应用。例如,如果你希望允许用拍照,但它不是应用的核心部分,可以考虑使用Intent请求相机应用拍摄照片并将其分享给你的应用,这样就不需要CAMERA权限。
2. 自动输入动态短信验证码
双因素身份验证流程中,动态短信验证码作为第二校验因素时,使用SMS Retriever API(短信检索器)可以让应用自动执行用户身份验证,不需要用户手动输入验证码,不需要READ_SMS权限。
以上就是Android运行时权限模型和请求权限的一些方法,你可以针对何时以及如何请求权限设计完美的流程,从而最大程度的提高用户授予权限的可能性。