uniapp - APP分享到微信,通过h5页面跳转至对应的app页面

news2024/11/15 12:08:12

目录

项目场景:

效果展示:

解决方案:

第一步:

第二步 :

1、微信跳转APP:wx-open-launch-app

第三步: 

总结:


项目场景:

uniapp框架开发的app(Android和ios),需要将商品详情页分享给微信朋友圈,再点击该分享链接(一个h5页面)跳转到app对应的商品详情页。


效果展示:


解决方案:

第一步:

在uniapp的对应app项目里写好分享事件,这里使用的uniapp 的分享API。代码:

// 点击分享 app 跳转到对应的h5页面 h5页面再跳转到app  详情见shareh5文件夹
const shareFuc = ()=>{
	console.log("去分享")	
	
	const title = user.userInfo.nickName || '迈货用户',
		summary = good.name || '迈货商品',
		imageUrl = good.goodsImg;
		
		
		uni.share({
		  provider: 'weixin',//分享服务提供商(即weixin|qq|sinaweibo)
		  type: 0,//图文
		  scene: 'WXSceneSession',//provider 为 weixin 时必选 WXSceneSession分享到聊天界面,WXSceneTimeline分享到朋友圈,WXSceneFavorite分享到微信收藏
		  title,//分享内容的标题
		  summary,//分享内容的摘要
		  href: `https://auth.jindingaus.com/maihuoh5/index.html?query=${id.value}`,//跳转链接,type 为 0 时必选
		  imageUrl,//图片地址,type 为 0、2、5 时必选
		  success(res) {
		    //成功返回的参数
		    console.log(res);
		  },
		  fail(err) {
		    //失败返回的参数
		    console.log(err);
		  }
		})
	
}

*这里参数title和summary,imageUrl请根据自己项目填写对应的内容

*type:分享形式,如图文、纯文字、纯图片、音乐、视频、小程序等。默认图文 0。不同分享服务商支持的形式不同,具体参考下面type值说明。

*href:跳转链接 (这个就是打开app的页面链接地址 这个地址还需要和微信公众平台配置,后面会提到具体配置)

第二步 :

配置在微信里打开的h5页面。

1、微信跳转APP:wx-open-launch-app

*用于页面中提供一个可跳转指定App的按钮。注意:Android平台通过开放标签跳转App,App必须接入微信OpenSDK(uniapp这些sdk都是内置好的 不用配置)

*补充说明:1、必须真机才能渲染该标签(开发时可以使用微信开发者工具的公众号网页项目模式调试);2、文字链无法拉起该标签

 wx-open-launch-app标签参数:

appid从何而来呢?

 需要在微信开放平台的移动应用里创建移动应用 就能拿到对应的appid

 

 

h5页面示例代码:

