android权限描述文字无需用户可见文案,只需在manifest.json的distribute.android.permissions中声明标准xml权限字符串,如"",不可重复配置于其他废弃路径。

uni-app 的定位权限描述文字不能只写在 manifest.json 里,必须按平台分层配置,且 iOS 和 Android 的字段位置、格式、生效逻辑完全不同——漏掉任一层,真机上都会静默失败。
Android 权限描述文字写在哪?
Android 不需要「用户可见的描述文案」,它依赖的是 manifest.json 中 distribute.android.permissions 里声明的 XML 权限字符串本身。系统弹窗文案由 ROM 厂商决定(比如小米/华为会用自己的提示语),你无法控制。
但必须确保这个数组里包含标准格式的权限声明:
["<uses-permission android:name='\"android.permission.ACCESS_FINE_LOCATION\"/'>"]</uses-permission>- 不能写成对象,不能混入
ACCESS_COARSE_LOCATION—— 两者同时声明会导致部分安卓机型(尤其 OPPO、vivo)直接拒绝定位请求 - 不要在
app-plus.permissions或app-plus.modules.Maps.permissions下重复配置,这些路径已废弃或仅用于旧版 HBuilderX 兼容
iOS 的描述文案必须填在 plist 字段里
iOS 系统级弹窗的提示文字,完全取决于 manifest.json 中 distribute.ios.plist 下的两个键值:
-
NSLocationWhenInUseUsageDescription:对应「使用期间允许」,值必须是中文字符串,例如"用于查找附近的服务网点" -
NSLocationAlwaysAndWhenInUseUsageDescription:若需后台定位(如运动类 App),才需同时填此项,否则留空即可 - 这两个字段的值会被直接透传给系统,空值、null、纯空格或英文都会导致审核被拒或弹窗不显示
- 注意:不是
mp-weixin或permission.scope.userLocation.desc,那些只对小程序生效
为什么 uni.authorize 的 desc 在 App 端完全无效?
uni.authorize({ scope: 'scope.userLocation', desc: 'xxx' }) 中的 desc 参数在 App 端会被忽略——因为 uni.authorize 在 App 平台底层不走原生权限 API,它只是个兼容层壳子。
真实触发弹窗的是:
- Android:
plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION']) - iOS:
plus.ios.requestPermission('location') - 这两者都不接受 desc 参数;它们的文案来源只可能是上面说的 AndroidManifest 声明或 iOS plist 配置
- 所以你在 JS 里写的任何
desc,在 App 打包后都起不到作用
最容易被忽略的一点:HBuilderX 调试时,plus.* API 不会触发真实弹窗,也不会读取 plist 配置——必须真机运行才能验证描述文案是否生效。模拟器和调试基座都不行。











