前题:项目要求使用uniapp开发H5小程序,打包生成安卓apk,项目中有获取当前定位需求,于是使用了高德地图的定位功能,没打包之前根据高德地图的key是能够获取到定位信息的,打包成apk后就不行了,获取定位直接报错 auth fail:INVALID_USER_SCODE#SHA1AndPackage#...,查了很久,终于解决了,特此记录。
在.vue文件中,获取定位代码如下
uni.getLocation({
type: 'gcj02',
geocode: true,
success: function (res) {
if(res.address && res.address.street) {
this.companyAddress = res.address.street;
}
},
fail:function(res) {
// 根据打印的失败原因对照高德错误码对照表
console.log(res)
}
});
打包后获取定位报错的原因是KEY鉴权失败,检查key绑定的sha1值与apk签名sha1值是否对应(通过高德错误码对照表知道的原因错误码对照表-实用工具-开发指南-Android 定位SDK | 高德地图API),中间过程测试了很多次,这里就从如何申请高德地图的key开始
第一步:登录uniapp开发者后台(DCloud开发者中心),登录后,切换到 应用管理 -> 我的应用 -> 应用列表 -> 找到你正在开发的应用,点击应用名称,页面会切换到你选中的应用的视图,选择”Android云端证书“,我这里已经生成过证书了,如果没有生成的话,点击一下就可以生成应用证书了,点击证书详情,把 ”别名“、”SHA1“等需要的可以先复制下来,也可以后面再查看复制,ps:证书密码就在证书详情弹框下方有个查看证书密码按钮点击查看就能看到,点击一下”证书下载“,把证书下载到你本地。
第二步:从“Android云端证书”tab切换到“各平台信息”tab,这个tab列表会有你的项目信息,需要在这里确定你的应用包名(很重要!!!),可以点击修改信息,因为我打正式包,默认是测试版,所以需要添加正式版的信息,里面需要的三个值从第一步的证书里面来的。
第三步:登录高德开放平台(高德开放平台 | 高德地图API (amap.com)),, 登录后,进入 应用管理 -> 我的应用 -> 创建新应用(右上角),先创建应用,然后页面上会生成一行新的折叠面板,点击右边的添加,输入完必填项后(PackageName就是第二步中设置的应用包名),点击提交后,在应用下面会出现新的一行数据,把这个key复制一下。
第四步:打开HBuilderX, 打开manifest.json, 找到App模块配置,在Geolocation 和 Maps 两项前面打勾,把上一步获取到的key复制进对应的appkey上(注意区分不同平台),这里基本配置就完成了。
第五步:我的项目的先打包成h5,然后创建一个5+项目用于打包安卓,所以在h5的manifest.json和5+项目壳子的manifest.json都需要配置地图信息,将打包好的h5生成的static和index.html文件复制到5+项目壳子中,点击发行 -> 原生App-云打包,这里需要输入第二步中你设置的包名,包名一定要一致,使用自有证书即第一步我们生成的证书信息和证书文件,然后打包即可。
请结合此文章查看,感谢此作者 https://www.cnblogs.com/XavierWang/p/16449791.html