记录vue做微信自定义分享的一些问题

逻辑灵珀探
• 阅读 1266

前言

众所周知,在使用vue做项目的时候,微信自定义分享一直是一个坑,只是ios上坑明显的多。然后每次遇到问题都要度娘很久。奇怪的是貌似和很多人遇到的问题一样,但是他们写的解决方案都没办法直接解决我遇到的问题。

这里就记录一下遇到过的一些坑,和解决方式。

目前项目里面,安卓和ios上面的自定义分享已经没有什么问题了。

问题及解决方式

hash模式

在微信的官方文档中,提到关于jsapi_ticket的签名算法中,生成签名的时候,当前网页的URL,不包含#及其后面的部分;而且自定义分享出去的链接,微信也会主动往链接的后面拼接一些参数,比如from之类的;这也就造成了一些问题,比如要么签名不正确,要么分析那个出去的链接,二次分享又回出问题。

那么我这里的解决方式就是直接不用hash模式了,问题又多,链接也不好看,直接使用mode: 'history'

切换页面签名失效

这个在网上也有很多解决方案。由于我这里的项目里不需要细致到每个页面都必须做自定义分享,只需要在触发某些条件的时候触发自定义分享,所以是这么做的。

在main.js文件中编写自定义分享的函数逻辑;

// 微信自定义分享
Vue.prototype.wxShare = async function ({title , desc , link = window.location.href,imgUrl ,success}) {
    let that = this;
    // 当前页面地址
    let url = window.location.href;
    // 调用后端服务获取微信签名内容
    let {data: wxCfg} = await that.ajax({api: that.api.wechatGetWxSdk, data: {url: url}})
    if (!wx || !wxCfg) return;
    wx.config({
        debug: false,
        appId: wxCfg.appId,
        timestamp: wxCfg.timestamp,
        nonceStr: wxCfg.nonceStr,
        signature: wxCfg.signature,
        jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage']
    });
    wx.ready(function () {
        wx.updateAppMessageShareData({
            title: title, desc: desc, link: link, imgUrl: imgUrl,
            success: function () {
                success ? success() : ''
            }
        })
        wx.updateTimelineShareData({
            title: title, link: link, imgUrl: imgUrl,
            success: function () {
                success ? success() : ''
            }
        })
        wx.onMenuShareTimeline({
            title: title, link: link, imgUrl: imgUrl,
            success: function () {
                success ? success() : ''
            }
        })
        wx.onMenuShareAppMessage({
            title: title, desc: desc, link: link, imgUrl: imgUrl,
            success: function () {
                success ? success() : ''
            }
        })
    })
    wx.error(function (res) {
        that.$toast('请刷新当前页面后重试')
    });
}

在需要调用自定义分享的时候,就这样调用

await this.wxShare({
    title: '分享的标题', 
    desc: '分享的摘要',
    link: '分享出去的链接地址',
    imgUrl: '分享的封面图',
    success: function(){
        // 调用成功的回调
    }
})

IOS路由跳转之后依然签名失效

上面的问题解决之后,项目上线了,很多ios的用户反馈个别页面还是无法成功调用自定义分享,前期的解决方案很暴力...怼用户,让用户刷新一下当前页面,诶不成想,就好了!

后来越来越多的反馈..没办法了,必须得想想辙解决一下...

就开始找原因,发现android一点问题没有。但是在ios上,无论路由跳转多少次,复制出来的链接都是首次进入的页面的链接,于是改造一下上面的调用函数。

首先记录首次进入页面的url

Vue.prototype.firstUrl = window.location.href;

复制代码然后在wxShare函数中加了一个判断。大致意思就是判断当前设备是不是ios,如果是,签名用的url就使用firstUrl,如果不是,就使用window.location.href

然后上线,发现就没有再出过问题咯。
记录vue做微信自定义分享的一些问题


结束语

本文提供作者:嘟小乾
原贴地址:https://juejin.cn/post/684490...
觉得文章写的好,请给戳↑链接关注作者,给文章点个赞嗷~
更多好文,前端学习资料(Vue、React、Js),请关注公众号【推推猿】,加入IT人员社群,获得人脉拓展和大佬们面对面交流~更有大厂面试经验、内推岗位的一手资料同步获取~

