uni-app h5 iOS 15 拒绝位置权限后 用户再打开位置权限 定位信息不准确
uni-app h5 iOS 15 拒绝位置权限后 用户再打开位置权限 定位信息不准确
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 10.15.3 | HBuilderX |
产品分类:uniapp/H5
示例代码:
uni.getLocation({
type: 'gcj02',
altitude: true,
})
操作步骤:
API:uni.getLocation
浏览器环境:ios 15 Safari
发生场景:
- 调用api
- 弹窗权限弹窗,点击弹窗拒绝
- 在safari设置中,位置权限改为请求或允许
- 再次调用api
- 获取的位置不准确,是ip定位的结果。
tips: - 已开通位置服务
- 第四步的时候没有弹出,位置权限授权框
- 安卓中重复此步骤可以正确获取位置
- 使用 官方示例 https://hellouniapp.dcloud.net.cn/ 也会出现此情况,没有正确获取位置
- 在微信中打开官方示例和我自己的代码,都没有此问题
- 配置了腾讯地图key
疑问:
是否是操作手机,再次开启位置权限的方式不对
预期结果:
正确获取位置信息
实际结果:
位置不准,应该获取的是 IP定位的结果
bug描述:
API:uni.getLocation
浏览器环境:ios 15 Safari
发生场景:
- 调用api
- 弹窗权限弹窗,点击弹窗拒绝
- 在safari设置中,位置权限改为请求或允许
- 再次调用api
- 获取的位置不准确,是ip定位的结果。
tips: - 已开通位置服务
- 第四步的时候没有弹出,位置权限授权框
- 安卓中重复此步骤可以正确获取位置
- 使用 官方示例 https://hellouniapp.dcloud.net.cn/ 也会出现此情况,没有正确获取位置
- 在微信中打开官方示例和我自己的代码,都没有此问题
疑问:
是否是操作手机,再次开启位置权限的方式不对
更多关于uni-app h5 iOS 15 拒绝位置权限后 用户再打开位置权限 定位信息不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已解决,就是操作手机,再次开启位置权限的方式不对。
需要在设置–> 隐私–> 定位服务 --> 找到 safari --> 开启权限
更多关于uni-app h5 iOS 15 拒绝位置权限后 用户再打开位置权限 定位信息不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
附加一个提议,能不能加个参数,区分是否使用ip定位。有的时候需求只需要精准定位,有时也需要没有精准定位就返回IP定位
你好,我也遇到了这个问题。但是我在“设置–> 隐私–> 定位服务”里并没有找到Safari。请问这是什么原因?
这是iOS 15 Safari浏览器的权限管理机制问题。当用户首次拒绝位置权限后,即使后续在系统设置中重新开启,Safari也不会立即重新请求高精度定位,而是默认使用低精度的IP定位。
解决方案:
- 强制重新请求权限:在代码中先调用
uni.authorize明确请求位置权限
uni.authorize({
scope: 'scope.userLocation',
success: () => {
uni.getLocation({
type: 'gcj02',
altitude: true,
})
}
})
- 检查权限状态:调用前先检查当前权限状态
uni.getSetting({
success: (res) => {
if (res.authSetting['scope.userLocation']) {
// 已有权限,直接获取位置
uni.getLocation({...})
} else {
// 无权限,先请求授权
uni.authorize({...})
}
}
})
-
清理Safari缓存:让用户尝试以下操作:
- 关闭Safari所有标签页
- 进入设置 > Safari > 清除历史记录和网站数据
- 重新访问页面
-
使用高精度参数:确保
enableHighAccuracy设置为true
uni.getLocation({
type: 'gcj02',
altitude: true,
enableHighAccuracy: true, // 关键参数
timeout: 10000
})

