今天在做前端輸出的時候,需要和app的做些對接工作。就是在手機(jī)瀏覽器中下載某app時,能判斷該用戶是否安裝了該應(yīng)用。如果安裝了該應(yīng)用,就直接打開該應(yīng)用;如果沒有安裝該應(yīng)用,就下載該應(yīng)用。
那么下面就對在瀏覽器中,用js判斷某用戶是否安裝了該應(yīng)用,并判斷是否打開該應(yīng)用做個簡單的介紹。
那么,怎么判斷某用戶是否安裝了某應(yīng)用呢?
在這里,先寫段html代碼,如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<a href="某app下載鏈接"></a>
</body>
</html>
判斷手機(jī)端是否安裝某應(yīng)用,并打開該應(yīng)用的js代碼如下:
function isInstalled(){
var the_href=$(".down_app").attr("href");//獲得下載鏈接
window.location="apps custom url schemes";//打開某手機(jī)上的某個app應(yīng)用
setTimeout(function(){
window.location=the_href;//如果超時就跳轉(zhuǎn)到app下載頁
},500);
}
apps custom url schemes是什么
apps custom url schemes 是WAP端和APP端約定好的一個協(xié)議URL,如:
web2app://
和正常的URL一樣,除了protocol部分外,也可以有host、path及參數(shù),如:
web2app://openapp?type=1&id=12
具體要看各端約定,不過個人建議最好還是按照URL的組成規(guī)范來定義scheme,不然會引入由于URL不規(guī)范而導(dǎo)致的各種編碼問題。
2.注冊URL Scheme
安卓端:
(一般是在manifest.xml文件的activity的intent filter里面)
<span>
<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:scheme="**"
android:host="**.**"
android:pathPrefix="/**"> </data>
</intent-filter>
</span>
蘋果端:

3.web 前端調(diào)用:
前端通過:
window.location="url schemes://";//打開某手機(jī)上的某個app應(yīng)用
便可直接調(diào)用打開應(yīng)用。
希望傳參的話可以通過以下方式
window.location="URL Schemes://URL identifier";
//打開某手機(jī)上的某個app應(yīng)用并傳參URL identifier
以上介紹了怎么創(chuàng)建該本地協(xié)議及調(diào)用該本地協(xié)議的方法。但這里還有個關(guān)鍵就是怎么判斷用戶是否安裝了該app呢?原理如下:
在手機(jī)瀏覽器中用js代碼請求該協(xié)議,如果在500ms內(nèi),如果有應(yīng)用程序能解析這個協(xié)議,那么就能打開該應(yīng)用;如果超過500ms就跳轉(zhuǎn)到app下載頁。
URL Scheme存在的問題
IOS9.0以上彈確認(rèn)框的問題。
在IOS9.0以上版本中,WAP端打開協(xié)議URL,如果已安裝APP,會彈出如下圖所示的確認(rèn)框。

大部分情況下,用戶點(diǎn)擊“打開”APP之前,頁面直接刷新跳轉(zhuǎn)到WAP下載頁,導(dǎo)致打開APP失敗。這就是IOS9.0以上不能用scheme實(shí)現(xiàn)需求的主要原因。如果手機(jī)上未安裝APP,WAP端打開協(xié)議URL,會彈出無效URL的彈窗,也會影響用戶體驗(yàn)。
跳轉(zhuǎn)下載頁問題。
由于跳轉(zhuǎn)到下載頁由前端定時器觸發(fā),在所有的andriod機(jī)以及部分IOS機(jī)器上,打開APP后,WAP頁還是會被定時跳轉(zhuǎn)到下載頁。
通用鏈接實(shí)現(xiàn)方案
什么是Universal Links(通用鏈接)?
這是iOS9推出的一項(xiàng)功能,如果你的應(yīng)用支持Universal Links(通用鏈接),那么就能夠方便的通過傳統(tǒng)的HTTP鏈接來啟動APP(如果iOS設(shè)備上已經(jīng)安裝了你的app,不需要額外做任何判斷等),或者打開網(wǎng)頁(iOS設(shè)備上沒有安裝你的app)。或許可以更簡單點(diǎn)來說明,
在iOS9之前,對于從各種從瀏覽器,Safari、UIWebView或者 WKWebView中喚醒APP的需求,我們通常只能使用scheme。
具體實(shí)現(xiàn)方式請見
通用鏈接實(shí)現(xiàn)方案