uniapp 微信小程序分享功能 onShareAppMessage(options)

news/2024/7/20 4:20:40 标签: uni-app, 微信小程序, 小程序

一、背景

小程序>微信小程序中需要完成转发分享功能,接收人未登录小程序情况下,在微信上打开不用强制登录,可以查看部分分享的内容;如果用户要查看更多内容,可以点击【查看全部】按钮,触发登录逻辑,引导用户登录后查看更多内容!

二、实现分享功能,触发 onShareAppMessage 函数

2.1、自定义按钮实现分享

<button open-type="share">
  <text class="iconfont icon-zhuanfa2"></text>
  <text class="num">2</text>
</button>

备注:

按钮的open-type属性为share

第一个text为图标,第二个text为转发的数量

2.2、定义 onShareAppMessage函数,设置该页面的分享信息

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

官网详细指引👉:分享 | uni-app官网

onShareAppMessage(res) {
  let pages = getCurrentPages(); //获取当前页面栈的信息
  let currentPage = pages[pages.length - 1]; //获取到当前页面栈中最后一个页面的索引
    if (res.from === 'button') {// 来自页面内分享按钮
      console.log(res.target)
    }
    return {
      title: '自定义分享标题',
      path: currentPage.route + `?id=${this.id}&share=${this.share}` //后面是路径上要传递的参数
    }
  }

三、接收人未登录小程序可查看部分内容

接收人未登录小程序情况下,在微信上打开不用强制登录,可以查看部分分享的内容

3.1、分析:

原本逻辑是在onLoad中已经做了判断,如果用户没登录,会弹窗提示用户登录;

3.2、根据分享时携带的参数,确定是否需要登录提示

上一步在onShareAppMessage分享函数中的路径上有添加一个share参数,那可以在onLoad中根据分享的参数来判断,有参数就不弹窗提示登录

说明:checkLogin()函数是在main.js里面定义的登录弹窗内容,在此页面直接使用的

关于encodeURIComponent 解释说明,详细内容可百度:

encodeURIComponent 是 JavaScript 中的一个函数,用于对 URI(统一资源标识符)进行编码,以便在URL中传递参数时对特殊字符进行转义。它的作用是将字符串作为URI组件进行编码,将特殊字符转换为对应的十六进制转义序列,以便在URL中安全地传递和使用。

main.js文件定义的checkLogin()函数如下👇

3.3、实际效果

接收用户未登录时只展示部分内容,并提供查看全部按钮,若要查看更多内容,会再弹窗登录提示

 

四、接收人要查看全部内容,触发登录逻辑

4.1、 点击查看全部按钮,触发登录

<view class="more" v-if="!showBottomBox" @click="clickMore">
  <text class="iconfont icon-xiala2-01"></text>
  <text>查看全部</text>
</view>

methods: {
  //点击查看更多按钮
  clickMore(){
   //调用登录方法
   this.checkLogin(this.nowUrl);
  },
}

4.2、解决点击登录后,页面不跳转问题

问题说明:此时用户点击登录后,没有回到刚才查看内容的页面,停留在当前页面不动,主要是没有跳转回去,那问题可能就出现跳转上

找到登录页面,查看传递的参数,打印后发现传递的参数路径是经过encodeURIComponent编码后的,所以跳转不过去,需要利用decodeURIComponent,将其中的百分号编码表示形式转换回原始字符

关于decodeURIComponent 解释说明,详细内容可百度:

decodeURIComponent 是 JavaScript 中的一个函数,用于对已经进行编码的 URI 组件进行解码,将其中的百分号编码表示形式转换回原始字符。它的作用是将经过 encodeURIComponent 编码的字符串进行解码,还原为原始的字符串形式。

methods:{
    //授权成功后,登录跳转
   refuse() {
	  console.log('11111backUrl++++',this.backUrl);
      if (this.backUrl) {
      	 uni.reLaunch({
      	 url: decodeURIComponent(this.backUrl)
      	 })
        } else {
      	 uni.reLaunch({
      	 url: '/pages/index/index'
       })
     }
   }
}

最后,👏👏 😀😀😀 👍👍  


http://www.niftyadmin.cn/n/5185168.html

相关文章

计算机视觉基础(9)——相机标定与对极几何

前言 本节我们将学习相机标定和对极几何两部分的内容。 在相机标定部分&#xff0c;我们将学习直接线性变换&#xff08;Direct Linear Transform, DL&#xff09;,张正友标定法&#xff08;Zhang’s Method&#xff09;和 Perspective-n-Point (PnP) 这三种方法。 在对极几何部…

C++入门第七篇--STL模板--vector模拟实现

前言&#xff1a; 有了前面的string库的介绍&#xff0c;在这里我就不再介绍vector库了&#xff0c;而是直接模拟实现了。 vector库的概念和作用&#xff1a; vector库是针对于数组的数据类型的容器&#xff0c;它有点类似我们曾经实现过的顺序表&#xff0c;你完全可以按照…

通往优秀软件架构师之路:掌握技术核心,修炼基础原理【文中送书,十本任选】

通往优秀软件架构师之路&#xff1a;掌握技术核心&#xff0c;修炼基础原理 《高并发架构实战&#xff1a;从需求分析到系统设计》《架构师的自我修炼&#xff1a;技术、架构和未来》《中台架构与实现&#xff1a;基于DDD和微服务》《分布式系统架构&#xff1a;架构策略与难题…

windows的远程桌面服务RDS存在弱加密证书的漏洞处理

背景 漏洞扫描检测windows服务器的远程桌面服务使用了弱加密的ssl证书 思路 按照报告描述&#xff0c;试图使用强加密的新证书更换默认证书 解决 生成证书 通过openssl1.1.1生成&#xff08;linux自带openssl&#xff0c;windows安装的是openssl1.1.1w&#xff09;&#x…

android初集成flutter,遇到的问题

环境 studio版本&#xff1a;2022.1.1 flutter版本&#xff1a;2.8.0 电脑&#xff1a;mac flutter项目总是报错&#xff0c;编译不过 以 Resources Root 加载 记得设置dart&#xff1a;主工程和flutter项目都需要设置&#xff0c;否则不出现手机链接 下面这个样子就是好了&…

ModStart - 模块化开发框架的引领者

大家好&#xff0c;今天我们要来聊聊一款强大且流行的开发框架 —— ModStart。如果你正在寻找一个能够让你的开发工作变得更加高效、灵活且强大的工具&#xff0c;那么 ModStart 绝对值得你了解一下。 ModStart 是一款基于 Laravel 的模块化开发框架&#xff0c;它采用了 Apa…

类加载中的执行顺序

结论&#xff1a; 先静态再实例 实例化一个子类(这个颜色主要是实例化会执行的部分)&#xff1a; 父类静态属性&#xff0d;&#xff1e;父类静态代码块&#xff0d;&#xff1e;子类静态属性&#xff0d;&#xff1e;子类静态代码块&#xff0d;&#xff1e;父类代码块&…

JVM jstat 查看内存新生代老年代回收情况,排查oom

jstat 命令 jstat - [-t] [-h] [ []] option&#xff1a;我们经常使用的选项有gc、gcutil vmid&#xff1a;java进程id interval&#xff1a;间隔时间&#xff0c;单位为毫秒 count&#xff1a;打印次数 每秒打印一次 jstat -gc 9162 1000S0C:年轻代第一个survivor的容量…