一、准备工作,申请高德地图key
1、登录高德开放平台(https://lbs.amap.com/)
如果没有账号,需要注册账号;账号注册还需要进一步注册成为开发者
2、进入控制台
3、进入“应用管理-->我的应用”,执行添加操作:
1)获取调试版本的sha1
①F:\jdk\jdk1.8.0_211\bin\keytool -list -v -keystore C:\Users\eddy\.android\debug.keystore
【keytool是jdk自带的工具,具体请指向实际的目录;debug.keystore文件所在目录也请修改成自己机器上实际的目录】
②调试版本keystore的默认密码是:android
③执行结果如下:
2)获取发布版本的sha1
①F:\jdk\jdk1.8.0_211\bin\keytool -list -v -keystore D:\programe\emm\dist\app\build\NK-release.keystore
【keytool是jdk自带的工具,具体请指向实际的目录;NK-release.keystore文件所在目录也请修改成自己机器上实际的目录】
②发布版本keystore的密码是创建NK-release.keystore文件所指定的密码
③执行结果如下:
3)获取PackageName
src-cordova\platforms\android\app\src\main\AndroidManifest.xml 配置文件package属性所对应的值。
将以上三个值分别填入下图中:
4、添加成功后,形成如下结果(得到android平台的key)
重复以上步骤,得到IOS平台的KEY。(如果不需要IOS平台的地图定位,在申请时候可以随便填写sha1等信息,最后也会得到以上的KEY值)【注意:无论你是否有IOS平台地图定位的需求,andrioid、IOS另个平台的KEY都必须在这里申请下来】
【以上的申请的KEY,在所有高德地图的应用中都会用到,所以需要保管好】
二、插件安装
...\src-cordova>cordova plugin add cordova-amap-location --variable ANDROID_KEY=android的key --variable IOS_KEY=ios的key --save
【注意:以上两个variable缺一不可,否则不能成功安装插件】
成功安装后,就可以在目录...\src-cordova\plugins\中多出了一个子目录:cordova-amap-location
三、插件使用
methods: {
getPosition() {
window.plugins.aMapLocationPlugin.getCurrentPosition((response) => {
//成功定位的处理逻辑
console.log(response);
}, (response) => {
//定位失败的处理
});
}
}
这是笔者执行后,Response的结果如下:
{
"locationType":5, 【定位类型:定位失败0、GPS定位结果1、前次定位结果2、缓存定位结果4、Wifi定位结果5、基站定位结果6】
"latitude":32.074172, 【纬度】
"longitude":118.769733, 【经度】
"accuracy":50, 【精度信息,单位:米】
"speed":0, 【速度信息】
"bearing":0, 【方向信息】
"date":"Wed Nov 04 19:56:57 GMT+08:00 2020", 【定位时间】
"address":"江苏省南京市鼓楼区虹桥靠近虹桥", 【地址详情】
"country":"中国", 【国家信息】
"province":"江苏省", 【省信息】
"city":"南京市", 【城市信息】
"district":"鼓楼区", 【城区信息】
"street":"虹桥", 【街道信息】
"streetNum":"200-2号院", 【街道门牌号】
"cityCode":"025", 【城市编码】
"adCode":"320106", 【地区编码】
"poiName":"虹桥", 【POI名称,信息点名称】
"aoiName":"南京工业大学虹桥校区宿舍区" 【AOI名称,多边形名称】
}
【注意,由于笔者是在房间内执行以上程序,所以插件自动采用的是wifi定位方法,误差50米,但据笔者分析坐标,真实误差应该200米以上。不过如果到室外,用GPS定位的话,误差应该会小很多吧】
四、总结
cordova下的定位插件其实有很多:cordova-plugin-geolocation、cordova-plugin-bd-geolocation、cordova-plugin-baidumaplocation、cordova-plugin-geolocation-gaode、cordova-baidu-location、cordova-plugin-amap-location、cordova-amap-location......
注明是cordova百度地图插件、cordova高德地图插件就有好多个,一开始笔者完全就搞晕了,同样的cordova高德地图插件怎么会有这么多个?后来才发现,这些插件并不是官方的,而是一些作者自己封装发布出来的。
在此之前,笔者试过好几个插件,不知道是环境问题,还是插件本身就有问题:
1、cordova-plugin-geolocation,出现“Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)”错误,失败!
2、cordova-plugin-baidumaplocation,执行定位命令没有响应,失败!
3、cordova-plugin-bd-geolocation,速度倒是挺快,执行结果如下,完全就得不到地址和正确的坐标信息,失败!
Position: {"timestamp":1604463557225,"coords":{"latitude":5e-324,"longitude":5e-324,"altitude":5e-324,"accuracy":0,"altitudeAccuracy":0,"heading":-1,"speed":0}}
Extra: {"type":162,"gpsAccuracyStatus":0}
直到用cordova-amap-location时才一次性成功(就是开始申请key时有些小折腾),所以笔者将方法推荐给大家,以减少各位像我一样的重复折腾。
五、后续:补
1、如果执行定位后出现定位失败(response=12),通过查https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/可知,没有给这个应用开放定位权限,因此在移动终端上允许这个应用的定位权限即可。
2、如果执行定位后出现KEY鉴权失败(response=7)【这个坑折腾我好长时间:( 】
以上高德开发平台中的“发布版本安全码SHA1”配置,根据“创建app数字签名证书”如果采用第三种方式进行apk签名,由于数字签名证书采用的是jks文件,而不是本文以上介绍的keystore文件方式。因此“发布版本安全码SHA1”采用如下方式获得:
keytool -list -v -keystore 数字证书文件名.jks
输入创建这个证书时配置的密码,即可得到发布版安全码SHA1。