uni-app 【报Bug】plus.geolocation.watchPosition 设置 geocode为false后,仍然会继续调用逆地理解析
uni-app 【报Bug】plus.geolocation.watchPosition 设置 geocode为false后,仍然会继续调用逆地理解析
测试过的手机:
线上用户的所有设备
示例代码:
this.watchLocationId = plus.geolocation.watchPosition(function(address) {
console.log('watch', address);
}, function(e) {
console.log(e);
}, {
provider: 'amap',
//是否使用高精度设备,如GPS。默认是true
enableHighAccuracy: true,
//超时时间,单位毫秒,默认为0
//使用设置时间内的缓存数据,单位毫秒
//默认为0,即始终请求新数据
//如设为Infinity,则始终使用缓存数据
maximumAge: 0,
geocode: false, // 禁止解析位置
})
操作步骤:
- 使用上述代码进行调用,调用后异常消耗了逆地理解析次数
预期结果:
- 不消耗逆地理解析次数
实际结果:
- 消耗定位次数时,也消耗了逆地理解析次数
bug描述:
https://www.html5plus.org/doc/zh_cn/geolocation.html#plus.geolocation.PositionOptions geocode: (Boolean 类型 )是否解析地址信息 解析的地址信息保存到Position对象的address、addresses属性中,true表示解析地址信息,false表示不解析地址信息,返回的Position对象的address、addresses属性值为undefined,默认值为true。 如果解析地址信息失败则返回的Position对象的address、addresses属性值为null。
plus.geolocation.watchPosition 按照文档中设置 geocode为false后,仍然会继续调用逆地理解析,导致线上环境的高德API key调用超限,应用停止服务
我在GitHub上查看源码: https://github.com/dcloudio/H5P.Android/blob/765e916e87db5670868257ad1a4d27d996704178/feature/geolocation-amap/src/io/dcloud/js/geolocation/amap/AMapGeoManager.java 发现isGeoCode变量并未影响到mOption.setNeedAddress(boolean)的设置,只在返回结果时判断是否添加地理位置信息。
请紧急处理此BUG!!!
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境版本号 | win 11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.8.12 |
手机系统 | 全部 |
手机厂商 | 华为 |
页面类型 | nvue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
临时可以先使用定时器来解决,先不用Watch。
Plus已经好久没更新了 我们后续排期处理
getCurrentPosition也有这个问题。 使用uni.getLocation是同样调用plus的代码还是另外有一套实现?
在 uni-app
中使用 plus.geolocation.watchPosition
方法时,如果你已经明确设置了 geocode
为 false
,但发现它仍然继续调用逆地理解析(即将地理坐标转换为地址信息),这通常是因为某些配置或代码逻辑上的问题。下面是一个正确的代码示例,展示了如何设置 geocode
为 false
来避免逆地理解析,并附加了一些可能的排查方法。
正确的代码示例
// 监听地理位置变化
const watchId = plus.geolocation.watchPosition(
function(position) {
console.log('Latitude: ' + position.coords.latitude);
console.log('Longitude: ' + position.coords.longitude);
// 此处不会调用逆地理解析,因为没有地址信息输出
},
function(error) {
console.error('Geolocation error: ' + error.message);
},
{
enableHighAccuracy: true, // 是否使用高精度定位,默认为false
timeout: 10000, // 超过10秒后停止定位,默认为无穷大
maximumAge: 0, // 定位结果缓存有效期限,默认0表示缓存无效
geocode: false // 设置为false,不进行逆地理编码
}
);
// 停止监听地理位置变化
// 当不再需要监听位置变化时,调用 clearWatch 方法停止监听
// plus.geolocation.clearWatch(watchId);
排查方法
-
检查配置对象:确保
geocode: false
正确设置在配置对象中,且没有其他代码修改了此配置。 -
控制台输出:在回调函数中添加更多的日志输出,检查是否有其他地方(可能是第三方库或框架)在调用逆地理解析。
-
版本兼容性:检查
uni-app
和相关依赖库的版本,确保没有已知的bug影响geocode
的设置。 -
清理缓存:尝试清理应用缓存或重新安装应用,有时旧的缓存数据可能会导致意外的行为。
-
网络状态:确认设备的网络状态良好,因为逆地理解析依赖于网络请求,虽然
geocode
设置为false
,但网络问题有时可能导致不可预见的行为。
如果上述方法都不能解决问题,可能需要更深入地检查 uni-app
的源码或寻求官方支持,以确定是否有更深层次的bug或设计问题。在实际开发中,保持代码清晰和模块化,有助于快速定位和解决此类问题。