uni-app 手机端定位问题
作者:互联网
主要遇到的问题,app上android无法获取定位信息,ios可以,模拟器上都可以获取定位,H5浏览器中获取定位同样失败
做法:
uni.getLocation({
type: 'wgs84',
geocode: true,
success: function (res) {
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
console.log('位置信息: ' +res.address );
}
});
注意:
H5:在较新的浏览器上,H5 端获取定位信息,要求部署在 https 服务上,本地预览(localhost)仍然可以使用 http 协议。
H5:国产安卓手机上,H5若无法定位,检查手机是否开通位置服务、GPS,ROM是否给该浏览器位置权限、浏览器是否对网页弹出请求给予定位的询问框。
H5:安卓手机在原生App内嵌H5时,无法定位需要原生App处理Webview。
H5:移动端浏览器普遍仅支持GPS定位,在GPS信号弱的地方可能定位失败。
H5:PC 设备使用 Chrome 浏览器的时候,位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败。
H5:使用地图和定位相关需要在腾讯地图开放平台申请密钥,填写在 manifest.json 中。
H5:微信公众号可使用微信js sdk,详见
H5:2.9.9 alpha升级,优化 uni.getLocation 支持通过 IP 定位。默认通过getLocation获取,如果获取失败,备选方案是通过 IP 定位获取,用的是内置公共的key,如果你想正确使用,就填写正常的key。如果你不想使用,就填写错误的key即可。key配置:manifest.json —> H5配置 —> 定位和地图 —> key。
App:Android由于谷歌服务被墙,或者手机上没有GMS,想正常定位就需要向高德等三方服务商申请SDK资质,获取AppKey。否则打包后定位就会不准。云打包时需要在manifest的SDK配置中填写Appkey。在manifest可视化界面有详细申请指南,详见:https://ask.dcloud.net.cn/article/29。离线打包自行在原生工程中配置。注意包名、appkey、证书信息必须匹配。真机运行可以正常定位,是因为真机运行基座使用了DCloud向高德申请的sdk配置,打包后必须由开发者自己申请。如果手机自带GMS且网络环境可以正常访问google定位服务器,此时无需在manifest填写高德定位的sdk配置。
App:
以上注意事项意思是:
1.H5必须https协议
2.app打包后,需要引用高德地图(百度不推荐,百度定位偏差较大),否则无法获取地址信息
3.模拟可以定位,是因为模拟器中集成了高德地图
另外H5端获取地址信息,发现通过getLocation获取的地址信息也没那么准确,故通过getLocation获取到经纬度后,去调用高德的反地理坐标的接口,获取到位置信息
结果:
export function getLocation() {
const that = this
// #ifdef APP-PLUS
plus.geolocation.getCurrentPosition(res => {
uni.setStorageSync('longitude',res.coords.longitude)
uni.setStorageSync('latitude',res.coords.latitude)
uni.setStorageSync('locationCity',res.address.city)
uni.setStorageSync('locationInfo',res)
})
// #endif
// #ifdef H5
uni.getLocation({
type: 'gcj02',
success: function (res) {
uni.setStorageSync('longitude',res.longitude)
uni.setStorageSync('latitude',res.latitude)
let location = res.longitude + ',' + res.latitude
that.$u.api.getPositionCity({location}).then(res => {
if(res.data.status === '1'){
uni.setStorageSync('locationCity',res.data.regeocode.addressComponent.city)
let locationInfo = {
address: {
city: res.data.regeocode.addressComponent.city,
district: res.data.regeocode.addressComponent.district,
poiName: "",
province: res.data.regeocode.addressComponent.province,
street: res.data.regeocode.addressComponent.streetNumber.street,
streetNum: res.data.regeocode.addressComponent.streetNumber.number
},
addresses: res.data.regeocode.formatted_address,
}
uni.setStorageSync('locationInfo',locationInfo)
}
});
}
});
// #endif
}
另外:
andorid高德秘钥参考文章:
查看证书信息
可以使用以下命令查看:
cd到证书目录地址下
keytool -list -v -keystore test.keystore
Enter keystore password: //输入密码,回车
会输出以下格式信息:
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: test
Creation date: 2019-10-28
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Issuer: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Serial number: 7dd12840
Valid from: Fri Jul 26 20:52:56 CST 2019 until: Sun Jul 02 20:52:56 CST 2119
Certificate fingerprints:
MD5: F9:F6:C8:1F:DB:AB:50:14:7D:6F:2C:4F:CE:E6:0A:A5
SHA1: BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7
SHA256: 24:11:7D:E7:36:12:BC:FE:AF:2A:6A:24:BD:04:4F:2E:33:E5:2D:41:96:5F:50:4D:74:17:7F:4F:E2:55:EB:26
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
https://ask.dcloud.net.cn/article/29
ios: bundleID
标签:定位,定位问题,app,地图,H5,res,uni,App 来源: https://blog.csdn.net/Silence_Sep/article/details/119272985