点赞
收藏
评论区
推荐文章
李志宽 李志宽
4年前
❤超级牛批,暴力破解聊天记录文件 ❤
前言:在电子取证过程中,也会遇到提取PC版微信数据的情况,看雪、52破解和CSDN等网上的PC版微信数据库破解文章实在是太简略了,大多数只有结果没有过程。经过反复试验终于成功解密了数据库,现在把详细过程记录下来,希望大家不要继续在已经解决的问题上过度浪费时间,以便更投入地研究尚未解决的问题。通过查阅资料得知,与安卓手机版微信的7位密码不同,PC版微信的密码是
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
Vue 项目中各种痛点问题及方案
!(https://oscimg.oschina.net/oscnet/ad4bd1bfa4464061944b82e4f8fd73ac.jpg)最近要求使用vue进行前后端分离开发微信公众号,不断摸索踩坑之后,总结出如下几点vue项目开发中常见的问题及解决办法。列表进入详情页的传参问题本地开发环境请求服务器接
九路 九路
4年前
iOS 图片和文字一起上传
最近在忙着开发公司的一个项目,中间遇到很多坑,对于图片的上传在这里我也不做太多的介绍,网上各种大神的资料都有的,今天我主要说一下我再上传图片和文字的时候遇到的一些坑(图文上传我们很多时候都会遇到,遇到多了网上找的各种博客,解决了图文一起上传的问题)废话不多说,直接上代码:/上传图文/(void)upLoadImageViewToS
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Wesley13 Wesley13
3年前
Android NDK 开发(五)AndroidStudio 2.2 NDK的开发环境搭建
前言之前一直在用Eclipse做开发,直到今年年初才将项目迁移到Google推荐的AndroidStudio上面,毕竟这是一个趋势,可谁知道事情根本没有我想的那么简单,这期间遇到了N多坑,我想这些坑可能大家也有可能遇到,不在这里详细叙述。最终一个个问题的去解决,走完了这些坑,觉得还挺好用的,Eclipse是一个吃内存的IDE,
Easter79 Easter79
3年前
Taro小程序自定义顶部导航栏
微信自带的顶部导航栏是无法支持自定义icon和增加元素的,在开发小程序的时候自带的根本满足不了需求,分享一个封装好的组件,支持自定义icon、扩展dom,适配安卓、ios、h5,全面屏。我用的是京东的Taro多端编译框架写的小程序,原生的也可以适用,用到的微信/taro的api做调整就行,实现效果如下。!在这里插入图片描述(https://i
Stella981 Stella981
3年前
CentOS上安装配置Python3.7
其实安装python3.7本身很容易,并没有什么困难,主要是安装pip的时候遇到了好多问题。下面就说一下我具体踩过的坑,以及解决的办法。具体的安装步骤网上有非常非常多。参考:https://blog.csdn.net/u013214212/article/details/81540840完全照着这个里面的步骤做,就一点问题没有。不过为了防止意外情况,
Wesley13 Wesley13
3年前
video 标签存在的一些坑
最近做的些web页面,内嵌许多小视频,在ios和安卓手机上播放时,遇到不少问题:在微信浏览器内播放时,视频会自动全屏如果每个视频都有一张自定义的图片作为封面,在显示视频的同时,如果没有给这个视频设置高度,视频的容器在安卓手机上会被视频的封面撑大到变形<videoclass"videosource"width"10
Wesley13 Wesley13
3年前
ES6中模块导入遇到的问题及其解决办法
" 阅读本文大概需要5 分钟"!(https://oscimg.oschina.net/oscnet/15bff0c5cfc345fe8050aedae68d8684.jpg)前言今天遇到了一个小的问题,我们来看一下,情况是这样的:在没遇到过这个坑之前,如果需要引入一个模块,我通常的做
线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队
前言之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。背景说明分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案消息表名:mqmessages数据量:3000多万索引:createtime和statuss
逻辑灵珀探
逻辑灵珀探
Lv1
没心没肺的活着,是我最想要的生活。
文章
3
粉丝
0
获赞
0