【Vue】17.vue-router history模式下的微信分享遇到的坑

最近用vue-cli3做微信公众号,使用了hiatory模式,其中也是波折不断,自己也是郁闷了好几天才把问题解决掉。

首先先安装微信js-sdk

npm install weixin-js-sdk --save

然后在哪个页面里面用到微信的js api就把包导入进去

import wx from 'weixin-js-sdk'

基本的配置都好了以后, 我们就来说说微信分享过程中遇到的坑。

1.微信分享遇到的坑1

微信官方文档上有下面一段话:

19.目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题已在Android6.2中修复

在实际的测试和大量真实数据收集后发现,Android4.4+都是支持pushState的,也就是说,没有遇到官方文档所诉的问题。(此番调研后才决定采用histpry模式进行实施的,导致ios下踩了坑)

IOS下遇到的问题:

微信invalid signature签名的问题,安卓下面不会遇到签名的问题,因为IOS版微信打开网页,显示的只是初始网址,其他网址都是从这个网址引申,相当于它提供的,就相当于从百度进其他网站产生的流量百度也要拿流量费一样,相当于以当前网址作为跳板,服务器差不多,这是软件的问题,无法改变,但是并不影响你从其他地方打开这个网页,只需要左上角选择浏览器打开,网址自然会恢复当前该显示的网址,安卓上不会有这一种问题,可以直接获取当前的URL。

解决办法:

就是在第一次进入的时候,把当前的URL存起来,后面每次签名的时候都用这个URL去做签名。这里安卓和ios要做一下区分判断,IOS取第一次进入页面的URL,安卓直接取当前的URL。

      getWxJsSDKInfo() {
        // 权限接口
        if (/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)) {
          this.url = this.$store.getters.getUrl;
          console.log(this.url);
        } else {
          this.url = window.location.href;
          console.log(`url: ${this.url}`);
        }
        getGzhJsSign({url: this.url}).then((response) => {
          const resData = response.data;
          console.log(`getGzhJsSign:${JSON.stringify(resData)}`);
          wx.config({
            debug: false,
            appId: resData.appId,
            timestamp: resData.timestamp,
            nonceStr: resData.noncestr,
            signature: resData.signature,
            jsApiList: ['updateAppMessageShareData',
              'updateTimelineShareData',
              'onMenuShareTimeline',
              'onMenuShareAppMessage'],
          });
        });
        wx.ready(() => {
          this.isWxReady = true;
          console.log('wx js加载成功');
          // wx.checkJsApi({
          //   jsApiList: ['updateAppMessageShareData',
          //     'updateTimelineShareData',
          //     'onMenuShareTimeline',
          //     'onMenuShareAppMessage'],
          //   success(res) {
          //     alert(`checkJsApi :${JSON.stringify(res)}`);
          //   },
          // });
        });
      },

2.微信分享遇到的坑2

自定义的分享写完以后,点击分享以后,还要点击右上角微信自己的分享功能,才能把页面分享出去,也就是说自定义分享要两步,当时就是因为自己不知道还有这一步操作,开启debug模式,又没有报错,微信官方又没有明确的说明,自己也不知道什么原因,所以也是折腾了自己好长时间,后来搞明白以后,跟产品沟通了一下,设计了一个引导页,点击自定义分享按钮以后,引导用户再点击微信的分享功能。

3.微信分享遇到的坑3

分享链接传中文参数的问题

由于微信浏览器对中文进行了编码,所以对于中文参数,要进行处理,不能直接传递中文,要不然就会分享不成功,我这里用的是Base64先对中文进行编码,然后再传参数,但是一定要记得,用参数的时候再解码转回来。

4.微信分享遇到的坑4

js-sdk 1.4.0以上的版本,用新的分享接口,老的分享接口也要写上,否则分享也会报错。

      inviteSpeed() {
        const userInfo = {};
        userInfo.serialNo = this.serialNo;
        userInfo.queryType = Base64.encodeURI(this.queryType);
        userInfo.currentUserName = Base64.encodeURI(this.currentUserName);
        console.log(`reportProcessDetails userInfo ${userInfo}`);
        const that = this;
        wx.updateAppMessageShareData({
          title: `${this.currentUserName}的报告正在生成中,需要您帮加速`,
          desc: '完成加速拿好礼,不容错过哦',
          link: `${envObject.webUrl}/ReportSpeed?applySerialNo=${userInfo.serialNo}&queryType=${userInfo.queryType}¤tUserName=${userInfo.currentUserName}`,
          imgUrl: 'https://cmt.bdxiaodai.com/cmGzh/img/report_speed_erweima.8acc5583.png',
          success() {
            that.isShowfloatLayer = true;
          },
          fail() {
            alert('分享失败!');
          },
          complete() {
            // alert('shareFile complete  1');
          },
        });
        wx.updateTimelineShareData({
          title: `${this.currentUserName}的报告正在生成中,需要您帮加速`,
          link: `${envObject.webUrl}/ReportSpeed?applySerialNo=${userInfo.serialNo}&queryType=${userInfo.queryType}¤tUserName=${userInfo.currentUserName}`,
          imgUrl: 'https://cmt.bdxiaodai.com/cmGzh/img/report_speed_erweima.8acc5583.png',
          success() {
            // alert('点击右上角分享');
          },
          fail() {
            alert('分享失败!');
          },
          complete() {
            // alert('shareFile complete  2');
          },
        });
        wx.onMenuShareTimeline({
          title: `${this.currentUserName}的报告正在生成中,需要您帮加速`,
          link: `${envObject.webUrl}/ReportSpeed?applySerialNo=${userInfo.serialNo}&queryType=${userInfo.queryType}¤tUserName=${userInfo.currentUserName}`,
          imgUrl: 'https://cmt.bdxiaodai.com/cmGzh/img/report_speed_erweima.8acc5583.png',
          success(res) {
            console.log(res);
          },
        });
        wx.onMenuShareAppMessage({
          title: `${this.currentUserName}的报告正在生成中,需要您帮加速`,
          desc: '完成加速拿好礼,不容错过哦',
          link: `${envObject.webUrl}/ReportSpeed?applySerialNo=${userInfo.serialNo}&queryType=${userInfo.queryType}¤tUserName=${userInfo.currentUserName}`,
          imgUrl: 'https://cmt.bdxiaodai.com/cmGzh/img/report_speed_erweima.8acc5583.png',
          type: 'link',
          dataUrl: '',
          success(res) {
            console.log(res);
          },
        });
      },

 

你可能感兴趣的:(【Vue】)