uni-app 【报Bug】plus.geolocation.watchPosition 设置 geocode为false后,仍然会继续调用逆地理解析

发布于 1周前 作者 h691938207 来自 Uni-App

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

Image 1 Image 2


3 回复

临时可以先使用定时器来解决,先不用Watch。 Plus已经好久没更新了 我们后续排期处理


getCurrentPosition也有这个问题。 使用uni.getLocation是同样调用plus的代码还是另外有一套实现?

uni-app 中使用 plus.geolocation.watchPosition 方法时,如果你已经明确设置了 geocodefalse,但发现它仍然继续调用逆地理解析(即将地理坐标转换为地址信息),这通常是因为某些配置或代码逻辑上的问题。下面是一个正确的代码示例,展示了如何设置 geocodefalse 来避免逆地理解析,并附加了一些可能的排查方法。

正确的代码示例

// 监听地理位置变化
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);

排查方法

  1. 检查配置对象:确保 geocode: false 正确设置在配置对象中,且没有其他代码修改了此配置。

  2. 控制台输出:在回调函数中添加更多的日志输出,检查是否有其他地方(可能是第三方库或框架)在调用逆地理解析。

  3. 版本兼容性:检查 uni-app 和相关依赖库的版本,确保没有已知的bug影响 geocode 的设置。

  4. 清理缓存:尝试清理应用缓存或重新安装应用,有时旧的缓存数据可能会导致意外的行为。

  5. 网络状态:确认设备的网络状态良好,因为逆地理解析依赖于网络请求,虽然 geocode 设置为 false,但网络问题有时可能导致不可预见的行为。

如果上述方法都不能解决问题,可能需要更深入地检查 uni-app 的源码或寻求官方支持,以确定是否有更深层次的bug或设计问题。在实际开发中,保持代码清晰和模块化,有助于快速定位和解决此类问题。

回到顶部