侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

微信小程序封装分享与分销功能过程解析

微信(小程序)  /  管理员 发布于 3年前   210

前言

在微信小程序中,可以很简单的分享一个页面,比微信H5简单多了,然而,分享出去的页面(也叫卡片),打开后只是一个单独的页面,没有底部导航栏,点击返回按钮的时候就直接退出小程序了。如果需要去到首页,还必须点击顶部胶囊的“回到首页”,可是该功能很少人知道。

为了解决这个问题,有两种解决方案。

第一种:在分享的页面在添加显眼的“首页”悬浮按钮,点击按钮跳转到首页。这种方法,好容易理解,可是万一页面多,需要开发不少这样的悬浮按钮,而且点击返回依旧是退出小程序。

第二种:分享的时候不是分享本页面,而是分享首页的链接,不过在链接上带上本页面的参数,打开卡片号进入首页,首先判断参数,符合要求的直接跳转到目标页面。这个的好处是不需要修改ui效果,只需要在分享接口上做些处理,而且还支持返回首页;缺点是会从首页一闪到目标页面。

同时,如果小程序涉及到分享功能的,需要记录我是谁邀请进来的,那么就需要在分享参数中加上自己的分享id,综合考虑后第二种方式更合适。

第一步:创建分享配置文件pageshare.js

该文件的模块包含五个属性,分别是config数组(页面路径和页面id数组)、find方法(通过id查找页面路径的方法)、build(创建分享参数的方法,如返回页面id、分享id、文章id等)、baseshare(基础分享方法,返回微信分享所需的对象)

module.exports = {config: [{pageId: 1,pageUrl: "/pages/home/home",isTab: true,isHome: true}],/**查找相应的页面@pageId 页面id*/find: function(pageId) {let result = this.config[0];this.config.forEach(item => { if (item.pageId.toString() === pageId.toString()) {  result = item; }});return result;},/**创建分享参数@obj 分享键值对[默认内置salesmanId或shareId]*/build: function(obj) {if (!(obj instanceof Object)) { obj = {};}let userInfo = getApp().globalData.userInfo;if (userInfo.is_salesman) { obj.salesmanId = userInfo.salesman_info.id;} else { obj.shareId = userInfo.id;}let params = [];for (let name in obj) { params.push(name + "=" + obj[name]);}return params.join("&");},/**基础分享@title 标题@params url参数@imageUrl 图片[默认截图]*/baseshare: function({title,params,imageUrl}) {return { title: title, path: "/pages/home/home?" + this.build(params), imageUrl: imageUrl || ""}}}

PS:config与小程序的页面一一对应,需要手动配置。

第二步:引入pageshare.js文件

const Pageshare = require("../../../utils/pageshare");//在需要做分享的页面引入该文件

第三步:配置分享信息

在需要做分享的页面中修改分享信息

onShareAppMessage: function() {return Pageshare.baseshare({ title: this.data.course.title, //标题 params: {  pageId: 12,          //页面id  source: "微信小程序课程分享", //自定义参数  id: this.data.course.id        //自定义参数 }});}

pageshare底层默认添加了分享人等基本参数,所以这里不需要添加

第四步:App.js获取页面参数(点击卡片打开时)

在用户B点击用户A分享的链接时,app.js触发以下代码

到这里完成了分享人信息的绑定。

第五步:home页面获取到请求参数,进行二次跳转

从分享配置中可以知道,分享的路径是首页,然后带上自定义参数和分享参数

那么用户B打开用户A发的链接时,会打开home页面,所以我们在home中做参数判断,如下:

shareRedirect: function(share) {if (share.pageId != null) { let sharePage = Pageshare.find(share.pageId); let params = []; for (let name in share) {  if (name !== "pageId") {   params.push(name + "=" + share[name]);  } } if (sharePage.isTab && !sharePage.isHome) {  wx.switchTab({   url: sharePage.pageUrl + "?" + params.join("&")  }); } else {  wx.navigateTo({   url: sharePage.pageUrl + "?" + params.join("&")  }); }}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • 基于Taro的微信小程序模板消息-获取formId功能模块封装实践
  • 微信小程序实现元素渐入渐出动画效果封装方法
  • 微信小程序实现自定义modal弹窗封装的方法
  • 微信小程序下拉框搜索功能的实现方法
  • 详解微信小程序胶囊按钮返回|首页自定义导航栏功能
  • 微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
  • 微信小程序分享功能onShareAppMessage(options)用法分析


  • 上一条:
    微信小程序webview与h5通过postMessage实现实时通讯的实现
    下一条:
    封装微信小程序http拦截器过程解析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 小程序开发之跳转微信直播示例api(0个评论)
    • 在uni_app中开发小程序之常用功能示例代码汇总(0个评论)
    • 小程序开发之多端框架:taro(0个评论)
    • 微信小程序前端使用七牛云官方SDK上传七牛云代码示例(0个评论)
    • 百度小程序审核未通过,真机审核存在点击返回键退出小程序...解决方式之一tabBar(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客