问题描述:
项目里需要点击按钮来获取当前地理位置的功能,在微信公众号平台的场合准备利用微信提供的jssdk来去获取当前经纬度。但是现在出现一个可怕的问题是android下的微信端可以正常利用wx.getLocation来取得当前经纬度,但是ios版微信端总是报出invalid signature的错误出来。
使用环境:
(1)小米5 android版本:6.0.1 MXB48T
微信 6.5.4
wx.getLocation可以正常使用
(2)iphone5 ios8.1.3
iphone7 ios10
微信 6.5.4
wx.getLocation调用后出现'invalid signature'
具体调用情况:
上代码(react js)
(1)在父组件挂载完成后,进行getLocation的注册
wxUtil.wxConfig(['hideOptionMenu', 'getLocation'], () => {
wx.hideOptionMenu();
});
wxUtil.wxConfig是包装过的调用wx.config方法
(2)子组件中绑定onClick事件在事件触发时调用wx.getLocation
getLocationAddress() {
if (isWx()) {
console.log('---------------微信端--------------');
var that = this;
wx.getLocation({
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
console.log('微信端获取地理位置');
console.log('longitude:' + longitude);
console.log('latitude:' + latitude);
that.getAdministrativeAreaInfo(longitude, latitude);
},
fail: function(res) {
console.log('未开启定位功能');
console.log(res);
},
cancel: function (res) {
console.log('用户拒绝授权获取地理位置');
}
});
} else {
console.log('---------------M端--------------');
this.getLocationForMobile();
}
},
(3)在android端表现良好,可以通过wx.getLocation获取经纬度,ios端wx.getLocation报出'invalid signature'的错误。
(4)为了验证是否是签名错误,我又删除wx.getLocation这个jssdk api,改用wx.getNetworkType。android端和ios端都可以正常利用该api获取当前网络类型。
ps:(1)中wx.hideOptionMenu的api也没有爆出invalid signature的错误。
(5)为了验证不是因为绑定的访问域的问题(ios10后对于地理定位必须要使用https的请求协议),又用ios版微信访问了微信提供的jssdk api demo。因为微信提供的访问协议是http的,url:http://203.195.235.76/jssdk/
结果可以取得当前的地理位置。
通过以上的实际校验,我彻底懵了,如果是注册有问题签名有问题,为什么只有wx.getLocation报错,而wx.hideOptionMenu和wx.getNetworkType不报错呢?而且如果是签名的问题的话,android版也应该出现相同的问题(我觉得)。
如果是访问协议的问题,那么微信提供的demo也应该出错。但是现在都对不上。所以可能是代码写的和demo写的调用不一致,导致的。
继续验证:
(1)发现demo中wx.getLocation是在wx.ready中的,仔细查看文档,我觉得我的调用方式也没有问题,因为我不是初期化的时候去使用。
(2)但是为了验证,改!
父组件
wxUtil.wxConfig(['hideOptionMenu', 'getLocation'], () => {
wx.ready({
wx.hideOptionMenu();
wx.getLocation({
// todo
});
})
});
子组件中不再调用wx.getLocation而是通过父组件取得的经纬度的值去处理下面的流程
(3)结果还是报错invalid signature,还是ios端。
到此我就无法继续了,因为确实不知道哪个地方错误。有人提出可能是url不完整造成的签名错误(https://segmentfault.com/q/10...。但是我写死了url,最后也是ios端报错。所以在此向各位大神求助。帮我看看到底是什么导致的问题。在此谢过,谢谢各位了!!!!!!!!
今天遇到了同样的问题,还屁颠屁颠的去折腾ssl,看到你说官方demo没问题,顿时看到了希望啊。