uni-app uni.getLocation 在个别手机上定位出错

发布于 1周前 作者 vueper 来自 uni-app

uni-app uni.getLocation 在个别手机上定位出错

产品分类

uniapp/App

开发环境信息

项目 信息
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 12.6.7
HBuilderX类型 正式
HBuilderX版本号 3.98
手机系统 Android
手机系统版本号 Android 14
手机厂商 华为
手机机型 Mate 60 pro
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码

uni.getLocation({  
    type: platform === "ios" ? "wgs84" : "gcj02",  
    success: res => {  
        if (platform === 'android') {  
            const data = transformFromGCJToWGS(parseFloat(res.latitude), parseFloat(res.longitude))  
            console.log('data', data)  
            res.latitude = data.latitude  
            res.longitude = data.longitude                        
        }  
        console.log(res)  
    },  
    fail: res => {  
        console.log(res)  
        log.writeLog(`定位失败:${JSON.stringify(res)}`)   
    }  
})

操作步骤

预期结果

定位正常

实际结果

定位异常 频繁出现

bug描述

用户反应在华为mate60pro定位频繁出现定位失败的情况,同一时间同一地点高德地图定位正常。报错信息如下:

{
    "errMsg": "getLocation:fail [geolocation:6]定位结果错误 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:#id:Ybzk4ZGViYmVpZjMzNmZoZDY3ZzQ4NzcyZWZiMmJjLFpXRm1hdHZpMndBREFDYzBSN21mSnRIVA==#csid:69c12a0eb89d4c60aec953a33819dd17location faile retype: rdesc:106#0601#pm111011",
    "errCode": 4,
    "code": 4
}

80 回复

HBuilderX 4.08.2024040123 已修复。新版更新了高德的SDK,但出现Mate60后续设备定位失败的问题。


离线sdk啥时候更新

没有解决啊。在高德工单里面提问了,说是确实有问题。在下个版本更新。

回复 z***@sapdg.cn: 所以是高德地图的问题吗?

还是没解决,上架谷歌商店被拒绝。谷歌提示: “用户数据”政策:违反“用户数据”政策,AMap com.amap.api:3dmap:请考虑将 SDK 升级到符合政策规定的版本(如果您的 SDK 提供方有提供)或移除该 SDK。

现在还没有解决吗

我们的app客户也反馈了,华为mate60的确实无法定位,这是严重bug。

感谢反馈,在报错的时候打印一下latitude,和longtitude看看

都报错了,没这两个值,成功才有。

回复 z***@sapdg.cn: 更新到最新版试试看

同样遇到这个问题,请问解决了吗

都遇到这个问题,请修复下,谢谢

同样遇到这样的问题一直未解决,终于看到可以解决了,赶紧测试看下

