vue实现微信二次分享以及自定义分享的示例


Posted in Javascript onMarch 20, 2019

微信二次分享/自定义分享

从App中使用App分享(一次分享)

vue实现微信二次分享以及自定义分享的示例

使用微信导航栏的分享(二次分享) --已做处理

vue实现微信二次分享以及自定义分享的示例

使用微信导航栏的分享(二次分享) --未做处理

vue实现微信二次分享以及自定义分享的示例

如上图,如果不做相关处理,页面进行二次分享,用户看到的就是链接+空图,上面显示的文案(考拉阅读)实际上是获取的title标签中的文案,我在网上查的相关例子有说明,图片如果不设置,将会自动获取浏览器渲染的第一张图片,经过个人测试,并没有实现(朋友圈同理,不做图片展示)。

微信js-sdk说明文档

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。(一般后端配置)

前端需要调取后端的接口,获取微信的congfig所需要的参数

wx.config({
 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: '', // 必填,公众号的唯一标识
 timestamp: , // 必填,生成签名的时间戳
 nonceStr: '', // 必填,生成签名的随机串
 signature: '',// 必填,签名
 jsApiList: [] // 必填,需要使用的JS接口列表
});

jsApiList里面需要填写你调用的jsApi,updateAppMessageShareData(分享微信,QQ),updateTimelineShareData(微信朋友圈,QQ空间),onMenuShareTimeline/onMenuShareAppMessage/onMenuShareQQ 这三个即将废弃,不建议使用。

⚠️但是在本次开发中,我只使用了updateAppMessageShareData,updateTimelineShareData,个别Android(微信版本7.0.3)分享出来的还是没有图片和文案,ios的是没有问题,所以又加上了弃用的onMenuShareTimeline,onMenuShareAppMessage之后,安卓机也可以正常分享。

判断当前客户端版本是否支持指定JS接口

wx.checkJsApi({
 jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
 success: function(res) {
 // 以键值对的形式返回,可用的api值true,不可用为false
 // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
 }
});

wx.config中的 debug 设为true,在微信测试时会自动弹出相关信息,在微信开发者工具中也会打印出流程(分为begin,end),如下图

vue实现微信二次分享以及自定义分享的示例

1、通过ready接口处理成功验证

2、在ready接口中调取updateAppMessageShareData,updateTimelineShareData方法

wx.ready(function () { //需在用户可能点击分享按钮前就先调用
 wx.updateAppMessageShareData({ 
  title: '', // 分享标题
  desc: '', // 分享描述
  link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: '', // 分享图标
  success: function () {
   // 设置成功
  }
 })
});

在vue的开发项目中,可在created或mounted生命周期中调用

3、通过error接口处理失败验证

wx.error(function(res){
 // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

⚠️需要注意的点

通过后端的接口获取微信配置的参数时,需要传递当前页面url

  • - url(当前网页的URL,不包含#及其后面部分),如果没有#,则需要传递完整的url
  • - url需要编码    encodeURIComponent(url)

代码如下

// wetchat.js -- 个人封装
import wx from 'weixin-js-sdk'; // 引入wxJS
import apiUrl from "@/api/index"; // 本项目的api (根据自己项目)
export function wxChatShare(param) {
 let _url = encodeURIComponent(param.url) // 当前页面的url
 apiUrl.wechatConfig(_url) // wechatConfig是获取微信配置相关信息的接口,此处根据个人项目写法而定,类似于this.$ajax
 .then (res => {
  if(res.data.code==200) {
  // 接口返回配置信息
   wx.config({
    debug: false,
    appId: res.data.content.appid,
    timestamp: res.data.content.timestamp, // 必填,生成签名的时间戳
    nonceStr: res.data.content.nonceStr, // 必填,生成签名的随机串
    signature: res.data.content.signature, // 必填,签名
    jsApiList: [ // 用的方法都要加进来
     'updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'
    ]
   });
   wx.ready(function () {
    //分享到朋友圈

    wx.updateTimelineShareData({ 
     title: param.title, // 分享标题
     link: param.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
     imgUrl: param.imgUrl, // 分享图标
     success: function () {
      // 设置成功
      console.log("分享到朋友圈成功返回的信息为:", res);
      this.$Message.message("设置成功!");
     }
    })

    wx.onMenuShareTimeline({
     title: param.title, // 分享标题
     link: param.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
     imgUrl: param.imgUrl, // 分享图标
     success: function () {
     // 用户点击了分享后执行的回调函数
     },
    })

    //分享给朋友

    wx.updateAppMessageShareData({ 
     title: param.title, // 分享标题
     desc: param.desc, // 分享描述
     link: param.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
     imgUrl: param.imgUrl, // 分享图标
     success: function () {
      // 设置成功
      console.log("分享到朋友圈成功返回的信息为:", res);
      this.$Message.message("设置成功!");
     }
    })
    wx.onMenuShareAppMessage({
     title: param.title, // 分享标题
     desc: param.desc, // 分享描述
     link: param.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
     imgUrl: param.imgUrl, // 分享图标
     type: param.type, // 分享类型,music、video或link,不填默认为link
     dataUrl: param.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空
     success: function () {
     // 用户点击了分享后执行的回调函数
     }
    });
   });
   wx.error(function (res) {
    console.log('验证失败返回的信息:', res);
   });
  } else {
   console.log(res.data.message);
  }
 })
 }
// home.vue

 import * as wechatJS from '@/utils/wechat' // 引入wechat.js

// 写在方法中调用,或者在生命周期中调用
let _param = {
 studentId: 1, // 个人项目而定
 activityId: 1, // 个人项目而定
 url: window.location.href, // 当前页面url
 title: "为我点赞,一起免费抢考拉阅读VIP会员卡,畅读一万本好书~", // 分享数据配置
 desc: "孩子要读书,上考拉阅读", // 分享数据配置
 link: _nowUrl, // 分享数据配置
 imgUrl: url, // 分享数据配置 -- 全路径
 type: "link", // 分享类型,music、video或link,不填默认为link
 dataUrl: " ", // 如果type是music或video,则要提供数据链接,默认为空

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
javascript页面渲染速度测试脚本分享
Apr 15 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
简述AngularJS的控制器的使用
Jun 16 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
Dec 23 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
jquery实现左右轮播切换效果
Jan 01 jQuery
详解vue 2.6 中 slot 的新用法
Jul 09 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
vscode配置vue下的es6规范自动格式化详解
Mar 20 #Javascript
利用Promise自定义一个GET请求的函数示例代码
Mar 20 #Javascript
详解VS Code使用之Vue工程配置format代码格式化
Mar 20 #Javascript
vue使用Proxy实现双向绑定的方法示例
Mar 20 #Javascript
vue实现可视化可拖放的自定义表单的示例代码
Mar 20 #Javascript
详解JavaScript作用域和作用域链
Mar 19 #Javascript
vue双向绑定及观察者模式详解
Mar 19 #Javascript
You might like
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
服装设计行业个人的自我评价
2013/12/20 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript