uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

news2024/11/13 13:25:47

场景: A将某商品分享给B,B点击后判断是否安装APP,若安装直接打开,没有安装则跳转下载页;

知识点

  1. uniapp APP分享;
  2. 判断用户是否安装APP,已安装直接打开,未安装跳转下载页;
  3. uniapp 在外部打开APP,Android配置schemesios配置urlschemes;https://uniapp.dcloud.net.cn/tutorial/app-android-schemes.html#;

正文

一、uniapp APP分享

官网链接:
https://uniapp.dcloud.net.cn/tutorial/app-share.html#; https://uniapp.dcloud.net.cn/tutorial/app-share-weixin.html#;
https://uniapp.dcloud.net.cn/api/plugins/share.html#share;

在这里插入图片描述

  1. 在manifest.json中勾选分享选项,并配置APP的appidUniversalLinks在这里插入图片描述
  2. 在需要分享的页面写代码;
<template>
	<view class="rf-kefu">
		<!-- 分享图标 -->
		<view class="wrapper" @tap="share">
			<text class="icon icon-a-bianzu10"></text>
		</view>
		
		<!-- 此处省略部分代码 -->

		<!-- 底部分享弹窗 -->
		<u-popup class="popup" v-model="posters" mode="bottom" width="100%" height="20%" border-radius="24"
			:close-icon-size='20' close-icon-color="#999999" :closeable="true">
				<view class="title">分享到</view>
				<view class="sharePopup">
					<view class="item" @click="appShare('WXSceneSession')">
						<image src="https://comp-prd-cos-1254345538.cos.ap-beijing.myqcloud.com/images/other/wx.png"></image>
						<view class="">微信好友</view>
		    		</view>
					<!-- <view class="item" @click="appShare('WXSenceTimeline')">
						<view class="iconfont icon-pengyouquan"></view>
						<view class="">微信朋友圈</view>
					</view> -->
				</view>
		</u-popup>
	</view>
</template>
<script>
export default {
	data() {
		return {
			posters: false, //底部分享弹窗
		};
	},
	methods: {
		// 分享
		share() {
	  	 //打开分享弹窗
			this.posters = true;
		},
		// 分享
		appShare(scene) {
				let that = this;
				console.log(this.$h5Domain,'--h5Domain')
				// 分享到的是一个站外的h5页面 curRoute是h5落地分享页的路径
				let curRoute = "/pages/detail/h5SharePage"; // h5落地分享页
				let domain = `${this.$h5Domain}/paas/bbc-cli-mobile-syzz/index.html#`;
				console.log(`${domain}${curRoute}?skuCode=${this.goodsParams.skuCode}`)
				uni.share({
					provider: "weixin", //分享服务提供商(即weixin|qq|sinaweibo)
					scene: scene, //场景,可取值参考下面说明。
					type: 0, //分享形式
					href: `${domain}${curRoute}?skuCode=${this.goodsParams.skuCode}`, //跳转链接
					title: `${this.goodsParams.goodsName}`, //分享内容的标题
					summary: "我在某某商城发现了一个很不错的商品, 快来看看吧", //分享内容的摘要
					imageUrl: `${this.$domain}${this.goodsParams.dataPic}`, //图片地址
					success: function(res) {
						that.posters = false; //成功后关闭底部弹框
					},
					fail: function(err) {
						uni.showToast({
							title: '分享失败',
							icon: 'none',
							duration: 2000
						})
						that.posters = false;
					}
				});
		}
	}
}
</script>

二、判断用户是否安装APP,已安装直接打开,未安装跳转下载页

参考链接: https://blog.csdn.net/qq_36710522/article/details/100769219?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-100769219-blog-120038804.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-100769219-blog-120038804.pc_relevant_default&utm_relevant_index=9

举例:

在这里插入图片描述

代码:

<!-- 立即下载 -->
<view class="download">
	<view class="text"> 某某商城 </view>
	<view class="btn" @click="downloadNow"> 立即下载 </view>