更新完HbuilderX4.08后 华为Mate 60 pro(手机系统版本4.0.0.162、4.0.0.165、4.0.0)还是定位报错
{“errMsg”:“getLocation:fail [geolocation:6]定位结果错误 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:#id:Sb2dnYWxsamtmZmFhMTI3NWYyOGNlMjg3MzY4NGQ2LA==#csid:7e614016e5694812bbe32fc7547c710dlocation faile retype: rdesc:78#0601#pm111011”,“errCode”:4,“code”:4}

安卓手机我在调试是没问题的,发布线上后,下载依旧定位错误,iOS同样问题,暂时无法解决。

我这边使用mate60 4.0.0.132版本测试,可以正常使用,你appid方便发我下么

下载了最新的4.08了,其他安卓手机正常,华为mate60依然报错无法定位,奇怪的是定位相关的代码没动过,之前打包的版本可以定位,新打包的版本不行

我这边也是一样,最近发布新版本后,定位各种不正常,key什么的都没变。Mate60pro直接不能定位,无解中…

这个bug还是存在,更新到最新4.08了,mate60pro一样还是定位不了。

只有mate60pro不正常?

回复 DCloud_Android_THB: 可以看下我报的Bug。

回复 h***@qq.com: 请重新打个包,提供一下appid。

回复 DCloud_Android_THB: https://ask.dcloud.net.cn/question/189521 最近我打包很多次,Android的,还是会有很多客诉,主要现象是不稳定,我的手机测试呢,又测试不出来,很尴尬。

我更新了还是报getLocation:fail [geolocation:6]定位结果错误 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:#id:Sb2NjODZobDZnZjY2NzY0ZDgyYmRiODY1ZTdmYTFmLA==#csid:048ff58c0b8d4075a84cd35059109802location faile retype: rdesc:101#0601#pm111111,目前版本是4.08,从昨天开始打包的apk定位就失败了

提供一下appid

回复 DCloud_Android_THB: UNIFCA36FD

回复 江河: 你云打包一次

回复 DCloud_Android_THB: 还是一样的错误

回复 江河: 我是要看你的打包信息,你今天打包的都是安心打包,我看不了

回复 DCloud_Android_THB: 好的,我刚换了,打包了一次

回复 江河: 你留一下qq

回复 DCloud_Android_THB: 2816819536

回复 江河: 搜不到你

回复 DCloud_Android_THB: 重新试试,不好意思

一样的问题,4.08的基座。mate60就是偶发这个问题,一会儿可以,一会儿报错。可以提供解决方案吗?客户一直在投诉。

升级到alpha版本试试

回复 HRK_01: 也试了 alpha版本 还是不行

客户反应定位问题时好时坏,更新最新版本也没办法解决,于是向高德地图提工单提问,高德地图客服回复如下:
您好,根据日志和您错误码来看,说明您现在设备所处环境的定位源数据(含盖基站、wifi、GPS等)均无法提供可靠的信息计算的地理位置。 您可以通过如下方式进行优化: 定位优化: 1.setOnceLocationLatest(boolean isOnceLocationLatest) 2.setGpsFirst(boolean isGpsFirst)
技术手册地址: https://amappc.cn-hangzhou.oss-pub.aliyun-inc.com/lbs/static/unzip/Android_Location_Doc/com/amap/api/location/AMapLocationClientOption.html#setGpsFirst-boolean- 特殊原因: 由于华为mate60后续的机型不再对安卓层透出基站信息,会导致高德仅基站定位时,频繁触发定位失败的情况。 解决方式: 1.等待高德后续版本修复 2.如果时间有要求,可以使用华为提供解决方式,接入华为系统定位。

所以看下来似乎要等高德修复

回复 1***@qq.com: 你的mate60用户 才会存在么?

咨询了高德工程师,说什么在定位钱刷一下wifi的列表,我个人觉得有点扯淡。

回复 DCloud_Android_THB: 是的,同样的应用,其他人都正常定位,只有华为mate60系列用户会时好时坏,已经持续近一个月了

回复 1***@qq.com: 华为mx5同样也不行 出现相应的问题 导致无法定位 客户不满

问下解决了吗 其他正常 就华为mate60用户会概率性出现这个问题

高德sdk的问题,需要等高德修复。

现在我这边不是华为mate60也出现这个问题了,请问怎么解决呢

回复 DCloud_Android_THB: 4.13还是4.08

回复 2***@qq.com: 4.08

回复 Francis8192: 使用的就是4.08,现在不管是安卓还是ios都会出这个问题

有解决吗?试了其中一个机型,也是华为mate60, 情况一:打开wifi开关(实际没wifi可连,使用的数据上网)时,不能定位。 情况二:关闭wifi开关,使用数据上网,可以定位。
Hbuilder X 版本: 4.15

情况三:打开WIFI开关,连接到WIFI,并且WIFI实际网络可用,可以定位。 所以,应该是打开WIFI,GPS就是以WIFI优先尝试定位的。

回复 3***@qq.com: 应该还是高德SDK的问题,或者是UNI官方对接SDK问题,只是猜测。

回复 Francis8192: 反正现在也不知道怎么解决了,只能等。大佬们有好的方法或者绕过这个的方法贴出来分享下哈

回复 3***@qq.com: 目前没有,再高德官方提了工单,说什么高版本的华为手机就是有这个问题,目前没有解决方案。

回复 Francis8192: 定位问题用小程序替代App是我目前的办法。

回复 Francis8192: 好的,谢谢

华为Mate60,更新后异常。 开启WIFI,有可用网络时,定位正常;若无网络,定位失败。 关闭WIFI,使用流量,网络不太稳定时,同样定位失败,或长时间不返回状态。网络稳定时,可正常定位。 请继续修复。 HBX版本:4.15 HarmonyOS:4.2.0

同样的问题,华为Pura70,华为Mate 60 Pro 怎么解决,等高德SDK修复吗?

更新一下问题的进度:
4.08发版更新了高德sdk以解决审核问题,但存在mate60等设备无法正常定位的问题(高德官方已确定),需要等待高德官方的更新,或者有强需求的开发者使用腾讯定位插件临时过渡 https://ext.dcloud.net.cn/plugin?id=14569

高德修复后会第一时间更新HBuilderX 版本吗?还是会这里回复,我们有客户等着修复时间

高德地图回复说:定位SDK版本为4.6.5可以兼容华为部分机型定位失败的问题,请问HBuilder会及时更新吗?

这几天就会更新,请关注。

回复 DCloud_Android_THB: 赞

回复 DCloud_Android_THB: 赞

回复 DCloud_Android_THB: 今天更新不?

回复 DCloud_Android_THB: 还没更新吗

回复 DCloud_Android_THB: 请问什么时候更新到最新 SDK 华为部分手机还是会定位失败

回复 l***@163.com: 4.18已更新

回复 DCloud_Android_THB: 正式版的4.18版本什么时候发布呢?

回复 做白日梦的包子: 可以先使用alpha,如果不着急最近也要转正式了。

回复 DCloud_Android_THB: 正式版还不发部的么

回复 DCloud_Android_THB: 正式版什么时候发呢

回复 DCloud_Android_THB: 正式版本什么时候发呢

回复 q***@163.com: 正式版已经更新。

请问华为Mate60及后续设备定位失败问题(高德地图) 什么时候更新到正式版本呢?

现在的正式版已经解决

现在部分机型获取定位失败还是没有解决吗??? 还是有个别客户反馈获取不了定位信息的问题

解决了,定位的逻辑有改动造成的。另外没使用地图就不要开加载地图的sdk和配置

在uni-app中使用uni.getLocation获取用户位置信息时,如果在个别手机上出现定位出错的情况,通常可能涉及权限问题、设备兼容性、定位服务配置等多个方面。以下是一些可能的解决方案和代码示例,帮助你排查和解决问题。

1. 检查并请求定位权限

首先,确保你的应用已经正确请求了定位权限。在uni-app中,你可以使用uni.authorize方法来检查并请求权限。

uni.authorize({
    scope: 'scope.userLocation',
    success() {
        // 用户已授权
        getLocation();
    },
    fail() {
        // 用户未授权
        uni.showModal({
            title: '提示',
            content: '需要您的授权才能获取位置信息',
            success(res) {
                if (res.confirm) {
                    // 引导用户去设置中授权
                    uni.openSetting({
                        success(settingRes) {
                            if (settingRes.authSetting['scope.userLocation']) {
                                // 用户重新授权后
                                getLocation();
                            } else {
                                // 用户未授权
                                uni.showToast({
                                    title: '授权失败',
                                    icon: 'none'
                                });
                            }
                        }
                    });
                } else if (res.cancel) {
                    // 用户取消
                    uni.showToast({
                        title: '取消授权',
                        icon: 'none'
                    });
                }
            }
        });
    }
});

function getLocation() {
    uni.getLocation({
        type: 'gcj02', // 返回可以用于`uni.openLocation`的经纬度
        success(res) {
            console.log('位置信息:', res);
        },
        fail(err) {
            console.error('定位失败:', err);
        }
    });
}

2. 考虑设备兼容性

不同手机品牌和系统版本可能对定位服务的支持有所不同。你可以尝试在不同的设备和系统版本上测试定位功能,以确认是否是设备兼容性问题。

3. 定位服务配置

确保你的应用已经在manifest.json中配置了必要的权限,特别是定位权限。

"mp-weixin": {
    "requiredPrivateInfos": ["getUserInfo", "getLocation"]
}

注意:上述配置是针对微信小程序的,其他平台可能有所不同。

4. 调试和日志

在定位失败时,记录详细的错误信息,这有助于你定位问题。可以使用console.error或其他日志记录工具来记录错误信息。

通过上述方法,你应该能够排查和解决在个别手机上定位出错的问题。如果问题依旧存在,可能需要更深入地分析设备日志或寻求平台方的支持。

回到顶部