JS實(shí)現(xiàn)點(diǎn)擊網(wǎng)頁(yè)判斷是否安裝app并打開(kāi)否則跳轉(zhuǎn)app store
常常有這樣的場(chǎng)景,咱們開(kāi)發(fā)出來(lái)的APP需要進(jìn)行推廣,比如在頁(yè)面頂部來(lái)一張大Banner圖片,亦或一張二維碼。但往往我們都是直接給推廣圖片加了一個(gè)下載鏈接(App Store中的)。所以咱們來(lái)模擬一下用戶的操作步驟:
1、用戶第一次訪問(wèn)宣傳頁(yè)面
a、點(diǎn)擊Banner,進(jìn)入到APP Store中對(duì)應(yīng)的APP下載頁(yè)
b、APP下載頁(yè)中提示:安裝;用戶點(diǎn)擊安裝
c、安裝完成后,APP下載頁(yè)中提示:打開(kāi);用戶繼續(xù)點(diǎn)擊打開(kāi)
d、用戶正常使用APP
2、用戶第二次訪問(wèn)宣傳頁(yè)面
a、點(diǎn)擊Banner,進(jìn)入到APP Store中對(duì)應(yīng)的APP下載頁(yè)
b、APP下載頁(yè)中提示:打開(kāi);用戶直接點(diǎn)擊打開(kāi)
c、用戶正常使用APP
3、用戶第三次、第四次、...、第N次訪問(wèn),操作步驟同2
能看出來(lái),不管是點(diǎn)擊Banner還是掃描二維碼的方式,對(duì)于已經(jīng)安裝過(guò)APP的用戶來(lái)說(shuō),這個(gè)體驗(yàn)都是非常糟糕的。
更優(yōu)的體驗(yàn)是:點(diǎn)擊Banner(或掃描二維碼)后,程序判斷當(dāng)前系統(tǒng)是否已安裝App,如果未安裝,則自動(dòng)跳轉(zhuǎn)到App Store下載頁(yè);否則直接打開(kāi)App。
在iOS上,要增加一個(gè)APP的大Banner,其實(shí)只需要在<head>標(biāo)簽內(nèi)增加一個(gè)<meta>標(biāo)簽即可,格式如:
<meta name='apple-itunes-app' content='app-id=你的APP-ID'>
比如加一個(gè)百度貼吧的Native APP大Banner,用下面這串兒代碼:
<meta name='apple-itunes-app' content='app-id=477927812'>
而對(duì)于點(diǎn)擊鏈接后,能否直接打開(kāi),可以通過(guò)下面的代碼來(lái)實(shí)現(xiàn)。前提條件:你得知道你的APP對(duì)應(yīng)的打開(kāi)協(xié)議,如貼吧APP,協(xié)議為:com.baidu.tieba:// ,微信的:weixin:// ,and so on。。。
<!-- a標(biāo)簽的鏈接,設(shè)置為對(duì)應(yīng)的下載鏈接;點(diǎn)擊打開(kāi)的動(dòng)作,在click事件中注冊(cè) -->
<a id="openApp">貼吧客戶端</a>
<script type="text/javascript">
document.getElementById('openApp').onclick = function(e){
// 通過(guò)iframe的方式試圖打開(kāi)APP,如果能正常打開(kāi),會(huì)直接切換到APP,并自動(dòng)阻止a標(biāo)簽的默認(rèn)行為
// 否則打開(kāi)a標(biāo)簽的href鏈接
var ifr = document.createElement('iframe');
ifr.src = 'com.baidu.tieba://';
ifr.style.display = 'none';
document.body.appendChild(ifr);
window.setTimeout(function(){
document.body.removeChild(ifr);
},3000)
};
</script>
當(dāng)然,如果你是設(shè)計(jì)成一張二維碼,可以用下面這段代碼:
<!-- a標(biāo)簽的鏈接,設(shè)置為對(duì)應(yīng)的下載鏈接;點(diǎn)擊打開(kāi)的動(dòng)作,在click事件中注冊(cè) -->
<a id="openApp" style="display: none">貼吧客戶端</a>
<script type="text/javascript">
document.getElementById('openApp').onclick = function(e){
// 通過(guò)iframe的方式試圖打開(kāi)APP,如果能正常打開(kāi),會(huì)直接切換到APP,并自動(dòng)阻止a標(biāo)簽的默認(rèn)行為
// 否則打開(kāi)a標(biāo)簽的href鏈接
var ifr = document.createElement('iframe');
ifr.src = 'com.baidu.tieba://';
ifr.style.display = 'none';
document.body.appendChild(ifr);
window.setTimeout(function(){
document.body.removeChild(ifr);
},3000)
};
document.getElementById('openApp').click();
要使用哪一種,就取決與你的實(shí)際場(chǎng)景了!
我們?cè)跒g覽網(wǎng)頁(yè)的時(shí)候,你會(huì)看到一個(gè)網(wǎng)頁(yè)下面漂浮著一個(gè)提示框“打開(kāi)APP”或者“下載APP的字樣”,如果你的手機(jī)已經(jīng)安裝過(guò)這個(gè)APP,那么網(wǎng)頁(yè)會(huì)提示“打開(kāi)APP”,如果沒(méi)有安裝,那就會(huì)提示“下載APP的字樣” 這個(gè)從技術(shù)角度是如何去實(shí)現(xiàn)的呢?下面我給大家分享這塊技術(shù),去年公司給國(guó)際動(dòng)漫節(jié)做項(xiàng)目的時(shí)候,客戶就提到這個(gè)需求,在點(diǎn)擊網(wǎng)頁(yè)企業(yè)的時(shí)候 那么直接打開(kāi)APP(如果已經(jīng)安裝了) 如果沒(méi)有安裝過(guò),直接打開(kāi)APP頁(yè)面
下面我把這塊的源碼分享一下
if(navigator.userAgent.match(/android/i)) {
// 通過(guò)iframe的方式試圖打開(kāi)APP,如果能正常打開(kāi),會(huì)直接切換到APP,并自動(dòng)阻止a標(biāo)簽的默認(rèn)行為
// 否則打開(kāi)a標(biāo)簽的href鏈接
var isInstalled;
//下面是安卓端APP接口調(diào)用的地址,自己根據(jù)情況去修改
var ifrSrc = 'cartooncomicsshowtwo://platformapi/startApp? type=0&id=${com.id}&phone_num=${com.phone_num}';
var ifr = document.createElement('iframe');
ifr.src = ifrSrc;
ifr.style.display = 'none';
ifr.onload = function() {
// alert('Is installed.');
isInstalled = true;
alert(isInstalled);
document.getElementById('openApp0').click();};
ifr.onerror = function() {
// alert('May be not installed.');
isInstalled = false;
alert(isInstalled);
}
document.body.appendChild(ifr);
setTimeout(function() {
document.body.removeChild(ifr);
},1000);
}
//ios判斷
if(navigator.userAgent.match(/(iPhone|iPod|iPad);?/i))
if(navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
//Animation://com.yz.animation
var isInstalled;
//var gz = '{"comName":"${com.short_name}","comID":"${com.id}","comPhoneNum":"${com.phone_num}","type":"0"}';
//var jsongz =JSON.parse(gz);
//下面是IOS調(diào)用的地址,自己根據(jù)情況去修改
var ifrSrc = 'Animation://?comName=${com.short_name}&comID=${com.id}&comPhoneNum=${com.phone_num}&type=0';var ifr = document.createElement('iframe');
ifr.src = ifrSrc;
ifr.style.display = 'none';
ifr.onload = function() {
// alert('Is installed.');
isInstalled = true;
alert(isInstalled);
document.getElementById('openApp1').click();};
ifr.onerror = function() {
// alert('May be not installed.');
isInstalled = false;
alert(isInstalled);
}
document.body.appendChild(ifr);
setTimeout(function() {
document.body.removeChild(ifr);
},1000);
}
}
大家在做的過(guò)程中需要注意兩個(gè)問(wèn)題:
1、接口地址一定要寫對(duì),大家可以查一下schema協(xié)議,通過(guò)這個(gè)協(xié)議調(diào)用的
2、在做用安卓的時(shí)候 如果用微信掃一掃或者QQ瀏覽器掃碼功能的時(shí)候
使用上面的協(xié)議會(huì)存在問(wèn)題的就是必須用APK上架到騰訊應(yīng)用市場(chǎng)上去
以上所述是小編給大家介紹的JS實(shí)現(xiàn)點(diǎn)擊網(wǎng)頁(yè)判斷是否安裝app并打開(kāi)否則跳轉(zhuǎn)app store,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 利用js判斷手機(jī)是否安裝某個(gè)app的多種方案
- JSP中實(shí)現(xiàn)判斷客戶端手機(jī)類型并跳轉(zhuǎn)到app下載頁(yè)面
- 用于deeplink的js方法(判斷手機(jī)是否安裝app)
- js判斷移動(dòng)端是否安裝某款app的多種方法
- JS監(jiān)聽(tīng)微信、支付寶等移動(dòng)app及瀏覽器的返回、后退、上一頁(yè)按鈕的事件方法
- js實(shí)現(xiàn)微信/QQ直接跳轉(zhuǎn)到支付寶APP打開(kāi)口令領(lǐng)紅包功能
- JS觸摸屏網(wǎng)頁(yè)版仿app彈窗型滾動(dòng)列表選擇器/日期選擇器
- JS拉起或下載app的實(shí)現(xiàn)代碼
- js判斷手機(jī)是否安裝并打開(kāi)app,未安裝則安裝app【兼容Android、ios,親測(cè)可用】
相關(guān)文章
在小程序中集成redux/immutable/thunk第三方庫(kù)的方法
這篇文章主要介紹了在小程序中集成redux/immutable/thunk第三方庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
解析JavaScript中 querySelector 與 getElementById 方法的區(qū)別
這篇文章主要介紹了JavaScript中 querySelector 與 getElementById 方法的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
JS生態(tài)系統(tǒng)加速一次一庫(kù)PostCSS SVGO的重構(gòu)源碼和性能優(yōu)化探索
這篇文章主要介紹了JS生態(tài)系統(tǒng)加速一次一庫(kù)PostCSS SVGO的重構(gòu)源碼和性能優(yōu)化探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
uniapp路由uni-simple-router實(shí)例詳解
uni-simple-router專為uniapp打造的路由器,和uniapp深度集成,這篇文章主要給大家介紹了關(guān)于uniapp路由uni-simple-router的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
ES6新特性之?dāng)?shù)組、Math和擴(kuò)展操作符用法示例
這篇文章主要介紹了ES6新特性之?dāng)?shù)組、Math和擴(kuò)展操作符用法,結(jié)合實(shí)例形式分析了ES6中數(shù)組、Math和擴(kuò)展操作符的新特性、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
Typescript協(xié)變與逆變簡(jiǎn)單理解
深入學(xué)習(xí)TypeScript類型系統(tǒng)的話,逆變、協(xié)變、雙向協(xié)變、不變是繞不過(guò)去的概念。這些概念看起來(lái)挺高大上的,其實(shí)并不復(fù)雜,這篇文章我們就來(lái)學(xué)習(xí)下協(xié)變和逆變吧2022-10-10

