详解怎样根据H5(访问器/WebView/别的)勾起当地

日期:2021-01-19 类型:科技新闻 

关键词:网站建设,创建网站,免费建站平台,智能建站,企业建网站

前两天接到1个无线网络的要求,我这个小白但是忙活了好几日……在网页页面上有1个联接, 假如客户安裝了APP,则点一下开启对应的APP假如客户沒有安裝,则点一下开启对应的设定联接.上网检索了1下,基础都说能够完成,可是具体状况却不开朗.

自然只是在其中的1个要求,也有的是如今各类app,共享出去的H5网页页面中,1般都会带着1个马上开启的按钮,假如当地安裝了app,那末就立即勾起当地的app,假如沒有安裝,则自动跳转到免费下载。这是1个很一切正常的营销推广和导总流量的对策,近期商品主管就提出了这样的1个要求,做1个像今天今日头条作用1样的带开启app的免费下载条这些,别的的就不说了!

下面进到大家今日的正题,H5怎样开启或说勾起手机上当地的app,纵观百度搜索和Google上面的回答,不过是两种:

第1种方法:

根据在html的a标识里边的href中立即配备android端schema,自然,假如有host别的的配备,跟在后边便可以了,android端配备和编码以下:

android端配备:

    <activity android:name = ".MainActivity">
        <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="jingewenku.com"
                             android:scheme="abraham"/>
        </intent-filter>
    </activity>

注:假如这个是配备在起动页要和标识并列在1起,要不然运作后手机上app的标志会沒有;留意schema协议书要小写,不然会有不可以回应的出现异常!

html编码:

<html>
       <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF⑻"> 
                      <title>Insert title here</title>
       </head> 
        <body> 
            <a href="abraham://jingewenku.com/?pid=1">开启app</a><br/>
        </body>
</html>

 这里大家看来看schema拼接协议书的文件格式:

< a href="[scheme]://[host]/[path]?[query]">起动运用程序流程< /a>

各个新项目含意以下所示:

scheme:辨别起动的App。 ※详尽后述

host:适度记叙

path:传值时务必的key ※沒有还可以

query:获得值的Key和Value ※沒有还可以

以上就可以完成开启当地的app了,自然是在app存在的状况下,不然的话沒有反映。

大伙儿将会会问上面的html编码中配备的并不是android里边配备的schema协议书吗?我明明沒有配备pid,为何要写这个呢?这是由于大家一些情况下在勾起当地app的情况下将会会向app传送1些主要参数,这些主要参数大家便可以配备在这里,大家只必须在oncreate里边获得便可以了,编码以下:

Intent intent = getIntent();
    Uri uri = intent.getData();
    if (uri != null) {
        String pid = uri.getQueryParameter("pid");
    }

假如还要想获得android里边配备的schema协议书的话,还能够这样:

Uri uri = getIntent().getData();
if(uri != null) {
 // 详细的url信息内容
 String url = uri.toString();
 Log.e(TAG, "url: "  + uri);
 // scheme一部分
 String scheme = uri.getScheme();
 Log.e(TAG, "scheme: "  + scheme);
 // host一部分
 String host = uri.getHost();
 Log.e(TAG, "host: "  + host);
 //port一部分
 int port = uri.getPort();
 Log.e(TAG, "host: "  + port);
 // 浏览路劲
 String path = uri.getPath();
 Log.e(TAG, "path: "  + path);
 List<String> pathSegments = uri.getPathSegments();
 // Query一部分
 String query = uri.getQuery();
 Log.e(TAG, "query: "  + query);
 //获得特定主要参数值
 String goodsId = uri.getQueryParameter("goodsId");
 Log.e(TAG, "goodsId: "  + goodsId);
}

 怎样分辨1个Schema是不是合理 :

