uniapp h5在浏览器唤起app

本文详细介绍了如何实现在H5页面中点击打开APP的功能,针对已安装和未安装APP的用户进行不同处理。在Android和iOS平台上,通过配置manifest.json文件来设置scheme。对于微信环境,由于特殊性,需要额外处理并跳转到应用市场。此外,还提供了一段JavaScript代码示例,用于监听页面可见性变化,以判断和执行相应的唤醒或跳转操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

当用户打开h5 链接时候 ,点击打开app, 若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装

这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。这两个场景又分为了IOS端和安卓端

配置

安卓
在manifest.json的"app-plus"->“distribute”->"android"节点下添加schemes数据:“schemes” : “nameAPP”

"schemes" :  ["nameAPP"]

在这里插入图片描述

IOS
在manifest.json的"app-plus"->“distribute”->"ios"节点下添加urltypes数据:

"urltypes": [{
                "urlidentifier": "xxx.xxx", //  一般为域名倒写,例如 taobao.com
                "urlschemes": ["nameAPP"]
   }],
   "urlschemewhitelist":["nameAPP"]	 //白名单

在这里插入图片描述

注意

下面代码的 nameAPP:// 就是代表着schemes/Universal Link 通用链接,也就是跳到自己app 的快捷链接 如果链接需要带参数的话redxiang://params ,这里的我写的是没带参数的,我只做了微信浏览器的判断,因为微信直接打开的h5链接是不能直接换起app的,需要在微信开放平台配置相关参数**(偷个懒直接让它跳到应用市场)。目前直接获取当前手机是android还是ios

微信开放标签文档

<view class="sign-box" @click="myplayUser">
				立即下载
</view>
data() {
			return {
				timer:null,
				opening:null,
			}
		},

这里做了监听visibilitychange事件是浏览器新添加的一个事件,当浏览器的某个标签页切换到后台,或从后台切换到前台时就会触发该消息,简单说相当于onhide

	watch: {
			'opening': {
				handler: function(newVal, oldVal) {
					if(newVal == false){
						document.addEventListener("visibilitychange",()=> {
						  if (this.timer) {
						    // this.opening = false
						    clearTimeout(this.timer)
						  }
						}, false);
					}
					
				},
				immediate:true
			}
		},

写好了之后记得需要打包自定义基座测试

也是第一次写,还是看到一个大佬的文章 写的

myplayUser(){
				//判断是否微信登陆 是的话直接跳到应用市场
				var u = navigator.userAgent;
				var isWeixin = u.toLowerCase().indexOf('micromessenger') !== -1; // 微信内
				if(isWeixin>-1){
					if (uni.getSystemInfoSync().platform == 'android') {
						 window.location = 'https://a.app.qq.com/o/simple.jsp?pkgname=xxxxxxxxxxx'
					}else if (uni.getSystemInfoSync().platform == 'ios'){
						 window.location = 'https://apps.apple.com/cn/app/idxxxxxxx'
					}
					return false
				}
				//若在其他浏览器 
				uni.showLoading({
					title:'跳转中...'
				})
				 let that = this
				  that.opening = true
				  if (uni.getSystemInfoSync().platform == 'android') { //  安卓处理
				    let ifr = document.createElement('iframe');
				    ifr.src = "nameAPP://";  //配置的app 链接"schemes" :  ["nameAPP"]
				    ifr.style.display = 'none';
				    document.body.appendChild(ifr); //如果可以已经安装就可以直接打开了
					
					that.timer = window.setTimeout(function () {  //  未安装的情况
				      that.opening = false
				      document.body.removeChild(ifr);
				      //  提示下载
					    uni.hideLoading()
				      let r = confirm("未安装APP? 是否下载")
				      if (r) {
				        window.location = 'https://a.app.qq.com/o/simple.jsp?pkgname=uni.zxxxxxxx'
				      }
				    }, 4000)
					
				  } else {  //  IOS处理
				    window.location = "nameAPP://"    //如果可以已经安装就可以直接打开了
				    that.timer = setTimeout(function () { //  未安装的情况。
				      that.opening = false
				      //  跳转app store
					    uni.hideLoading()
				      let r = confirm("未安装APP? 是否去App store查看")
				      if (r) {
				        window.location = 'https://apps.apple.com/cn/app/idxxxxxxx'
				      }
				    }, 4000);
				  }
			},
### 如何从H5页面跳转回UniApp应用 #### 判断当前环境并处理不同场景 为了确保能够顺利地从H5页面返回到应用程序,在执行任何操作前应该先检测当前运行环境是否处于移动设备上的浏览器中。对于特定的应用程序如微信或QQ内置浏览器,则需提醒用户切换至外部浏览器访问[^3]。 ```javascript function checkBrowserEnvironment() { const ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('qq/') !== -1 || ua.match(/micromessenger/i)) { alert('请点击右上角菜单选择在浏览器中打开'); return false; } return true; } ``` #### 使用URL Scheme 或者 Deeplink 进行跳转 当确认了用户的浏览环境适合直接调起APP时,可以利用`window.location.href`配合自定义协议(scheme://)来尝试启动已安装的目标应用,并传递必要的参数给它[^1]。 ```html <a href="myapp://path?param=value">点击这里回到我的应用</a> <!-- 或者 --> <button onclick="goBackToApp()">返回应用</button> <script type="text/javascript"> function goBackToApp(){ window.location.href='myapp://path?param=value'; } </script> ``` #### 处理未安装情况下的引导下载逻辑 考虑到并非所有访问者的终端都预装有目标软件,因此还需要准备一套备用方案用于指引他们完成新客户端的获取过程。这通常涉及到设置一个超时机制:如果一定时间内未能成功唤起原生应用,则自动重定向至官方商店链接供其下载最新版本。 ```javascript let timeoutId; // 尝试打开应用的同时设定延迟加载市场地址的任务 timeoutId = setTimeout(() => { window.location.href = 'https://example.com/download'; // 替换成实际APK/IOS下载源址 }, 2000); tryOpenApp(); function tryOpenApp(){ clearTimeout(timeoutId); document.querySelector('#open-app-link').click(); // 触发上面提到过的带有Scheme URL 的锚点标签事件 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值