iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >H5如何启动APP原生页面
  • 665
分享到

H5如何启动APP原生页面

2024-04-02 19:04:59 665人浏览 薄情痞子
摘要

这篇文章主要介绍“H5如何启动APP原生页面”,在日常操作中,相信很多人在H5如何启动APP原生页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”H5如何启动APP原生页面”

这篇文章主要介绍“H5如何启动APP原生页面”,在日常操作中,相信很多人在H5如何启动APP原生页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”H5如何启动APP原生页面”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、需要判断客户端的平台以及是否在微信浏览器中访问

1、客户端判断

在启动APP时,AndroidiOS系统处理的方式是不一样的,Android这边由于开放,可以在浏览器中通过<a>标签以及meta标签的方式,让浏览器app获取手机打开应用的权限进而启动APP。

而在ioS这边,IOS9以后的系统,则可以在APP开发过程中加入配置和逻辑代码编写,系统在浏览器即将访问到某个域名前就把这个域名对应的APP打开,这个有点闪,封闭还是有封闭的好处。

所以首先要在客户端判断,是Android系统还是IOS系统,判断代码如下

function isINIOs(){var userAgentInfo = navigator.userAgent ,
        Agents = ["iPhone" , "iPad", "iPod"];for(var v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {          return true;
        }
    }return false;
}

2、是否在微信内置浏览器中

无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,android这边屏蔽schema协议,除非公司是微信的伙伴加入了白名单才能

使用,IOS系统可以去访问app对应appstore的下载页,但是微信经常屏蔽appstore的这个网址,进而访问不到。比较方便的做法就是在微信浏览器中,无论是IOS还是android都去应用宝的下载(IOS 这边最后会到

appstore中)页面打开。我这边的需求是提示用户点击“...”用默认浏览器打开。

判断是否是在微信中,代码如下:

function isInWx(){var agent = window.navigator.userAgent.toLowerCase();return agent.match(/MicroMessenger/i) == 'micromessenger';
}

二、原理

首先无论是andorid还是IOS端,在浏览器中通过js都是无法判断该手机是否装有某APP的,即使这个浏览器有权限读取手机应用列表,也没有一个固定的对外api让咱们进行查询。而H5启动APP本质上是通过

URL scheme打开APP,一个APP可以设置一个或多个打开自己的URL scheme,浏览器去访问某一个APP的URL scheme,然后若系统安装有这个APP,则会请求权限去打开这个APP。其实也算是浏览器app

打开另一个app,iOS就可以使用 UIApplication 的 canOpenUrl 方法来检测URL scheme 是否能打开对应的APP,而android也是类似的方式。当然如果JS跳转URL scheme没有反应,也意味着这个手机没有

装这个app。

三、android平台

首先编辑AndroidManifest.xml,主要是增加第二个<intent-filter>

<activity android:name=".activity.LoadingActivity"  android:label="${APP_NAME}"  android:screenOrientation="portrait"  android:theme="@style/FirstActivityTheme">  <intent-filter>  <action android:name="android.intent.action.MAIN" />      <cateGory android:name="android.intent.category.LAUNCHER" />  </intent-filter>  <intent-filter>  <action android:name="android.intent.action.VIEW" />      <category android:name="android.intent.category.DEFAULT" />      <category android:name="android.intent.category.BROWSABLE" />      <data android:host="android"android:scheme="wushang" />  </intent-filter></activity>

比如此处wushang就是scheme,这个最好是app的唯一标识符,要不然在H5唤醒时,会出现一个选择框,选择启动哪一个APP。而host表示启动该页面,其实这个更应该用com.android.sky这样的包名来替代更好。

这样的情况完整的URL就是wushang://android?data=sky,后面是参数传递。在Activity中可以用如下代码获取参数

public void onCreate(Bundle savedInstanceState) {             
     Uri uridata = this.getIntent().getData();             
     String mydata = uridata.getQueryParameter("data");            
}

之后在进行字符串截取还是什么鬼的都随意啦。

接下来来谈谈前端代码,这里有两种情况

1、页面在刷新进入时,请求权限唤起APP

这个比较简单,就只用在页面的顶部head中加入meta标签即可

<meta Http-equiv="refresh" content="0;url=wushang://android?data=sky">

这个标注当页面刷新即去访问这个链接,进而启动APP。但是存在一个问题,如果是苹果系统的Safari浏览器的话,访问有这个meta的头,会给出错误提示,所以这个头部可以在后端进行页面渲染时通过客户端的

总类在加上去。

