一、微信首次分享,安卓可以分享成功,但是ios下,签名失效
确认基本配置没有错之后(具体配置请查看官方文档),发现是URL导致的签名失效。
苹果在微信中浏览器机制和安卓不同,有IOS缓存问题、和IOS对单页面的优化问题,安卓进行页面跳转分享时会刷新当前的url,而苹果不会,苹果是通过历史记录进来的,不会刷新url所以会导致签名失败
在跳转去分享页面时,不要使用$router.push({ path: ‘分享页URL’})
方法,使用window.location.href=‘分享页URL’
二、二次分享签名无效
首次分享成功后,在进行二次分享的时候ios
又报了签名无效,最后发现还是URL的错。
由于二次分享后的URL上带上了多余的参数?from=singlemessage&isappinstalled=0
,wx.config
在获取签名的时候使用的url
跟服务器签名所使用的url
不一致,导致签名无效。
具体办法是,截取URL上多余的部分
//根据字段看网址是否拼接&字符串
getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
},
var from = _self.getQueryString('from');
var appinstall =_self.getQueryString('appinstall');
var isappinstalled =_self.getQueryString('isappinstalled');
var sec = _self.getQueryString('sec');
var timekey = _self.getQueryString('timekey');
var code = _self.getQueryString('code'); //判断加上code是为了防止无限刷新
var state = _self.getQueryString('state');
var url = location.href;
if(from || appinstall || isappinstalled || sec || timekey || code || state){//假如拼接上了
url = window.location.href.split('?')[0];
}
if (window.entryUrl == undefined) {
window.entryUrl = location.href;
}
export function isAndroid () {
var u = navigator.userAgent
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
if (isAndroid) {
return true
} else {
return false
}
}
获取签名的时候的URL:url: isAndroid() ? url : window.entryUrl