美文网首页Vue.js
vue 微信分享代码封装及Spa分享ios坑总结

vue 微信分享代码封装及Spa分享ios坑总结

作者: Benny_lzb | 来源:发表于2019-04-26 20:55 被阅读3次

    大概是2月份那会项目的中需求吧。分享商品详情以及拼团成功后需要分享商品链接。

    大概流程是这样的

    1. 引入微信的 weixin-js-sdk (可以直接npm安装也可以直接引入js链接)
      import wx from 'weixin-js-sdk';
    2. 通过sdk的config接口 注入权限验证配置(里头的appid,时间戳,随机串和签名需要后台处理后返回)
                        wx.config({
                            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                            appId: item.AppId, // 必填,公众号的唯一标识
                            timestamp: item.Timestamp, // 必填,生成签名的时间戳   
                            nonceStr: item.NonceStr, // 必填,生成签名的随机串
                            signature: item.Signature, // 必填,签名,见附录1
                            jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    
                        });
    
    1. config验证成功后,通过sdk的ready函数里调用onMenuShareTimeline(朋友圈)和onMenuShareAppMessage(微信好友)
      参考下面的_initShare方法。参数分别是分享标题、分享链接、图片、描述
      //设置分享
            _initShare(shareTitle, url, shareImg, shareDesc) {
                wx.ready(() => {
                    wx.onMenuShareTimeline({
                        title: shareTitle, // 分享标题
                        link: url.timeline, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: shareImg, // 分享图标
                        success: function () {
                            // 用户确认分享后执行的回调函数
                            Toast('分享成功!!!');
                        },
                        cancel: function () {
                            // 用户取消分享后执行的回调函数
                            Toast('取消分享!!!');
                        }
                    });
    
                    wx.onMenuShareAppMessage({
                        title: shareTitle, // 分享标题
                        desc: shareDesc, // 分享描述
                        link: url.friend, 
                        imgUrl: shareImg, // 分享图标
                        type: "", // 分享类型,music、video或link,不填默认为link
                        dataUrl: "", // 如果type是music或video,则要提供数据链接,默认为空
                        success: function () {
                            // 用户确认分享后执行的回调函数
                            Toast('分享成功!!!');
                        },
                        cancel: function () {
                            // 用户取消分享后执行的回调函数
                            Toast('取消分享!!!');
                        }
                    });
                })
    
    
            }
    

    注:上面代码只贴了核心的,有的变量啊什么的没贴全,自己稍微修改下就行了。思路对了就ok~


    这里有个关于spa项目页面链接带‘#’的ios微信分享深坑~
    先贴下来自官方的文档说明

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)

    原来,SPA中,微信只记录了一开始进应用的第一个链接,并用它去参与生成签名,而不是用当前的URL(这个解释了为什么使用location.href首次进入页面是报错的,而换成第一个URL却是对的);
    而刷新一次,当前列表页面的链接发生了改变,变成了重定向之后的链接,结果就是对的了。

    这个坑爹的问题在小程序开发工具里头一直测不出来,安卓也没问题,唯独ios.

    后来就是参考网上的在首页和子页面的mounted里加上
    !window.initUrl && (window.initUrl = window.location.href)
    即可,即 将当前URL挂载在全局变量中

    在微信初始化config请求接口的时候,所传的url参数就用window.initUrl来初始化,安卓的话还是用location.href


    就这样啦~做个记录,以后有需要就能想起来。也供大家参考。之前还看到过在路由的beforeEach里头路径初始化时做处理,但是没弄成功,如果有更方便的方法,可以分享一波哈。
    路过的顺便点个赞吧;-)
    欢迎加微信交流(记得写备注哦)
    benny.png

    相关文章

      网友评论

        本文标题:vue 微信分享代码封装及Spa分享ios坑总结

        本文链接:https://www.haomeiwen.com/subject/onwqdqtx.html