K1.12.2permission capability mismatch设计

同一权限在不同平台覆盖的能力范围并不完全一致

别名: 权限范围差异 · scoped photos · while using location

概念解释

对话框里都写「定位」「相册」「蓝牙」,并不表示各系统打开的是同一组硬件与数据。同名权限的能力范围是平台定义的:一系统的定位曾经连带扫描附近 Wi-Fi 与蓝牙设备,另一系统把定位、蓝牙、附近设备拆成三道门;一系统的相册是整个图库,另一系统可以只许「添加照片」或只许挑中的那几张。把名称对齐就当能力对齐,会在某一端多要,在另一端默默做不到。这条只谈覆盖范围的错位,不谈申请发生在安装时还是使用时,不谈拒了还能不能再问,也不谈跨平台框架如何把状态枚举成同一个值。

机制

权限是操作系统的访问控制表,表项按系统版本演进,不按产品经理的功能清单演进。相册在一个系统上是读全部媒体,在另一个系统上拆成读图、读视频、有限选择、仅追加;「允许」在两端点下去,一端能做智能分类,一端只能写入新拍的那张。定位的「使用期间」与「始终」、「精确」与「模糊」也不是每个系统都有同一套档位:缺档位的那一端,应用要么升级到更宽的权限,要么功能降级。蓝牙更典型:为了扫附近配件,一端要蓝牙权限,一端历史上走定位。从后者移植到前者的产品继续要定位,人看到的是「手电筒应用要我的位置」,拒绝之后配件功能坏了,双方都觉得对方不合理。范围错位发生在授权表,不发生在文案润色。

边界

同一系统的连续大版本之间范围也会改(图库从全量改为选择器),不能把「Android 对 iOS」当成唯一的错位轴,还要按已声明支持的最低版本画表。仅在一端存在的能力(某系统的跟踪透明度、某系统的文件树访问)没有可对齐的同名项,应对齐的是用户任务,不是权限名字。WebView 或小程序里再套一层宿主权限,覆盖范围是宿主的,不是内嵌页自己的清单。桌面把文件系统当默认可用时,不存在「相册权限」这种表项,移动端的范围表不能直接贴过去。

怎么落地

  • 为每个用户任务列一张平台能力表:完成「扫附近配件」「从相册选一张图」在各系统分别要哪些权限、各权限实际打开哪些 API,禁止只写一个权限名。
  • 某一端范围更窄时,把功能降到该端实际打开的能力(用系统选择器而不是遍历图库),不要用名称相同的宽权限去补。
  • 验证:在两个系统上授予同名的「相册」或「定位」后,列出产品实际调用的 API。若一端在遍历全库而另一端只拿到选择器返回的单项,范围已经分叉——界面说明和失败提示必须按端分开写。

延伸

  • 同组K1.12.1 权限申请时机可以是安装时集中授予也可以是使用时按需申请 · K1.12.3 用户拒绝权限后能否再次请求的规则因平台而异 · K1.12.4 跨平台应用不能假设某权限在所有系统上行为一致
  • 相邻O2.01 权限提示的信息设计
  • 站内检索permission scope · while using location · limited photo library

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/K1.12.2