PackageManager packageManager = getPackageManager();
Intent intent = newIntent(Intent.ACTION_VIEW, Uri.parse("abraham://jingewenku.com:8888/goodsDetail?goodsId=10011002"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
booleanisValid = !activities.isEmpty();
if(isValid) {
 startActivity(intent);
}

这类方法也是我百度搜索到的数最多的方法,可是这样就带来了1个难题了,上面的要求说的是“在网页页面上有1个联接, 假如客户安裝了APP,则点一下开启对应的APP;假如客户沒有安裝,则点一下开启对应的设定联接”,这显著就不符要求了,这只能做为1些某些要求来应用了。

第2种方法:

既然根据在href配备schema协议书不好,那就只能根据js编码来完成了,仅有这样才可以依据分辨完成app有的情况下就开启,沒有的情况下就自动跳转到免费下载连接免费下载。
大家了解,js是没法分辨手机上是不是安裝了某款app的,因此大家只可以曲线图救国了,大家能够获得時间假如,长期不可以呼起app则默认设置为沒有安裝这款app,随后自动跳转到免费下载页。自然这并不是我想出来的,是在网上的各位巨头的念头。在这里又要细分成两种状况了。

1.立即唤起

表明:根据h5可换醒app,如浏览1个URL,点一下按钮,开启运用,假如该运用APP沒有安裝,那末立即自动跳转到App Store的APP免费下载网页页面,根据点一下的方法适配性较好,假如安裝了app,在手机上各大访问器(360访问器、uc访问器、搜狗搜索访问器、QQ访问器、百度搜索访问器 )和QQ顾客端中,能唤起。手机微信、微博顾客端、腾迅新浪微博顾客端没法唤起。

编码以下:

<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf⑻">
<head>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<title>点一下唤起demo</title>
</head>
<body>
<style>
#zjmobliestart{font-size:40px;}
</style>
<!--
表明:根据h5可换醒app,如浏览1个URL,点一下按钮,开启运用,假如该运用APP沒有安裝,那末立即自动跳转到App Store的APP免费下载网页页面,根据点一下的方法。适配性较好,假如安裝了app,在手机上各大访问器(360访问器 uc访问器 搜狗搜索访问器 QQ访问器 百度搜索访问器 )和QQ顾客端中,能唤起。手机微信 微博顾客端 腾迅新浪微博顾客端没法唤起。
-->
<a href="zjmobile://platformapi/startapp" id="zjmobliestart" target="_blank">唤起浙江挪动手机上运营厅!</a>
<script type="text/javascript"> 
function applink(){  
    return function(){  
        var clickedAt = +new Date;  
         setTimeout(function(){
             !window.document.webkitHidden && setTimeout(function(){ 
                   if (+new Date - clickedAt < 2000){  
                       window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com';  
                   }  
             }, 500);       
         }, 500)   
    };  
}  
document.getElementById("zjmobliestart").onclick = applink();  
</script>   
</body>
</html>

2.点一下唤起

表明:根据h5可换醒app,如浏览1个URL就可以立即开启运用,假如该运用APP沒有安裝,那末立即自动跳转到App Store的APP免费下载网页页面。适配性1般:在手机上各大访问器(360访问器、uc访问器、搜狗搜索访问器 QQ访问器、百度搜索访问器 )能唤起。手机微信、QQ顾客端、微博顾客端、 腾迅新浪微博顾客端没法唤起。

编码以下:

<!Doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf⑻">
<head>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<title>立即唤起demo</title>
</head>
<body>
<style>
#zjmobliestart{font-size:40px;}
</style>
<!--
表明:根据h5可换醒app,如浏览1个URL就可以立即开启运用,假如该运用APP沒有安裝,那末立即自动跳转到App Store的APP免费下载网页页面
适配性1般:在手机上各大访问器(360访问器 uc访问器 搜狗搜索访问器 QQ访问器 百度搜索访问器 )能唤起。手机微信 QQ顾客端 微博顾客端 腾迅新浪微博顾客端没法唤起。
-->
<p id="zjmobliestart">唤起浙江挪动手机上运营厅!</p>
<script type="text/javascript"> 
function applink(){   
    window.location = 'zjmobile://platformapi/startapp';  
        var clickedAt = +new Date;  
         setTimeout(function(){
             !window.document.webkitHidden && setTimeout(function(){ 
                   if (+new Date - clickedAt < 2000){  
                       window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com';  
                   }  
             }, 500);       
         }, 500)   

}
applink();
</script>   
</body>
</html>

 这样就进行了大家的要求了,在这个全过程中,也遇到了许多热情人的解读,这里纪录1下,一开始有人不理解我的要求,认为我是在android端来完成,让我根据包名的方法来检测app是不是安裝,这里纪录1正下方法,编码以下:

更多方式请查询我的专用工具类: CommonUtilLibrary

也有的便是认为我是要在app里边根据载入webview的方式来勾起当地的app,这里也纪录1下,编码以下:

webView.setWebViewClient(new WebViewClient(){ 
            @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                    Uri uri=Uri.parse(url);
                   if(uri.getScheme().equals("abraham")&&uri.getHost().equals("jingewenku.com")){ 
                            String arg0=uri.getQueryParameter("arg0");
                           String arg1=uri.getQueryParameter("arg1"); 
                      }else{ 
          view.loadUrl(url); 
        } return true; 
}});

还要留意的是,假如是在手机微信中勾起当地app,手机上的手机微信中,是运用手机微信内嵌的访问器(你能够将以前获得的网页页面在服务器上的详细地址发给你的任何联络人,点一下推送的信息便可开启网页页面)开启那个简易的HTML网页页面,留意:立即开启scheme://host/datastring是不能行的,手机微信不容易把这串标识符分析成网站地址,务必包装成网页页面才可以依靠手机微信的访问器开启。进到后便是大家不久设计方案的网页页面。这个情况下,立即点一下“起动运用程序流程”是不容易唤起以前安裝的APP的,由于手机微信做了屏蔽,你必须在右上角的菜单选中择“在访问器中开启”。这个情况下,一些访问器便可以唤起,一些访问器则不好,例如笔者检测机MX4上的内嵌访问器不好,UC访问器就可以唤起。一部分访问器不可以唤起,笔者查阅了许多材料也不可以完全处理,我如今唯1能想起的是将遇到难题的访问器让前端开发做1个分辨,提醒不适用,应当应用甚么访问器。假如有读者有处理计划方案,敬请留言,多谢!

续篇:

手机微信中为何没法唤起App,必须“用访问器开启”?

由于手机微信对全部的共享联接做了scheme屏蔽,也便是说共享联接中全部针对scheme的启用都被手机微信封掉了。

那为何一些运用是能够勾起的,例如大家评价,嘀嘀打车?

从非技术性角度讲,由于大家评价,嘀嘀打车全是手机微信的干儿子,亲儿子。针对儿子有独特照料。

从技术性角度讲,手机微信有1个白名单,针对在白名单中的共享联接是不容易屏蔽掉scheme启用的。

听不搞清楚?那大家举1个事例。

例如大家评价的共享联接是 http://dazhongdianping.share.1.com

对应到手机微信白名单中就会有 http://dazhongdianping 这1项,全部源自于这个联接的共享,都不容易屏蔽scheme,

例如 http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com

即使是大家评价的子企业还可以http://zigongsi.dazhongdianping.share.3.com,根网站域名也在白名单中,因此还可以应用。

到这里,大伙儿就应当搞清楚,想借用大家评价的scheme,绕开这个难题是不能能的,除非你的共享联接能挂到大家评价的根网站域名上。

这个难题应当解释清晰了,此外提1句,针对免费下载apk这类,手机微信是屏蔽任何运用的,针对儿子也不列外,因此你想出示免费下载连接,不管你是否儿子,都逃但是应用访问器开启当中low的方法了.

附录:普遍运用的URL Scheme

1,系统软件默认设置运用

名字 URL Scheme Bundle identifier Safari http://   maps http://maps.google.com   Phone tel://   SMS sms://   Mail mailto://   iBooks ibooks://   App Store itms-apps://itunes.apple.com   Music music://   Videos videos://  

2,常见第3方手机软件

名字 URL Scheme Bundle identifier QQ mqq://   手机微信 weixin://   腾迅新浪微博 TencentWeibo://   淘宝 taobao://   付款宝 alipay://   新浪微博 sinaweibo://   weico新浪微博 weico://   QQ访问器 mqqbrowser:// com.tencent.mttlite uc访问器 dolphin:// com.dolphin.browser.iphone.chinese 欧朋访问器 ohttp:// com.oupeng.mini 搜狗搜索访问器 SogouMSE:// com.sogou.SogouExplorerMobile 百度搜索地形图 baidumap:// com.baidu.map Chrome googlechrome://   优酷 youku://   京东 openapp.jdmoble://   人人 renren://   美团 imeituan://   1号店 wccbyihaodian://   我查查 wcc://   有道词典 yddictproapp://   知乎 zhihu://   评价 dianping://   微盘 sinavdisk://   豆瓣fm doubanradio://   网易公布课 ntesopen://   个人名片全能型王 camcard://   QQ歌曲 qqmusic://   腾迅视頻 tenvideo://   豆瓣电影 doubanmovie://   网易云歌曲 orpheus://   网易新闻 newsapp://   网易运用 apper://   网易彩票 ntescaipiao://   有道云笔记 youdaonote://   多看 duokan-reader://   全国性空气品质指数值 dirtybeijing://   百度搜索歌曲 baidumusic://   下厨房 xcfapp://  

以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。