2、通过点击事件唤起APP

最简单的办法当然是直接使用a标签,如下

<a href="wushang://android">open Android app</a>

但是在实际使用时,是需要对客户端的平台类型还有是否在微信内置浏览器中进行判断的,所以这样的做法肯定是不行的。

接下来谈谈在开发过程中,遇到的一个问题,记录下。因为这边移动端使用的工具库库是zepto,采用的点击事件是tap,但是在用tap进行处理是经常要点很多下,才能唤起APP

<script type="text/javascript">
  $('#go').tap(function(){
      window.location.href = "wushang://android";
  });</script>

具体原因不知,可能是tap事件采用的是轻点触碰。然后摸索了下,才用click事件,或者直接在a标签上标注处理函数就没有这问题

<a id="go" >open Android app</a><a href="javascript:startApp()">
   open</a><script src="../res/lib/zepto.min.js?1.1.11"></script><script src="../res/lib/public.js?1.1.11"></script><script>$('#go').click(function () {       if(publicFun.isIos()){
          alert('it is IOS')
       }else{
          window.location.href = "wushang://android";
       }
    });function startApp(){       if(publicFun.isIos()){
          alert('it is IOS')
       }else{
          window.location.href = "wushang://android";
       }
    }</script>

所以决定以后遇到这类问题,就用这两种方式了。下面是实际的处理函数

 window.startApp = function(){     //启动APP if(publicFun.isInWx()){     //微信中alert("请在浏览器中打开");
     }else{      //非微信中if(publicFun.isIos()){    //IOS系统,直接去itunes中,既可以下载也可以打开window.location.href = "https://itunes.apple.com/cn/app/[name]/id[id]";
        }else{      //android系统,通过定时器的方式,判断是否安装有APPvar hasApp = true , t = 1000;
            setTimeout(function () {  //没有安装APP则跳转至应用宝下载,延时时间设置为2秒  if(!hasApp) window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=[name]";
            } , 2000);var t1 = Date.now();
            window.location.href = "wushang://android";
            setTimeout(function () {    //t的时间就是出发APP启动的时间,若APP启动了,再次返回页面时t2这行代码执行,hasApp即为true。反之若APP没有启动即为false  var t2 = Date.now();
              hasApp = !(!t1 || t2 - t1 < t + 150);
            } , t);
        }
     }
  }

其实有个非常简单的办法,就是直接跳转应用宝。无论是在android还是IOS,以及微信非微信。应用宝的下载页面都有下载和打开两个功能(如果是在IOS平台,它是通过连接app store的方式)

四、IOS平台

针对ios9及以上的打不开问题,实际上ios9提供了更好的解决方案————通用链接。

这是iOS9推出的一项功能,如果你的应用支持Universal Links(通用链接),那么就能够方便的通过传统的HTTP链接来启动APP(如果iOS设备上已经安装了你的app,不需要额外做任何判断等),或者打开网页(iOS设备上没有安装你的app)。或许可以更简单点来说明,在iOS9之前,对于从各种从浏览器,Safari、UIWEBView或者 WKWebView中唤醒APP的需求,我们通常只能使用scheme。

以上来自网上关于通用链接的介绍,对于前端简单点讲就是你访问一个http的url,如果这个url带有你提交给开发平台的配置文件中匹配规则的内容,ios系统会去尝试打开你的app,如果打不开,系统就会在浏览器中转向你要访问的链接。很好的一个属性,因为通过这个属性在ios9上我们能够绕过微信的拦截从而打开app。

所以上面的点击事件,仅仅是去访问app store,因为若app已安装,在浏览器访问时,就已经去到APP中了。

这些都是IOS配置上的东西,就不多写了。至于传参,以及页面定向,其实也就是相当于在UIWebView中获取当前连接的URL,然后进行字符串拆分以及校验,即可判断去哪个页,以及获取参数值。

到此,关于“H5如何启动APP原生页面”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: H5如何启动APP原生页面

