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 相关文章推荐
js有关元素内容操作小结
Dec 20 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
jquery cookie实现的简单换肤功能适合小网站
Aug 25 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
js命名空间写法示例
Dec 18 Javascript
JavaScript6 let 新语法优势介绍
Jul 15 Javascript
深究AngularJS中$sce的使用
Jun 12 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
用react-redux实现react组件之间数据共享的方法
Jun 08 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
销售找工作求职信
2013/12/20 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
2015年女职工工作总结
2015/05/15 职场文书
清明节随笔
2015/08/15 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android