</view>
// 判断是ios还是android  在created的时候调用
iosOrAndroid() {
	var u = navigator.userAgent,
		app = navigator.appVersion;
	var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Linux") > -1;
	var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
				
	let curRoute = "/pages/install/main"; 
	if (isAndroid) {
		this.isAndroid = true;
		this.schemeUrl = 'runtestapp://';  //安卓 通过配置的schemes 打开已经安装的app
		this.downloadUrl = `index.html#${curRoute}`;  //静态下载页
	}
	if (isIOS) {
		this.isIos = true;
		this.schemeUrl = 'runtestapp://';  //ios 通过配置的urlschemes 打开已经安装的app
		this.downloadUrl = `index.html#${curRoute}`;  //静态下载页
	}
},
// 立即下载
downloadNow() {
	if (!this.isBlackApp()) {
		console.log('===========》打开或下载app')
		this.openTuer();
	} else { // 引导客户在浏览器打开
		uni.showToast({
			title: '点击右上角在浏览器中打开后下载',
			icon: 'none',
			duration: 3000
		})
		return;
	}
},
// 判断是否在自己的app内打开
isBlackApp() {
	var u = navigator.userAgent.toLowerCase();
	console.log(u, "===========》userAgent");
    return u.indexOf("qj-wemini") > -1 || u.indexOf("myCompShopping") > -1;
},
// 点击打开app
openTuer() {
	this.jumpApp(this.schemeUrl);
	this.noApp();
},
// 跳转打开app
jumpApp(t) {
	console.log(t, "===========》jumpApp");
	try {
		var e = navigator.userAgent.toLowerCase(),
			n = e.match(/cpu iphone os (.*?) like mac os/);
		if (((n = null !== n ? n[1].replace(/_/g, ".") : 0), parseInt(n) >= 9)) {         		
		    //ios8之后的版本
			window.location.href = t;
		} else { //注意iOS8之前是可以使用iframe来实现的
			var r = document.createElement("iframe");
			(r.src = t), (r.style.display = "none"), document.body.appendChild(r);
		}
	} catch (e) {
		window.location.href = t;
	}
},
// 无响应或者没安装跳转下载
noApp() {
	console.log("===========》noApp");
	var t = Date.now(),
		r = this.downloadUrl;
	this.timer = setTimeout(function() {
		return Date.now() - t > 2200 ?
			(clearTimeout(this.timer), !1) :
			!document.webkitHidden &&
			!document.hidden &&
			void(location.href = r);
	}, 2000);
}

三、 uniapp 在外部打开APP

参考链接:https://www.jianshu.com/p/09a4303e49c9

  1. 配置: manifest.json -> app-plus -> distribute 下分别配置安卓的schemes和ios的urltypes
    如图: 在这里插入图片描述
  2. 使用
<a href="runtestapp://">打开APP<a><br/>
或
window.location.href = "runtestapp://"

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

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

相关文章

从零开始的数模(十一)微分方程建模

目录 一、概念 1.1什么是微分方程建模 1.2使用场合 二、基于python的微分方程建模 2.1scipy.integrate.odeint() 函数 ​编辑2.2案例 ​编辑 三、基于MATLAB的微分方程建模 四、偏微分方程的求解 一、概念 1.1什么是微分方程建模 微分方程建模是数学模型的重要方法&am…

AcWing 1081. 度的数量(数位DP)

AcWing 1081. 度的数量&#xff08;数位DP&#xff09;一、问题二 、数位DP三、解析1、题意理解2、题目分析三、代码一、问题 二 、数位DP 这道题是一道数位DP的题目&#xff0c;其实数位DP更像我们在高中阶段学过的排列组合问题中的分类讨论。 数位DP顾名思义就是按照数字的…

B/S端界面控件DevExtreme v22.2新功能 - 如何在日历中显示周数?

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

LeetCode-1145. 二叉树着色游戏【深度优先搜索,二叉树】

LeetCode-1145. 二叉树着色游戏【深度优先搜索&#xff0c;二叉树】题目描述&#xff1a;解题思路一&#xff1a;深度优先搜索分别计算x的左子树lsz和右子树rsz的节点个数。那么除去x与其左右子树的父子树的节点个数为n-1-lsz-rsz。贪心的&#xff0c;那么二号玩家其实可以占据…

Java基础学习笔记(十八)—— 转换流、对象操作流

转换流、对象操作流1 转换流1.1 构造方法1.2 指定编码读写2 对象操作流2.1 对象操作流概述2.2 对象序列化流2.3 对象反序列化流2.4 案例1 转换流 1.1 构造方法 转换流就是来进行字节流和字符流之间转换的 InputStreamReader&#xff1a;是从字节流到字符流的桥梁&#xff0c;…

Linux(八)线程概念

1、线程的本质 线程就是一个进程内部的控制序列 是CPU进行执行调度的基本单元。&#xff08;调度一段代码的执行是通过线程完成的&#xff09; 一个进程中至少有一个线程&#xff08;所以进程与线程的数量关系是 一对一 或 一对多&#xff09; 2、为什么把线程称为LWP LWP…

数学建模之熵权法(SPSSPRO与MATLAB)

数学建模之熵权法&#xff08;SPSSPRO与MATLAB&#xff09;一、基本原理对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&#xff0c;其信息熵值越小&#xff0c;指标的离散程度越大(表明指标值得变异程度越大&#xff0c;提供的信息量越多)&#xff0c;该指标对综…

Maxout 激活函数与 Max-Feature-Map (MFM)

前言 最近在读 A Light CNN for Deep Face Representation With Noisy Labels 提到 maxout 激活函数&#xff0c;虽然很好理解&#xff0c;激活的时候选取最大值即可&#xff0c;但是具体细节看了看相关的资料反倒混淆了。参考了一个相关的视频&#xff0c;大致屡清楚为什么说…