本文链接: https://www.lsjlt.com/news/78808.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • H5如何启动APP原生页面
    这篇文章主要介绍“H5如何启动APP原生页面”,在日常操作中,相信很多人在H5如何启动APP原生页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”H5如何启动APP原生页面”...
    99+
    2024-04-02
  • html5启动原生APP的方法
    这篇文章主要介绍html5启动原生APP的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、需要判断客户端的平台以及是否在微信浏览器中访问1、客户端判断在启动APP时,Android和IOS系统处理的方式是不一样...
    99+
    2023-06-09
  • Android与H5交互 -- 点击H5跳转到 Android原生 页面 ,webview与h5(js)交互
    目录标题 Android与H5交互一、清单文件,增加的配置二、在你需要跳转的页面,清单文件中加入如下配置:三、整体结构布局如下 :四、贴一下html里面的代码吧五、具体实现如下: ...
    99+
    2023-09-17
    android studio
  • H5页面如何适配iPhoneX
    这篇文章主要介绍了H5页面如何适配iPhoneX,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前后效果图:大家都知道,iphoneX,屏幕顶...
    99+
    2024-04-02
  • 原生js实现页面滚动动画
    本文实例为大家分享了js实现页面滚动动画的具体代码,供大家参考,具体内容如下 需求: 1 页面滚动到对应板块,左侧对应的索引高亮2 点击左侧的索引,滚动到对应的板块 代码如下,直接...
    99+
    2024-04-02
  • 微信小程序web-view嵌入uni-app H5页面,通过H5页面跳转其他小程序如何操作?
    1、H5页面代码 wx.miniProgram.reLaunch({ url: `/pages/index/indexappId=${您的微信小程序appId}` });//触发小程序刷新页面获取appId  微信小程序appId查看...
    99+
    2023-08-31
    小程序 微信小程序 前端
  • h5页面如何跳到小程序支付页面
    在h5页面中调用小程序支付页面的方法H5页面代码<body ><div class="container"><button onclick="testPay()">...
    99+
    2024-04-02
  • h5页面如何连接小程序
    在h5页面中连接小程序的方法首先,在小程序页面内嵌h5网页;<view class="page-body"><web-view src="https://xxx.com/test.html&q...
    99+
    2024-04-02
  • webpack如何自动生成html页面
    这篇文章主要为大家展示了“webpack如何自动生成html页面”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“webpack如何自动生成html页面”这篇文章吧...
    99+
    2024-04-02
  • VB.NET如何生成静态页面和分页原理
    这篇文章主要为大家展示了“VB.NET如何生成静态页面和分页原理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET如何生成静态页面和分页原理”这篇文章吧。1、VB.NET生成静态页面和分...
    99+
    2023-06-17
  • H5页面中如何使用html5-canvas
    小编给大家分享一下H5页面中如何使用html5-canvas,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!H5页面中使用html5-canvas总结html5canvas 插件实现的功能是,将dom节点的内容复制到一个动态...
    99+
    2023-06-27
  • H5如何制作一个注册页面
    这篇文章将为大家详细讲解有关H5如何制作一个注册页面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:<!DOCTYPE html> ...
    99+
    2024-04-02
  • 小程序如何外链到H5页面
    在小程序使用web-view组件外链到h5页面新建一个web-view标签,并指向h5页面的链接;<web-view src="h5页面链接"> </web-view>通过 w...
    99+
    2024-04-02
  • iphoneX如何适配客户端H5页面
    这篇文章主要介绍了iphoneX如何适配客户端H5页面,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言目前,很多APP设计师小伙伴已经开始...
    99+
    2024-04-02
  • 小程序中如何嵌套H5页面
    小程序使用webview组件嵌套h5页面首先,在小程序wxml文件中直接用webview组件,用src属性绑定h5页面的网址;<web-view src="h5页面的网站"></web-vie...
    99+
    2024-04-02
  • js如何实现移动端H5页面手指滑动刻度尺功能
    这篇文章将为大家详细讲解有关js如何实现移动端H5页面手指滑动刻度尺功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在...
    99+
    2023-06-09
  • Android如何在原生App中嵌入Flutter
    目录第一步:新建Flutter module第二步:同步Flutter module依赖第三步:设置JDK版本第四步:依赖Flutter module本文参考文档Add Flutte...
    99+
    2024-04-02
  • JS如何自动生成动态HTML验证码页面
    这篇文章主要为大家展示了“JS如何自动生成动态HTML验证码页面”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS如何自动生成动态HTML验证码页面”这篇文章吧...
    99+
    2024-04-02
  • Android如何获取APP启动时间
    目录1.通过看logcat下的日志2.通过adb命令3.通过写代码获取1.通过看logcat下的日志 2.通过adb命令 3.通过写代码获取 3.1写一个工具类打印系统时间 ...
    99+
    2024-04-02
  • 使用Android如何模仿APP启动动画
    今天就跟大家聊聊有关使用Android如何模仿APP启动动画,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。效果图:animation.gif实现思路:仔细观察,可以看出动画的执行分为...
    99+
    2023-05-31
    android 动动 pp
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作