原因:
腾讯地图有一个线上坐标系转换接口下线了,之前使用的是其提供的一个免费的坐标转换接口。目前该接口已经无法使用。而uni-app部分功能依赖了这个接口:
- web端的腾讯定位和地图时的uni.getLocation、uni.chooseLocation、uni.onLocationChange
- app端的uni.chooseLocation
方案:
目前问题已经修复,请更新到4.24版
。新版在对坐标进行转换时,使用开发者自己配置的key。
升级后仍报失败的开发者,原因汇总:
- 如果是cli或离线打包,需要配套升级cli和离线sdk。
- manifest中配置好自己的地图厂商key。web和app都需要。一般标准基座正常,自定义基座和打包后异常,都是这个原因
- 确保在地图厂商那里配额足够
- 确保在地图厂商那里有周边服务的权限。否则无法获取周围地址
- web平台确保自己的域名在地图厂商那里正确配置了域名白名单
- app平台确认在地图厂商配置了正确的包名和签名
- app端支持使用wgt更新
地图厂商的商业授权较贵,如需购买,请点击获取优惠。
同时DCloud已经在排查所有涉及到线上接口调用的代码,防止还有其他隐患发生。
===================================
新增内容
自HbuilderX 4.24 更新后,许多开发者可能由于没有正确配置key,导致uni.chooseLocation
依然无法运行
如果你的项目出现如下错误,那么你需要检查是否是key配置错误
这里是已复现的报错信息(一般是无法显示列表):
1、使用标准基座
ios无法直接使用标准基座运行,Android可以
如果你看到下面两种错误,则说明你使用了ios标准基座运行
- [JS Framework] Failed to invoke the event handler of "click" on view (20):TypeError: undefined is not an object (evaluating 'A.name') __ERROR
- [JS Framework] Failed to execute the callback function:null is not an object (evaluating 'this.$refs.nearListLoadmore.resetLoadmore') __ERROR
需要你进行以下操作才可以运行ios标准基座:
iOS 使用 io.dcloud.HBuilder (Bundle ID)重签名HBuilderX基座
2、使用自定义基座
如果你的Android项目报错如下所示,则需要检查配置错误
- 【vue3】reportJSException >>>> exception function:WEEX_CALL_JAVASCRIPT, exception:JavaScript execute error!Uncaught TypeError: Cannot read property 'name' of undefined at doneClick (/__uniappchooselocation.js.nvue:32:14667)
- 【vue2】 {"errMsg":"chooseLocation:fail cancel"} TypeError: Cannot read property 'name' of undefined
如果你的ios项目出现如下报错,则需要检查配置错误
- 【vue3】[JS Framework] Failed to invoke the event handler of "click" on view (292):TypeError: undefined is not an object (evaluating 'A.name') __ERROR
- 【vue2】TypeError: undefined is not an object (evaluating 'e.name') __ERROR
检查自己的配置
注意事项:
1、cli项目(不是通过hbuilderX创建的,即运行时需要通过命令运行的项目),不能直接拖入HbuilderX中进行打包重新运行,需要更新依赖,如果你的错误信息包含:TypeError: Cannot read property 'points' of undefined,则大概率是没有更新。
2、在打自定义基座前,需要确保地图厂商的key已经存在于mainfest,如果修改key需要重新打自定义基座。
3、如果使用公共测试证书,不能直接打包或者使用自定义基座。因为公共测试证书的信息与你自己的地图厂商信息不一致,因此要使用自己的证书(生成方法:在dcloud开发者后台,找到对应的应用可以生成)
高德地图
https://console.amap.com/dev/key/app
Android高德地图需要检查SHA1与PackageName是否与自定义基座和打包后一致
注意:Android在服务现在时,要选择Android平台
ios中高德地图需要检查Bundle ID是否与项目一致
腾讯地图
https://lbs.qq.com/dev/console/application/mine
需要检查sdk处的配置是否正确
腾讯地图需要保证配额,至少要保证下面三个接口有配额
- /ws/geocoder/v1?location=*
- /ws/coord/v1/translate
- /ws/place/v1/search
以下为过期内容:
===================================
在发布新版之前,临时解决方案有两类:
-
不使用uni的这2个有问题的api的转换gcj02坐标功能,直接用系统定位获取wgs84坐标,自行调用任意一家地图厂商的服务器接口进行坐标转换。
-
下载uni-app补丁,升级这2个有问题的api
如下:
- app平台vue3临时解决方案
把附件中的js文件替换到:
HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-app-vite/lib/template/__uniappchooselocation.js
替换后重新打包
app端可以发布wgt升级解决,也可以重新打包升级app。
kdb
还有别的方法吗,这还得打包,官方有不需要重新打包的方案吗
2024-07-19 19:16
kdb
getLocation也是同样的问题,这个文件有用?
2024-07-19 19:17
BigHornet
需要重新打包?
2024-07-19 19:17
BigHornet
有wgt的更新解决方案吗,这样可以快速处理
2024-07-19 19:18
DCloud_UNI_yuhe
回复 7***@qq.com: 解包之后,在apk文件中替换这个文件,apktooles解包
2024-07-19 19:22
kdb
回复 DCloud_UNI_yuhe: 替换之后如何操作
2024-07-19 19:29
2***@qq.com
回复 DCloud_UNI_yuhe: 替换之后如何操作
2024-07-19 19:35
2***@qq.com
替换后重新打包吗
2024-07-19 19:35
DCloud_UNI_yuhe
回复 2***@qq.com: 重新打包试试
2024-07-19 19:37
BigHornet
你这个是本地打包解决方案吗,云打包可以吗,我替换了好像不行,mac 操作系统
2024-07-19 20:00
kdb
回复 DCloud_UNI_yuhe: 有没有不需要重新打包的解决方案呢,最快什么时候有完美的解决方案?
2024-07-19 20:02
BigHornet
回复 BigHornet: 替换后,android 和 ios 重新云打包后还是不行
2024-07-19 20:11
8***@qq.com
getLocation获成jssdk的可以了。选择的还是不行!
2024-07-19 20:14
DCloud_UNI_yuhe
回复 8***@qq.com: 试一下输入文字好使吗
2024-07-19 20:20
8***@qq.com
回复 DCloud_UNI_yuhe: 不好使
2024-07-19 20:24
Harleyx
大佬 你说错了,web端使用的是腾讯地图的话,这两个API都报错uni.getLocation和uni.chooseLocation,
2024-07-20 00:24
Harleyx
回复 Harleyx: 补充一点,还有微信浏览器也没反应
2024-07-20 00:44
DCloud_UNI_GSQ
回复 Harleyx: web 端临时处理方案已更新
2024-07-20 13:36
7***@qq.com
vue3 app项目 替换js文件,重新打自定义基座之后还是无法自动定位,输入框搜索可以
2024-07-20 14:02
l***@sina.com
什么时候有结果,vue3 android, ios
2024-07-20 16:07
BigHornet
有没有技术可以支持一下,我试了3.9.8和最新版本编辑器,替换Vue2两个文件,云打包,真机调试,wgt包都试过了都不行
2024-07-22 10:47
150
回复 7***@qq.com: H5的,直接在web配置,改高德的(公司买的key和安全密钥),就可以了,还是用腾讯逆地址的,会差距五六百米,这方法暂时可以用用,比空白的强
2024-07-22 16:09
恒大拍卖
你好,调试时候可以用chooseLocation 正式版不能用呀
2024-07-23 10:55
DCloud_UNI_yuhe
回复 恒大拍卖: 你好,你先使用标准基座测试一下行不行。
再使用自定义基座运行或者打包,如果不行一般就是key的问题。
2024-07-23 11:17
3***@qq.com
回复 DCloud_UNI_yuhe: ios的云打包的用不了
2024-07-23 11:50
UNIAPP郭
今天更新了HbuilderX,不是一直定位天安门了,但是地址列表一直加载不出来,这是什么原因呢?
2024-07-23 14:10
DCloud_UNI_yuhe
回复 UNIAPP郭: 你检查一下你的key,是否有周边服务的权限
2024-07-23 14:18
那种事情不要哇
大佬,更新之后云打包路径全在报错是什么原因啊,https://ask.dcloud.net.cn/question/195333
2024-07-24 10:57
3***@qq.com
我们这边搞了一个的高德账号大家一起共享 有需要可联系wx: aiyu154
2024-07-24 11:56
UNIAPP郭
回复 DCloud_UNI_yuhe: 这个真的完全修复好了吗?我今天打自定义基座又定到天安门了。4.24 的版本
2024-07-24 14:16
9***@qq.com
这一个 不是很明白 因为我们目前是基于H5的页面 嵌套到APP 里面去 之前是之配置web端 现在APP也需要去配置吗
2024-07-24 14:31
DCloud_UNI_GSQ
回复 9***@qq.com: 这种不需要
2024-07-24 16:06
DCloud_UNI_GSQ
回复 UNIAPP郭: 注意检查key的配置以及厂商后台配置的包名签名是否与你打包的一致
2024-07-24 16:07
9***@qq.com
回复 DCloud_UNI_GSQ: 目前我这边已经HBuilder X的版本 我已经升级到了4.24版
然后我也配置了腾讯地图的key
我调用 uni.chooseLocation 这个方法还是一样的
就是一进来无法获取当前IP定位
也没有下面的列表
然后我发现根本原因就是因为没有办法获取当前位置才没有下下面的列表
搜索功能 都是好的
2024-07-24 16:56
9***@qq.com
回复 DCloud_UNI_GSQ: 还有uni.chooseLocation 获取当前位置那个按钮的事件也失效了 这个是还需要配置什么东西吗
2024-07-24 16:57
DCloud_UNI_GSQ
回复 9***@qq.com: 你说的是web还是app?
2024-07-24 17:19
9***@qq.com
回复 DCloud_UNI_GSQ:
是 H5 然后目前发现 uni.chooseLocation
第一次会请求
https://confinfo.map.qq.com/confinfo?
https://apis.map.qq.com/ws/geocoder/v1/?
再地图页面 等待40多秒 会触发下面这个接口
https://apis.map.qq.com/ws/location/v1/ip?
拿到当前位置的经纬度 再请求 下下面这个接口
https://apis.map.qq.com/ws/geocoder/v1/?
2024-07-24 17:50
9***@qq.com
回复 DCloud_UNI_GSQ: 根本原因就是页面 这个获取当前位置这个接口 https://apis.map.qq.com/ws/location/v1/ip?
等待40多秒才会触发
2024-07-24 17:51
1***@qq.com
app getLocation高德定位可以,搜索附近一直在转圈。配置的key是有周边服务的,app和web都配置了,但是搜索还是一直在转圈了,没有数据返回,标准基座是能获取的,自定义基座不行
2024-07-24 18:29
DCloud_UNI_yuhe
回复 1***@qq.com: 配置的是哪家的key
2024-07-24 19:27
9***@qq.com
回复 DCloud_UNI_yuhe : 腾旭地图
2024-07-25 09:41
f***@163.com
回复 9***@qq.com: 同样的问题,解决了吗?
2024-07-25 10:41
DCloud_UNI_GSQ
回复 9***@qq.com: 这就和转换无关了,说明精准位置获取超时了,你可以换一个设备或者浏览器再试试。
2024-07-25 14:29
jgj_app
为什么安卓地图列表正常,ios 地图列表没有数据,ios 点击完成还报错,https://ask.dcloud.net.cn/question/195570
2024-07-27 16:36
jgj_app
为什么高德 ios 地图跟定位不行啊,安卓正常,也是按照文档配置的 key啊
,请尽快回复,急急
2024-07-29 10:28
1***@qq.com
您好!
已经升级到4.2.4,vue2 使用高德地图,配置了web的key和Android的key,使用uni.chooseLocation的时候,地图显示在天安门,列表一片白,移动地图以后列表可以出现内容,点击定位按钮无反应,报错如下
Gelocation Error: code - 18; message - not support gcj02 at template/__uniappchooselocation.nvue:292
iOS无问题,只有Android有问题,请问如何解决?
2024-07-31 09:29
cere
1、cli项目----TypeError: Cannot read property 'points' of undefined,则大概率是没有更新。
请问更新哪些依赖,更新到多少?
2024-07-31 10:22
DCloud_UNI_yuhe
回复 cere: 更新到最新的
2024-08-01 14:27
3***@qq.com
回复 UNIAPP郭: 解决了吗?我也是
2024-08-09 02:57
1***@163.com
alpha版本的什么时候升级啊
2024-08-12 08:54
l***@126.com
回复 1***@qq.com: 哎,是啊。我也是这样。官方也解决不了,愣说我配置的有错误。。。。。
2024-08-13 14:18
8***@qq.com
使用谷歌地图,选择位置的时候默认位置在天安门,也没有地址列表,只能扒拉地图定位,而且只有一个位置,这是什么原因呢?
2024-08-24 17:19
小傻白一个
回复 9***@qq.com: 问下关于这个问题 你们是怎么解决的
2024-10-26 13:16