返回顶部
首页 > 资讯 > 精选 >html5启动原生APP的方法
  • 291
分享到

html5启动原生APP的方法

2023-06-09 10:06:44 291人浏览 独家记忆
摘要

这篇文章主要介绍HTML5启动原生APP的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、需要判断客户端的平台以及是否在微信浏览器中访问1、客户端判断在启动APP时,Android和iOS系统处理的方式是不一样

这篇文章主要介绍HTML5启动原生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");            }

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

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

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

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

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

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

总类在加上去。

通过点击事件唤起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"></script><script src="../res/lib/public.js"></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系统,通过定时器的方式,判断是否安装有APP            var 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提供了更好的解决方案&mdash;&mdash;&mdash;&mdash;通用链接。

这是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,然后进行字符串拆分以及校验,即可判断去哪个页,以及获取参数值。

以上是“html5启动原生APP的方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: html5启动原生APP的方法

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

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

猜你喜欢
  • html5启动原生APP的方法
    这篇文章主要介绍html5启动原生APP的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、需要判断客户端的平台以及是否在微信浏览器中访问1、客户端判断在启动APP时,Android和IOS系统处理的方式是不一样...
    99+
    2023-06-09
  • H5如何启动APP原生页面
    这篇文章主要介绍“H5如何启动APP原生页面”,在日常操作中,相信很多人在H5如何启动APP原生页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”H5如何启动APP原生页面”...
    99+
    2024-04-02
  • HTML5 APP开发与原生APP区别是什么
    今天小编给大家分享一下HTML5  APP开发与原生APP区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有...
    99+
    2024-04-02
  • Android app启动节点与上报启动的方法
    本文小编为大家详细介绍“Android app启动节点与上报启动的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android app启动节点与上报启动的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • android开机自动启动app的解决方法
    经过多次尝试之后,终于找到了开机自动启动App的解决方法 开机后会停留在锁屏页面,且短时间内如果没有进行解锁操作,屏幕会进入休眠状态,所以启动APP时需要先唤醒屏幕和解锁屏幕 定义一...
    99+
    2024-04-02
  • Android app启动图适配方法实例
    目录前言1、设置splash主题2、 splash_bg 设置:3、splash布局文件设置:附问题:项目启动时,会有白屏现象(在点击 应用图标到看到启动页之间)。总结前言 app启...
    99+
    2024-04-02
  • Android实现开机自动启动Service或app的方法
    本文实例讲述了Android实现开机自动启动Service或app的方法。分享给大家供大家参考,具体如下: 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(...
    99+
    2022-06-06
    自动 service 方法 app Android
  • 详解Android冷启动实现APP秒开的方法
    一、前言 在阅读这篇文章之前,首先需要理解几个东西: 1、什么是Android的冷启动时间?       冷启动时间是指用户从...
    99+
    2022-06-06
    方法 启动 app Android
  • Android APP启动方式、启动流程及启动优化分析
    本文章向大家介绍Android app应用启动的一些相关知识,包括app启动方式、app启动流程和app启动优化等知识!  app应用启动方式 1、冷启动  ...
    99+
    2022-06-06
    app启动 优化 app Android
  • Html5原生拖拽是什么和使用方法
    这篇文章主要介绍“Html5原生拖拽是什么和使用方法”,在日常操作中,相信很多人在Html5原生拖拽是什么和使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Html5原生拖拽是什么和使用方法”的疑惑有所...
    99+
    2023-06-09
  • Win7常见启动故障产生的原因及解决方法整理
      相信绝大多数朋友都用上了Win7系统了吧,Win7系统虽然比以前其他版本的Windows系统都稳定得多,但是由于安装某些特殊软件或误操作,系统还是会出现各种启动故障。接下来,笔者就来给大家分析一下Win7常见启动故障...
    99+
    2023-06-02
    win7 启动故障 解决 原因 故障 整理 方法
  • app原生开发和非原生开发的区别
    一、开发语言不同 原生开发:原生应用开发指的是使用像Java(安卓)、Swift或Objective-C(iOS)这样的语言来进行开发。这些语言是由各自的操作系统开发商提供的,开发出的应用程序能够更好地利用系统的资源和功能。 非...
    99+
    2023-10-29
    区别 app
  • 详解Android中App的启动界面Splash的编写方法
    一、Splash界面的作用 用来展现产品的Logo 应用程序初始化的操作 检查应用程序的版本 检查当前应用程序是否合法注册 二、界面的xml定义 写一个布局背景设置为产品的lo...
    99+
    2022-06-06
    方法 启动 app Android
  • Android中通过外部程序启动App的三种方法
    第一种:直接通过包名: 代码如下: Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("...
    99+
    2022-06-06
    程序 方法 app Android
  • Android app启动时黑屏或者白屏的原因及解决办法
    1、产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。 示例: 2、解决办法 通过设置设...
    99+
    2022-06-06
    app启动 app Android
  • 无法启动DHCP Client的原因和解决方法
    本篇内容主要讲解“无法启动DHCP Client的原因和解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“无法启动DHCP Client的原因和解决方法”吧! 故障现象:由于误操作...
    99+
    2023-06-14
  • 谈win2003与win2008启动原理及双启动的故障解决方法
          最近经常有学生询问Win2008的启动相关问题以及早期Windows版本与vista或win2008并存时的启动问题,现在可以说正是处于操作系统新旧版本的过滤...
    99+
    2023-06-10
    win2003 win2008 启动原理 双启动 故障 启动 解决 原理
  • tomcat启动闪退的原因及解决方法
    这篇文章主要讲解了“tomcat启动闪退的原因及解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“tomcat启动闪退的原因及解决方法”吧!方法/步骤 下面我先跟大家确认一下问...
    99+
    2023-06-02
  • PHP启动失败的原因及处理方法
    PHP启动失败的原因及处理方法 PHP是一种广泛应用于服务器端脚本语言,它的灵活性和强大功能使其成为许多网站和应用程序的首选。然而,有时候我们在部署或使用PHP时会遇到PHP启动失败的...
    99+
    2024-03-12
    错误处理方法 php启动失败 启动原因 php脚本
  • mysql启动的方法
    mysql启动的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! MySQL是最受欢迎的开源SQL数据库管理系...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作