ios签名signature失败,刷新页面成功


问题描述:

  每次刚进页面,signature签名失败,但是刷新页面后,显示signature签名成功。 只有ios是这种情况,安卓没有问题。

  原因:

  IOS传入的 signature签名url,必须是首次进入页面的url,后期如果不刷新页面,签名的时候,ios还是要用,第一次进入页面的url 来签名。 安卓传当前页面即可

模式:

下面代码是history模式下,解决ios签名失败,本人亲自尝试,有效。

如果hash模式,url需要传#前面的url内容(没有尝试过,其他博文看到的)

/**
* @Description:  判断IOS,Android系统
* @date: 2021-11-22 13:43:44
*/
export const isAorIM = function () {
    var u = navigator.userAgent
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端
    if (isiOS) {
        return true
    } else if (isAndroid) {
        return false
    }
}
/**
* @Description:  通过config接口注入权限验证配置
* @date: 2021-11-22 13:44:35
*/
import { weChatSign } from '@/api'
import { initWxShare } from '@/utils/wxshare'
export const initShareM = function (type) {
    const parames = {
        userCode: localStorage.getItem('senior-customerList-userCode'),
        url: type === 'ios' ? window.iosInitUrl : location.href  //ios每次传首次进入页面的url, android每次传当前页的url
    }
    console.log('parames', parames)
    weChatSign(parames).then(res => {
        const resData = res.wechatConfig
        initWxShare(resData.appId, resData.timestamp, resData.nonceStr, resData.signature)
    })
}

本来想把iosInitUrl变量放到vuex做统一管理,但是亲自尝试后发现,发现放入vuex中,签名会失败。 直接用window 不会报错。 (不知道什么原因)




此处代码加入mian.js中,每当切换页面,进入页面后,都会触发

router.afterEach((to, from) => { if (isAorIM()) { // ios if (window.iosInitUrl === '' || window.iosInitUrl === undefined) { //如果是ios系统,将首次进入页面的url保存到window中 window.iosInitUrl = window.location.href } initShareM('ios') } else { initShareM('Android') } })

相关