uni-app uni.getLocation 在个别手机上定位出错
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
}
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的,还是会有很多客诉,主要现象是不稳定,我的手机测试呢,又测试不出来,很尴尬。
提供一下appid
回复 江河: 你云打包一次
回复 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.如果时间有要求,可以使用华为提供解决方式,接入华为系统定位。
所以看下来似乎要等高德修复
咨询了高德工程师,说什么在定位钱刷一下wifi的列表,我个人觉得有点扯淡。
回复 DCloud_Android_THB: 是的,同样的应用,其他人都正常定位,只有华为mate60系列用户会时好时坏,已经持续近一个月了
回复 1***@qq.com: 华为mx5同样也不行 出现相应的问题 导致无法定位 客户不满
问下解决了吗 其他正常 就华为mate60用户会概率性出现这个问题
高德sdk的问题,需要等高德修复。
现在我这边不是华为mate60也出现这个问题了,请问怎么解决呢
使用最新版hx
回复 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
或其他日志记录工具来记录错误信息。
通过上述方法,你应该能够排查和解决在个别手机上定位出错的问题。如果问题依旧存在,可能需要更深入地分析设备日志或寻求平台方的支持。