当前位置: 首页 > news >正文

uniapp小程序中onShareAppMessage(OBJECT)实现带参数的分享功能

一、引言

小程序中用户点击分享后,在 js 中定义 onShareAppMessage 处理函数(和 onLoad 等生命周期函数同级),设置该页面的分享信息。

  • 用户点击分享按钮的时候会调用。这个分享按钮可能是小程序右上角原生菜单自带的分享按钮,也可能是开发者在页面中放置的分享按钮(<button open-type="share">);
  • 此事件需要 return 一个Object,用于自定义分享内容

 二、平台差异说明

AppH5微信小程序支付宝小程序百度小程序抖音小程序、飞书小程序QQ小程序快手小程序京东小程序
xxx
参数类型说明平台差异说明
fromString分享事件来源:button(页面内分享按钮)、menu(右上角分享按钮)
targetObject如果 from 值是 button,则 target 是触发这次分享事件的 button,否则为 undefined
webViewUrlString页面中包含 <web-view> 组件时,返回当前 <web-view> 的url微信小程序1.6.4+、支付宝小程序、京东小程序

此事件需要 return 一个 Object,用于自定义分享内容,其内容如下:

参数名类型必填说明平台差异说明
titleString分享标题
pathString页面 path ,必须是以 / 开头的完整路径。注意:京东小程序,开头不要加'/'QQ小程序不支持
imageUrlString分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4
contentString百度小程序表现为:分享内容;支付宝小程序表现为:吱口令文案百度小程序、支付宝小程序
descString自定义分享描述支付宝小程序、抖音小程序、京东小程序
bgImgUrlString自定义分享二维码的背景图,建议大小750*950(网络图片路径)支付宝小程序
queryStringQQ小程序查询字符串,必须是 key1=val1&key2=val2 的格式。从这条转发消息进入后,可通过 qq.getLaunchOptionSync() 或 qq.onShow() 获取启动参数中的 query。QQ小程序
templateIdString开发者后台设置的分享素材模板 id抖音小程序
mpIdString微信小程序id,此场景用于分享到微信后,用户点击分享卡片,进入该appid对应的微信小程序,实现引流到微信小程序京东小程序
typeNumber转发形式(0 - 微信小程序正式版 ;1 - 微信小程序开发版;2 - 微信小程序体验版;京东App9.0.0开始不填或者其他值都会先判断是否有url参数,如果有打开分享后显示url对应页面,否则默认生成京东小程序官方的一个分享中间页面,点击可跳到京东app里面的对应小程序。)京东小程序
mpPathString微信小程序路径京东小程序
channelString渠道(不写默认微信朋友,微信朋友圈)京东小程序
urlStringh5链接地址(h5分享填写,不填默认中间页)京东小程序
successFunction接口调用成功的回调函数支付宝小程序、百度小程序
failFunction接口调用失败的回调函数支付宝小程序、百度小程序
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)百度小程序

注意

  • 微信、头条平台:只有定义了此事件处理函数,小程序右上角菜单才会显示“转发”按钮
  • QQ小程序还支持通过qq.offShareAppMessage取消对系统分享按钮的监听

三、踩坑

问题:vue3 setup scirpt语法使用onShareAppMessage编译到微信小程序,小程序分享不生效

原因:当前onShareAppMessage其实是被全局的onShareAppMessage给覆盖了,执行顺寻是先执行的页面,再执行的全局。

ui-app issiiues: https://github.com/dcloudio/uni-app/issiiues/3084

解决方案:注冊全局的onShareAppMessage

globalShare.ts

/** @Author: LYM* @Date: 2024-03-25 19:23:20* @LastEditors: LYM* @LastEditTime: 2024-03-26 11:39:47* @Description: 分享*/
import { onShareAppMessage } from '@dcloudio/uni-app'
import share from '@/assets/images/share-1.jpg'export const globalShare = {onShareAppMessage(e: any) {if (e.from === 'button') {return {title: e.target.dataset.title ?? '科创知识订阅',path: `/pages/detail/index?url=${encodeURIComponent(e.target.dataset.url)}`,imageUrl: share,success() {debuggeruni.showToast({title: '分享成功'})},fail() {uni.showToast({title: '分享失败',icon: 'none'})}}}}
}
 <buttonopen-type="share":data-url="url ?? ''":data-title="title"class="share-btn"><ekr-icon open-type="share" name="icon-share"></ekr-icon></button>

相关文章:

  • 以太网PHY,MAC及其通信接口介绍
  • Code Review(代码审查)
  • HTML5 、CSS3 、ES6 新特性
  • 宝塔面板操作一个服务器域名部署多个网站
  • [第五章]图论BFS
  • Facebook多个广告账户被封禁的原因及解决方法
  • 【openGL4.x手册09】转换反馈
  • ROM-IP
  • Day48:WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞
  • 一些常见的Docker问题和答案
  • CUDA学习笔记08: 原子规约/向量求和
  • MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误
  • 【idea快捷键】idea开发java过程中常用的快捷键
  • jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)
  • 【分布式】——降级熔断限流
  • JavaScript-如何实现克隆(clone)函数
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • JavaScript实现分页效果
  • js写一个简单的选项卡
  • Less 日常用法
  • MySQL QA
  • PHP变量
  • Vue 重置组件到初始状态
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从0实现一个tiny react(三)生命周期
  • 第十八天-企业应用架构模式-基本模式
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 分类模型——Logistics Regression
  • 基于游标的分页接口实现
  • 开源SQL-on-Hadoop系统一览
  • 类orAPI - 收藏集 - 掘金
  • 学习笔记TF060:图像语音结合,看图说话
  • nb
  • ​​​​​​​​​​​​​​Γ函数
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #NOIP 2014# day.1 T2 联合权值
  • %@ page import=%的用法
  • (八十八)VFL语言初步 - 实现布局
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *Django中的Ajax 纯js的书写样式1
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bashrc在哪里,alias妙用
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net 代码性能 - (1)
  • .NET 设计模式初探
  • .net反混淆脱壳工具de4dot的使用