uniapp多端分享(app,小程序,公众号)

前言

开发uniapp程序的项目,用它生成多端应用,由于兼容各种多端应用,程序代码需要相应的适配,在项目里分享功能是很常见的一个功能,但是在不同的端有不同的方法,我们如何实现多端分享呢?(app,小程序,公众号)

app

app端实现分享功能用到了uniapp内置的api

uni.share() 可以分享到微信、QQ、微博,每个社交平台被称为分享服务提供商,即provider,可以分享文字、图片、图文横条、音乐、视频等多种形式。同时注意,分享为小程序也使用本API。即在App里可以通过本API把一个内容以小程序(通常为内容页)方式直接分享给微信好友

具体Object参数说明参考文档

只能在app端里调用这个api

uniapp多端分享(app,小程序,公众号)_第1张图片

给分享按钮绑定一个方法,使用条件编译的方式来判断当前是不是app端



share(){
// #ifdef APPuni.share({provider:'weixin',//分享服务提供商(即weixin|qq|sinaweibo)type:0,//图文scene:'WXSceneSession',//provider 为 weixin 时必选 WXSceneSession分享到聊天界面,WXSceneTimeline分享到朋友圈,WXSceneFavorite分享到微信收藏title:'邀请好友领取海量现金券
// #endif 
uniapp多端分享(app,小程序,公众号)_第2张图片

小程序

小程序端分享也可以通过uni.share()实现,也可以通过右上角胶囊分享,但还有其他的分享方式

onShareAppMessage(),需要给按钮设置open-type="share",小程序中用户点击分享后,在 js 中定义 onShareAppMessage 处理函数(和 onLoad 等生命周期函数同级),设置该页面的分享信息,此事件需要 return 一个Object,用于自定义分享内容



onShareAppMessage(){return{title:'邀请好友领取海量现金券
}, 
uniapp多端分享(app,小程序,公众号)_第3张图片

公众号

公众号中的分享需要使用微信的JS-SDK,具体文档参考JS-SDK说明文档,需要配置好公众号js域名,可以直接下载js文件引入,也可以通过npm下载npm install weixin-js-sdk --save,公众号的分享比较繁琐,我们可以新建一个js文件封装起来

import wx from "weixin-js-sdk"

/*
 * 微信分享
 * 获取微信加签信息
 * @param{data}:获取的微信加签
 * @param{shareData}:分享配置参数
 */
export const wexinShare = (data, shareData) => {let appId = data.appId;let timestamp = data.timestamp;let nonceStr = data.nonceStr;let signature = data.signature;wx.config({//通过config接口注入权限验证配置debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。(测试记得关掉)appId: appId, // 必填,公众号的唯一标识timestamp: timestamp, // 必填,生成签名的时间戳nonceStr: nonceStr, // 必填,生成签名的随机串signature: signature, // 必填,签名,见附录1jsApiList: ['updateAppMessageShareData','updateTimelineShareData'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});wx.checkJsApi({jsApiList: ['chooseImage', 'updateAppMessageShareData'], // 需要检测的JS接口列表,所有JS接口列表见附录2,success: function(res) {// 以键值对的形式返回,可用的api值true,不可用为false// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}console.log(res, 'checkJsApi')}});wx.ready(function() {//通过ready接口处理成功验证// //分享到朋友圈”及“分享到QQ空间”wx.updateTimelineShareData({title: shareData.title, // 分享标题link: shareData.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: shareData.imgUrl, // 分享图标success: function(res) {console.log("分享朋友圈成功返回的信息:", res);}})//“分享给朋友”及“分享到QQ”wx.updateAppMessageShareData({title: shareData.title, // 分享标题desc: shareData.desc, // 分享描述link: shareData.link, // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: shareData.imgUrl, // 分享图标success: function(res) {console.log("分享朋友成功返回的信息:", res);;}})});wx.error(function(res) {// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。console.log('验证失败返回的信息:', res);});
} 

引入刚刚封装暴露出来的方法

import { wexinShare } from '@/common/js/utils.js'

在页面创建的时候.调用后端接口获取签名等数据,把获取到的数据和要分享的数据传入方法

created(){this.share()
},

//methods
share(){// #ifdef H5let currentUrl = location.href //获取当前页面链接this.$post('xxxxxx',{currentUrl}).then((res)=>{console.log(res);if(res.code==200){//获取的微信加签let obj={appId: res.appId,nonceStr: res.nonceStr,signature: res.signature,timestamp: res.timestamp,jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']}//分享的内容let shareData={title:'邀请好友领取海量现金券
} 

注意:如果分享失败,查看wx.error()返回的res参数显示the permission value is offline verifying且错误码为40048,原因是微信公众号js域名没有设置或者分享链接的域名或路径没有与当前页面对应的公众号JS安全域名一致

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

你可能感兴趣的:(小程序,uni-app,微信)