关于微信二次分享,自定义分享参数不生效问题

项目场景:

h5的一个分享活动的落地页,有邀请人和被 邀请人的关系,所以在第一个邀请人的分享链接上,要加上当前邀请人的信息参数


问题描述

在a分享给b之后,然后a打开和b的聊天记录,然后点击刚刚分享的卡片,在去分享的时候,设置的分享参数信息就失效了,在ios上刷新一下就好了,安卓无问题,(b打开刚刚分享的卡片一样不行,自定义的分享参数没生效,提示失败)

在这里插入图片描述
提示的文案是
updateAppMessageShareData:the permission value is offline verifying


原因分析:

知道ios有问题,安卓正常就完成了 一大半了,参考了一些大佬的文章,
因为我们现在都是用的vue spa的模式,然后用的history模式
从A页面跳转到B页面时,由于是使用vue-router切换,都是操作浏览器历史记录,所以ios端微信浏览器锁定的url的还是A页面的url。
引用之前作者的结论是下面这个——但是这不是我的问题所在

vue IOS 微信分享签名失败,二次刷新后就能成功的BUG
问题就出在:你所请求的url签名地址和浏览器执行jweixin-1.x.x.js时锁定的地址 不一致、不一致、不一致。
你当前请求的可能是url1或url2,而此时微信锁定的地址仍然是进入A页面时的url(因为在进入A页面是加载并执行了jweixin-1.x.x.js, 而路由变化A到B时,并没有再次执行jxinwei-1.x.x.js)。
所以问题就发生了,但是你再刷新一下,jweixin-1.x.x.js重新执行,此时微信浏览器锁定的url就是你当前刷新的url地址了,所以签名又成功了。

主要是因为:
【IOS】:ios微信端,路由变化时,微信认为SPA的url是不变的。
【Android】:android微信端,路由变化时,SPA的url是会变的(官方在安卓6.2版本,才对SPA变化作了支持)
所以,发起签名的url必须是微信锁定的url。

👆上面的文章给了我很好的思路,于是排查自己的项目问题

因为的这边后台需要的是一个对象字符串
所以在分享地址上,我添加了一个编码后的对象字符串,想着后续在登录页面时,其它同事可以根据这个形式直接复用,不需要在修改登录页面的接口,在登录页面判断有 registerChannel参数时,会把这个参数带到登陆注册的接口

let registerChannel = JSON.stringify({
    channelName: 'redPackage',
    recommendUserUcode: this.userInfo.userUcode,
})
registerChannel = encodeURIComponent(registerChannel)
const { origin, pathname } = window.location
this.shareData = {
    title: '盛夏消暑礼,登录有惊喜!',
    desc: '8888元消暑现金狂撒。',
    imgUrl: 'https://wd-appdownload.oss-cn-beijing.aliyuncs.com/c-h5-fe/activity/v1.5.4hongbao/wdsongli.png',
    link: `${origin}${pathname}?registerChannel=${registerChannel}&share=true`,
}

问题的关键就在这个地方,在ios中,第一次进来后 记录的地址是这个
在这里插入图片描述
然后在获取微信配置签名传递的url是这个
在这里插入图片描述
见证奇迹的时候要到了,它👵的这俩地址竟然不一样(如果之前没有看过上面的那个文章,还真找不到)
在这里插入图片描述
就是这个一个逗号 在刚进来的时候,是被编码了,然后等开始配置分享的时候,又给解码了,然后ios的微信,记录的还是一开始的那个地址,这就出现了问题根本原因


解决方案:

在项目的app文件中记录一下当前的url路径,存储到本地,然后判断是不是ios,如果是的话,取本地的缓存地址

let isIOS = function() {
       var isIphone = navigator.userAgent.includes('iPhone');
       var isIpad = navigator.userAgent.includes('iPad');
       return isIphone || isIpad;
   }
// //获取微信分享配置参数传url不包括#后hash参数,需进行过滤,否则签名会匹配错误
let ourl = window.location.href.split('#')[0];
var shlink = configObj.link || window.location.href.split('#')[0]
if(isIOS()){
       // 解决ios微信内部分享单页面记录初始url,如果用location.href,签名会匹配错误
       ourl = localStorage.getItem('shurl')
       // 解决ios分享链接配置失效问题,分享链接配置时间戳参数——这个加不加都行主要是 ourl
       shlink = shlink +'&timestamp='+ new Date().getTime()
   }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值