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 相关文章推荐
通过jquery实现tab标签浏览效果
Feb 20 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 Javascript
JS常用正则表达式总结
Nov 12 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
vue.js移动端app实战1:初始配置详解
Jul 24 Javascript
express默认日志组件morgan的方法
Apr 05 Javascript
vue 国际化 vue-i18n 双语言 语言包
Jun 07 Javascript
vue车牌号校验和银行校验实战
Jan 23 Javascript
JavaScript中this用法学习笔记
Mar 17 Javascript
用Node写一条配置环境的指令
Nov 14 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实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
python 调用HBase的简单实例
2016/12/18 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
pandas重新生成索引的方法
2018/11/06 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python 经典数字滤波实例
2019/12/16 Python
Python新手学习标准库模块命名
2020/05/29 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
提高EJB性能都有哪些技巧
2012/03/25 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
学校教师读书活动总结
2014/07/08 职场文书
安全主题班会教案
2015/08/12 职场文书
党性修养心得体会2016
2016/01/21 职场文书
《山中访友》教学反思
2016/02/24 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python