H5页面唤起指定app或跳转到应用市场

场景1:

在 h5 页面上,不管用户是否安装过该app,都直接跳转到应用市场,让用户从应用市场上打开app。

思路:

这种场景处理比较简单,直接判断判断是android端还是ios端,然后在点击按钮上赋值对应终端的应用市场下载链接就可以了,在微信上打开h5页面时也不用另外处理。跳转之前,系统会默认弹出对话框问是否跳转。

案例:

下图以ios端打开 淘宝 为例:

safari内打开h5页面
微信内打开h5页面
具体实现:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title></title><style type="text/css">body{padding-top: 30px;}.open-app {margin: 30px;border-radius: 5px;padding: 10px 20px;border: 1px solid #ccc;}</style><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script></head><body><a class="open-app">click me to store</a><script type="text/javascript">var iosLinkUrl = "http://apps.apple.com/cn/app/id387682726" // 淘宝 app store 下载地址var androidLinkurl = "https://a.app.qq.com/o/simple.jsp?pkgname=com.lucky.luckyclient" //(找不到淘宝应用宝地址,这里以lucky coffee为例)var u = navigator.userAgent, isAndroid, isIOSwindow.onload = function() {init()}function init() {isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端var link = isIOS ? iosLinkUrl : androidLinkurl$('a').attr('href', link)}</script></body>
</html>

场景2:

在 h5 页面上,用户点击打开app按钮,在用户手机上已经安装了App时,提示打开app,否则就引导提示用户前往应用市场。这样就方便了用户,而且在业务需要情况下,可以跳转到app指定页面和传参。

思路:
在 h5 页面上唤醒app ,需要用到 scheme协议(由app端小伙伴提供,关于什么是scheme文末补充),但是在微信浏览器里scheme不起作用,有没有印象有时在微信上打开的一些需要跳转到app的操作时,会提示在浏览器上打开,就是这个原因。
所以需要先判断是否为微信浏览器,是微信浏览器的话,提示到浏览器打开,不是的话,再判断是Android端还是iOS端,然后做相应的处理。

案例:
以打开 淘宝 为例:

具体实现:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title></title><style type="text/css">body{padding-top: 30px;}.open-app {margin: 30px;border-radius: 5px;padding: 10px 20px;border: 1px solid #ccc;}</style><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script></head><body><a class="open-app">click me to app</a><script type="text/javascript">$('a').click(function() {var u = navigator.userAgent;var isWeixin = u.toLowerCase().indexOf('micromessenger') !== -1; // 微信内var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端// 微信内if(isWeixin) {alert('请在浏览器上打开')} else {//android端if (isAndroid) {//安卓app的scheme协议window.location.href = 'taobao://';setTimeout(function(){let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden ||window.document.webkitHidden if(typeof hidden =="undefined" || hidden ==false){//应用宝下载地址 (emmm 找不到淘宝应用宝的地址,这里放的是 lucky coffee 地址)window.location.href ="https://a.app.qq.com/o/simple.jsp?pkgname=com.lucky.luckyclient";}}, 2000);}//ios端if (isIOS) {//ios的scheme协议window.location.href = 'taobao://'setTimeout(function(){let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden ||window.document.webkitHidden if(typeof hidden =="undefined" || hidden ==false){//App store下载地址window.location.href = "http://itunes.apple.com/app/id387682726";}}, 2000);}}});</script></body>
</html>

如果 能检测到 scheme 就跳转到协议 ‘taobao://’,即打开app;
safari内打开h5页面

如果2秒后还没有唤醒 ‘taobao://’,那么就认为该设备上没有安装淘宝app,即跳转到应用市场。
微信内打开h5页面

这里选择直接新开窗口来打开链接,或者也可以用到 iframe 框架来打开链接,但是 IOS9屏蔽了 iframe这个标签。

URL Scheme方式唤起Activity或App
URL Scheme是一种页面内跳转协议,通过这个协议可以比较方便的跳转到app某一个页面。

scheme应用场景
scheme 的应用场景很多,比如我们熟悉的:

  • 通过小程序,利用Scheme协议打开原生app;
  • H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面;
  • APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面;
  • APP根据URL跳转到另外一个APP指定页面;
  • 通过短信息中的url打开原生app

scheme协议格式:

[scheme]://[host][:port]/[path]?[query]

scheme: 协议名称(由开发人员自定义)(必要,其他都是可选)
host: 域名
port:端口
path: 页面路径
query: 请求参数

调用:
例如我们再 h5 页面上点击一个唤醒app按钮,如下:

<a href="yc://ycbjie:8888/from?type=yangchong">打开叮咚app</a>

那么这个协议的链接的有来,即再原生app的设置,是长这样的:

<activityandroid:name=".ui.main.ui.activity.SchemeFirstActivity"android:screenOrientation="portrait"><!--Android 接收外部跳转过滤器--><!--要想在别的App上能成功调起App,必须添加intent过滤器--><intent-filter><!-- 协议部分配置 ,注意需要跟web配置相同--><!--协议部分,随便设置 yc://ycbjie:8888/from?type=yangchong  --><data android:scheme="yc"android:host="ycbjie"android:path="/from"android:port="8888"/><!--下面这几行也必须得设置--><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /></intent-filter>
</activity>

需要原生app上先设置好了这些,h5上才能唤醒app。
参考:
Android自定义URL使用Scheme方式唤起Activity或App
Scheme协议详细介绍

h5跳转app指定页面及各种坑的总结

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

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

相关文章

MyBatis.Net 学习手记

MyBatis.NET的前身为IBatis&#xff0c;是JAVA版MyBatis在.NET平台上的翻版&#xff0c;相对NHibernate、EntityFramework等重量级ORM框架而言&#xff0c;MyBatis.NET必须由开发人员手动写SQL&#xff0c;相对灵活性更大&#xff0c;更容易保证DB访问的性能&#xff0c;适用开…

Python 使用 UTF-8 编码

From: http://blog.chenlb.com/2010/01/python-use-utf-8.html 一般我喜欢用 utf-8 编码&#xff0c;在 python 怎么使用呢&#xff1f; 1、在 python 源码文件中用 utf-8 文字。一般会报错&#xff0c;如下&#xff1a; File "F:\workspace\psh\src\test.py", line …

curl下载文件的命令

curl文件下载 curl将下载文件输出到stdout&#xff0c;将进度信息输出到stderr&#xff0c;不显示进度信息使用–silent 选项。1 . curl URL --silent 这条命令是将下载文件输出到终端&#xff0c;所有下载的数据都被写入到stdout。2 . curl URL --silent -O 使用选项 -O 将下载…

后台运行python程序 遇到缓冲区问题

From: http://www.iteye.com/topic/867446 环境&#xff1a;linux 一段执行时间很长的程序&#xff08;用python做hive客户端执行mapreduce&#xff09; 在linux后台执行&#xff0c;把结果输出到某文件&#xff1a; Python代码 python xxx.py > log.log& 遇到的问题…

[nodejs][html5][css3][js] 个人网站上线

各个功能详细代码 http://www.cnblogs.com/wangxinsheng/p/4263591.html 2015年1月31日 --- 虽然比较懒&#xff0c;但终于匆忙的弄了个个人网站上线&#xff0c;没有博客功能。。。只有些数据抓取&#xff0c;百度地图&#xff0c;视屏游戏功能。 可是heroku站点在国内的速度超…

各种URL生成方式的性能对比

在上一篇文章中我们列举了各种URL生成的方式&#xff0c;其中大致可以分为三类&#xff1a; 直接拼接字符串&#xff08;方法一及方法二&#xff09; 使用Route规则生成URL&#xff08;方法三&#xff09; 使用Lambda表达式生成URL&#xff08;方法四及方法五&#xff09; 我们…

element-ui中el-table的表头、内容样式

方式1&#xff1a; 直接在标签上添加上属性值&#xff1a; <el-table:header-cell-style"{background:#F3F4F7,color:#555}" ></el-table>方式2&#xff1a; 在method里面写上方法&#xff1a; rowClass({ row, rowIndex}) {console.log(rowIndex) //表…

python下设置urllib连接超时

From: http://blog.csdn.net/vah101/article/details/6175406 首先导入socket库 import socket 在开始连接前的代码中&#xff0c;再加入 socket.setdefaulttimeout(6) #6秒内没有打开web页面&#xff0c;就算超时 然后就可以开始连接了&#xff0c;比如 try: …

请移步到我的新浪博客

请移步到我的新浪博客http://blog.sina.com.cn/highlandcat转载于:https://blog.51cto.com/highlandcata/221449

疯狂喷气机

2/3D游戏&#xff1a;2D 辅助插件&#xff1a;原生 游戏制作难度系数&#xff1a;初级 游戏教程网址&#xff1a;http://www.raywenderlich.com/69392/make-game-like-jetpack-joyride-unity-2d-part-1 1、控制摄像机跟随人物移动 public GameObject targetObject; //目标对象p…

elementui表格-改变某一列的样式

cellStyle({ row, column, rowIndex, columnIndex }) {if (columnIndex 0) {// 指定列号return ‘padding:0‘} else {return ‘‘} },

正则表达式基础(一)

From: http://www.usidcbbs.com/read-htm-tid-1457.html Perl 中的正则表达式 正则表达式是 Perl 语言的一大特色&#xff0c;也是 Perl 程序中的一点难点&#xff0c;不过如果大家能够很好的掌握他&#xff0c;就可以轻易地用正则表达式来完成字符串处理的任务&#xff0…

CodeSmith--SchemaExplorer类结构详细介绍

CodeSmith----SchemaExplorer类结构详细介绍 CodeSmith与数据库的联系&#xff0c;在CodeSmith中自带一个程序集SchemaExplorer.dll&#xff0c;这个程序集中的类主要用于获取数据库中各种对象的结构。 <% Property Name"SourceTable" Type"SchemaExplorer.T…

vue element项目常见实现表格内部可编辑功能

目录 前言 正文 1.简单表格行内内部可编辑 2. 数据从后端取得表格行内可编辑 3.批量表格整体的可编辑 结语 前言 后台系统都是各种表格表单编辑&#xff0c;整理了下常见的几种实现表格编辑的方式&#xff0c;希望有用。使用框架&#xff1a;vueelement 表格行内内部可编辑 数…

tar

tar命令是Unix的一个shell命令&#xff0c;该命令可在为多个制定文件创建一个档案文件&#xff0c;也可以从一个档案文件中解压缩出文件。tar档案文件的扩展名为“.tar”。tar包中的文件并不是压缩文件&#xff0c;而是所有文件集合成的一个文件。 tar这个名字源自在磁带上备份…