<body>
    <div id="app" v-cloak>
        <div>
            ....这里就是你想要写的内容节点,根据项目需求写
        </div>
        
         <!-- 这个是重点  wx-open-launch-app相关逻辑-->
        <!--需要修改wx-open-launch-btn的默认样式时,可以在外面套一层标签和文案 修改外层的样式就可以了-->
        <div class="open-btn">
            <span>打开迈货APP</span>
                <wx-open-launch-app
                    id="launch-btn"
                    appid="wxafe79c2f77255be3"
                    :extinfo="goodId"
                    @launch="AppLaunch"
                    @error="handleError"
                    style="position: absolute;top: 0;left: 0;right: 0;height:0"
                >
                    <script type="text/wxtag-template">
                        <style>.btn { width:100%;height:20px }</style>
                       <div class="btn"></div>
                    </script>
                </wx-open-launch-app>
        </div>
    </div>
     <!-- 要引入的JS文件 -->
    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <!--这个文件就是微信的文件-->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="./js/rem.js"></script>
    <script src="./js/swiper-bundle.js"></script>
    <script src="./js/vue.js"></script> <!--因为我的页面内容情况复杂 就使用了vue的来写 原生的可以参考微信的官方文档使用-->
    <script>
        const _imageUrl = 'xxx' // 测试

        new Vue({
            el:'#app',
            data:function () {
                return {
                    msg: '这是vue的数据', // 直接在这里定义msg
                    goodId:null,
                    good:{
                        name:'名字',
                        minPay:20,
                        saleNum:100,
                        goodBrand:'xds',
                        goodOrigin:'china',
                        skuName:'黑客380,15.5',
                        evaluateCount:10,
                    },
                    article_about:'<p>富文本</p>'
                }
            },
            created:function(){
               
                
            },
            mounted:function(){
                this.getUrl();
                this.initSwiper();
                this.initwxlaunch();
               
            },
            methods:{
                getUrl:function(){
                    const urlString = window.location.href;
                    console.log("urlString",urlString)
                    const regex = /[?&]([^=#]+)=([^&#]*)/g;
                    let match;
                    const params = {};
                    while ((match = regex.exec(urlString)) !== null) {
                        params[match[1]] = decodeURIComponent(match[2]);
                    }
                    
                    console.log("paramsparams",params)
                    const param1 = params.query; // 获取名为param1的参数值
                    console.log("param1param1param1",param1)
                    this.goodId = param1
                    // this.goodId = 179
                    this.getPageInfo();
                },
                getPageInfo:function(){
                    //获取页面要展示的数据
                },
                
                AppLaunch:function(){
                    alert("成功")
                },
                handleError:function(){//失败则跳转到对应的应用宝下载地址
                    window.location.replace('https://a.app.qq.com/o/simple.jsp?pkgname=uni.UNI9DC8718');
                },
                initwxlaunch:function(){
                      // 去后端签名 也可以前端自己签名验证参考官方文档
                    axios({
                        method: 'get',
                        url: _imageUrl+'api/common/getSignPackage?query='+this.goodId,
                    }).then(function (res) {
                        console.log(JSON.stringify(res.data.data))
                        wx.config({
                            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                            appId: 'wx20adee64ffc1f121', // 必填,公众号的唯一标识
                            timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳
                            nonceStr: res.data.data.noncestr, // 必填,生成签名的随机串
                            signature: res.data.data.signature, // 必填,签名,// 必填,签名
                            jsApiList: ['wx-open-launch-app'], // 必填,需要使用的JS接口列表
                            openTagList: ['wx-open-launch-app'] // 可选,需要使用的开放标签列表
                            
                        });

                        wx.ready(function () {
                                                    
                            wx.checkJsApi({
                            jsApiList: ['wx-open-launch-app'], // 校验跳转APP的标签是否可用
                            success: function (res) {
                                console.log('可用')
                                console.log('config111')
                            },
                            fail: (err) => {
                                console.log(err, '不可用')
                            }
                            })
                        }) 
                        wx.error(function(res){
                            console.log("error:",res)
                        });
                    });
                }
            }
        })
    </script>
</body>

把h5页面开发好后,还要去进行相关的配置,才能在微信浏览器访问成功。 

相关配置:

        2.开放对象

此功能仅开放给已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转满足一定条件的App。在使用该标签之前,首先需要前往微信开放平台的管理中心-公众账号或小程序详情-接口信息-网页跳转移动应用-关联设置中绑定所需要跳转的App。详细配置规则参考文档《微信内网页跳转APP功能》。

注意事项:

开通成功后页面展示为:

所有的都配置好,就可以在微信开发者工具中的 公众号网页项目 中进行测试了

 开发测试运行效果:

注意:

第三步: 

此时就从微信的网页跳回到app了,那如何在app中去接收网页传来的相关参数,再跳转到指定的页面呢。

在uniapp中 plus.runtime.arguments 可以拿到从微信网页跳转来的参数

Android和ios接收还存在差异需注意:

 /**
     * ios情况说明:
     * 未启动app的情况下  从微信h5跳转过去 逻辑正确 能获取plus.runtime.arguments的值(商品的id)能正确的跳转到对应的商品详情页
     * 已启动 存在后台运行的app 情况下 拿不到plus.runtime.arguments的值 所以 就没有正确跳转到对应的商品详情页 停留在app上一次的页面
     * 解决方案:
     * ios 异步拿去plus.runtime.arguments
     */

/**
     * Android情况说明:
     * 未启动app的情况下  从微信h5跳转过去 逻辑正确 能获取plus.runtime.arguments的值(商品的id)能正确的跳转到对应的商品详情页
     * 已启动 存在后台运行的app 情况下 能获取plus.runtime.arguments的值(商品的id)能正确的跳转到对应的商品详情页
     */ 

  onShow: async function () {
	  console.log("onShow")
 
	// #ifdef APP-PLUS
	
	 const pages = getCurrentPages()
	 const pageCount = pages.length //去拿页面栈的值 就可以判断app是否启动了
	 
	 let id
	 await new Promise((resolve, reject) => {
		 setTimeout(() => {
			id = plus.runtime.arguments ;//获取app从分享过来的参数
		   resolve('Async/Await resolved!');
		 });
	});
	   
	   
	 const sharePaga = ()=>{ //跳转到你项目的对应页面
			 Nav.navigateTo({
			 	url:'/pages/goods/details',
			 	query: {
			 		id: id,
			 	},
			 	success:()=>{//记得跳转成功后就要把plus.runtime.arguments置空,不然每次进来都存在值
			 		plus.runtime.arguments = ''
			 	},
			 	fail:(e)=>{
			 		console.log("失败",e)
			 	}
			})
	 }
	 
	const isNumber = (value)=> { //去判断 id是不是只包含数字字符  ios会出现plus.runtime.arguments不是传参id的其他值
	  return /^\d+$/.test(value);
	}
	if(id && isNumber(id)){ //存在plus.runtime.arguments和该值符合传来的形态 就要去跳转到对应页面
		sharePaga()	
	}
	 // #endif
	 
  },


总结:

        从app分享到微信再到微信网页跳转至app对应页面,其中需要注意的是在微信开放平台和微信公众平台的相关配置,看配置是否成功可以在微信开发者工具里测试,把debug模式打开,就可以看到对应的日志反应是否是配置成功了的。

还有各个环节的传递参数,记得存取好。

参考文档:

uni-app中使用wx-open-launch-app-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zilliz 2025届校园招聘正式启动,寻找向量数据库内核开发工程师

为了解决非结构化数据处理问题&#xff0c;我们构建了向量数据库-Milvus! Milvus 数据库不仅是顶级开源基金会 LF AI&Data 的毕业项目&#xff0c;还曾登上数据库顶会SIGMOD、VLDB&#xff0c;在全球首届向量检索比赛中夺冠。目前&#xff0c;Milvus 项目已获得超过 2.8w s…

算法工程师必知必会的数学基础之线性代数

1. 线性代数 线性代数是机器学习和深度学习中一个非常重要的数学基础。下面我将详细介绍线性代数中的一些基本概念&#xff0c;并使用 Python 的 NumPy 库来演示这些概念的应用。 1.1 向量&#xff08;Vectors&#xff09;与 矩阵&#xff08;Matrices&#xff09; 向量&…

Qt 登录界面

本文代码效果如下&#xff1a; 本文代码&#xff1a; https://download.csdn.net/download/Sakuya__/89607657https://download.csdn.net/download/Sakuya__/89607657 代码之路 LoginTitleBar.h 自定义的透明标题栏 #ifndef LOGINTITLEBAR_H #define LOGINTITLEBAR_H#in…

【书生大模型实战营】基础岛-8G 显存玩转书生大模型 Demo

8G 显存玩转书生大模型 Demo 【书生大模型实战营】基础岛-8G 显存玩转书生大模型 DemoInternLM2-Chat-1.8B 模型的部署代码运行StreamLit部署 InternLM-XComposer2-VL-1.8B 模型的部署InternVL2-2B 模型的部署 【书生大模型实战营】基础岛-8G 显存玩转书生大模型 Demo InternL…

“八股文“在现代编程面试中的角色重塑:助力、阻力还是桥梁?

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

【全网最全】文心智能体平台介绍和应用

什么是智能体平台&#xff1f; 文心智能体平台&#xff08;Wenxin Intelligent Agent Platform&#xff09;是由百度开发的一个全面集成多种人工智能技术的开放平台&#xff0c;旨在为企业和开发者提供强大的智能化服务和解决方案。支持广大开发者根据自身行业领域、应用场景&…

LoRa无线通讯,让光伏机器人实现无“线”管理

光伏清洁机器人&#xff0c;作为光伏电站运维的新兴关键设备&#xff0c;已跃升为继组件、支架、光伏逆变器之后的第四大核心组件&#xff0c;正逐步成为光伏电站的标准配置。鉴于光伏电站普遍坐落于偏远无人区或地形复杂之地&#xff0c;光伏清洁机器人必须具备远程操控能力、…

Charles怎么修改参数

Charles怎么修改参数 1、再【Structure】下&#xff0c;找到需要抓取的包&#xff0c;鼠标右键&#xff0c;点中断点。 2、在【Proxy】-点击【Breakpoint Settings…】 3、双击设置断点的接口 4、勾选后&#xff0c;点击【OK】。 5、再次刷新&#xff0c;重新发请求&#…

海思35XX系列(三)sensor(传感器)

刚开始接触这个概念的时候感觉比较模糊&#xff0c;简单记录一下吧 Sensor&#xff08;传感器&#xff09;是一种可以感知外部环境并将感知到的信息转化为可用的电信号或其他形式的工具。传感器广泛应用于电子设备、工业自动化、汽车、医疗器械等领域&#xff0c;用于测量、监…

【JVM】常见面试题

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. JVM 中的内存区域划分2. JVM 的类加载机制2.1 加载(Loading)✨双亲委派模型2.2 验证(Verification)2.3 准…

AI1-PaddleOCR2.8在VS2019编译运行基于C++引擎推理CPU版本

1、下载PaddleOCR-release-2.8开源项目 https://github.com/PaddlePaddle/PaddleOCR https://github.com/PaddlePaddle/PaddleOCR/releases https://gitee.com/paddlepaddle/PaddleOCR?_fromgitee_search 2、下载安装Windows预测库 https://paddleinference.paddlepaddle.o…

STL—vector—模拟实现【深度理解vector】【模拟实现vector基本接口】

STL—vector—模拟实现 经过了前面对于vector的初步了解&#xff0c;我们已经具备了使用vector的能力了&#xff0c;现在我们就来深度学习一下vector&#xff0c;并做到能模拟实现vector的基础功能。 1.vector深度解析 要想深度了解vector&#xff0c;我们就要去看它的源代码…

“常温”前端网站框架(四)-- 音乐播放器【附源码】

开篇&#xff08;请大家看完&#xff09;&#xff1a;此网站写给挚爱&#xff0c;后续页面还会慢慢更新&#xff0c;大家敬请期待~ ~ ~ 此前端框架&#xff0c;主要侧重于前端页面的视觉效果和交互体验。通过运用各种前端技术和创意&#xff0c;精心打造了一系列引人入胜的页面…

高龙海洋增收不增利:毛利率有所下滑,产能利用率下降仍扩产?

《港湾商业观察》廖紫雯 日前&#xff0c;高龙海洋集团有限公司&#xff08;以下简称&#xff1a;高龙海洋&#xff09;递表港交所&#xff0c;保荐机构为越秀融资。高龙海洋国内运营主体为福建高龙海洋生物工程有限公司。 自2008年公司成立以来&#xff0c;高龙海洋一直从事…

vue3中 provide/inject用法详解

依赖注入&#xff1a;provide 和 inject 什么情况下推荐provide/inject使用&#xff1a;Prop 多层级数据透传 通常情况下&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;会使用 props。想象一下这样的结构&#xff1a;有一些多层级嵌套的组件&#xff0c;形成了…

云HIS综合管理系统源码,云端SaaS服务,与监管系统有序对接,扩展性强

云HIS系统&#xff1a; 本套云HIS系统是一款适用于二级及以下医院、专科医院和社区卫生机构的综合性医院信息系统&#xff0c;它包含门诊预约挂号、收费结算、排班、医护协同、药房、药库、电子病历等10大功能模块&#xff0c;支持门诊、住院、医技、后勤各项核心业务。 采用…

每天五分钟玩转深度学习框架PyTorch:选择函数where和gather

本文重点 如图表所示,这几个方法可以理解为索引函数,有些函数在切片和索引一章进行了简单的介绍,本文将再次进行介绍,温故知新。 index_select 通过特殊的索引来获取数据index_select,这个这样来理解,第一个参数表示a的第几维度,第二个参数表示获取该维度的哪部分。 我…

strimzi operator 部署kafka集群

Strimzi介绍 官方文档:https://strimzi.io/docs/operators/0.42.0/overview#kafka-components_str Strimzi介绍 Strimzi 是一个用于 Apache Kafka 在 Kubernetes 上部署和管理的开源项目。它提供了一组 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)、控制…

Oracle11.2.0 安装手册V1.0.doc

文档说明 编写目的 本手册是给系统技术人员人员提供Red Hat Enterprise Linux 5.4环境下得Oracle 11g的安装和配置指导&#xff0c;帮助实施人员或用户能够快速安装配置Oracle 11g。 准备介质 适用于Linux x86-64的Oracle Database 11g第2版 linux.x64_11gR2_database_1of2.…

校园课程助手【4】-使用Elasticsearch实现课程检索

本节将介绍本项目的查询模块&#xff0c;使用Elasticsearch又不是查询接口&#xff0c;具体流程如图所示&#xff08;如果不了解Elasticsearch可以使用sql语句进行查询&#xff09;&#xff1a; 这里是两种方法的异同点&#xff1a; Mysql&#xff1a;擅长事务类型操作&#…