技术周 | qemu网络收发包流程

通常我们使用qemu创建虚拟机时&#xff0c;会使用下面的选项指定虚拟网卡设备的类型&#xff0c;以及桥接、tap设备参数等&#xff0c;如下&#xff1a; -device选项用于给虚拟机分配虚拟设备&#xff0c;如磁盘设备、网卡设备等 -netdev选项用于配置虚拟设备的后端&#xff0…

MACD底背离选股公式以及技术指标公式

今天介绍MACD底背离选股公式&#xff0c;整体来说编写难度比较大&#xff0c;按照MACD底背离的定义&#xff0c;需要分别找到2个价格波段低点以及快线DIF的2个低点&#xff0c;并进行比较&#xff0c;最终实现选股。 一、MACD底背离选股公式&#xff08;平替版&#xff09; 首先…

ES6 简介(一)

文章目录ES6 简介&#xff08;一&#xff09;一、 概述1、 导读2、 Babel 转码器2.1 是什么2.2 配置文件 .babelrc2.3 命令行转码2.4 babel-node2.5 babel/register2.6 polyfill2.7 浏览器环境二、 变量1、 let2、 const3、 ES6 声明变量4、 顶层对象的属性5、 globalThis 对象…

TCP协议面试灵魂12 问(二)

为什么不是两次&#xff1f; 根本原因: 无法确认客户端的接收能力。 分析如下: 如果是两次&#xff0c;你现在发了 SYN 报文想握手&#xff0c;但是这个包滞留在了当前的网络中迟迟没有到达&#xff0c;TCP 以为这是丢了包&#xff0c;于是重传&#xff0c;两次握手建立好了…

机器视觉高速发展催热人工智能市场,深眸科技深度布局把握新机遇

曾经&#xff0c;冰箱侧身的标签、空调背面不显眼的小螺丝、微波炉角落里的型号编码等质量检测&#xff0c;是工业生产线中最费人工、最难检测的“老大难”。这主要是因为我国家电行业长期以混产为主要生产方式&#xff0c;一条生产线上可能有几十种型号的钣金件产品同时经受质…

文档存储Elasticsearch系列--2 ES内部原理

前言&#xff1a;ES作为nosql 的数据存储&#xff0c;为什么它在承载PB级别的数据的同时&#xff0c;又可以对外提高近实时的高效搜索&#xff0c;它又是通过什么算法完成对文档的相关性分析&#xff1b;又是怎么保证聚合的高效性&#xff1b; 1 ES 分布式文档存储&#xff1a…

人工智能导论——谓词公式化为子句集详细步骤

在谓词逻辑中&#xff0c;有下述定义&#xff1a; 原子&#xff08;atom&#xff09;谓词公式是一个不能再分解的命题。 原子谓词公式及其否定&#xff0c;统称为文字&#xff08;literal&#xff09;。PPP称为正文字&#xff0c;P\neg PP称为负文字。PPP与P\neg PP为互补文字。…

MySQL实战作业示例:从离线文件生成数据库

前言 MySQL实战的课后作业&#xff0c;作业内容具体见 https://bbs.csdn.net/topics/611904749 截至时间是 2023年2月2日&#xff0c;按时提交的同学有一位。确实这次的作业非常有挑战性&#xff0c;作业用到的内容没有百分之百的学过&#xff0c;需要大家进行深入而有效的搜索…

【MyBatis】高级映射多对一,一对多和延迟加载

数据库准备:1. 多对一:多个学生对应一个班级(学生表是主表, 班级表是副表)多种实现方式, 常见的包括三种第一种方式&#xff1a; 一条sql语句, 级联属性映射// StudentMapper.xml // 一条sql语句, 级联属性映射 <resultMap id"studentResultMap" type"Studen…

Java当中的AQS

一、什么是AQS AQS的全称是:AbstractQueuedSynchronizer AQS是java当中的一个抽象类&#xff0c;用来构建锁和同步器。 例如我们常见的ReentrantLock&#xff0c;Semaphore等等都是通过AQS来构建的。 AQS的原理 如果被请求的共享资源没有被占用&#xff0c;那么就把请求资源…

spring boot集成xxl job

目录 1.xxl job介绍 2.搭建说明 (1)配置调度中心 (2)配置执行器 (3).执行 1.xxl job介绍 官网地址:分布式任务调度平台XXL-JOB XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 2.搭建说明 环境搭建主要分为两个部分…

《深入浅出计算机组成原理》学习笔记 Day19

冒险和预测&#xff08;三&#xff09;乱序执行参考乱序执行 尽管代码生成的指令是顺序的&#xff0c;但是如果后面的指令和前面的指令独立&#xff0c;完全不需要等待前面的指令运算完成&#xff0c;可以先执行。 这种解决方案称为乱序执行&#xff08;Out-of-Order Executi…