最近遇到一個需求:點(diǎn)擊一個按鈕,如果本機(jī)裝有則喚起app,沒有的話則跳下載頁。
剛一接到需求,覺得很熟悉,實(shí)際上這個功能也確實(shí)很常見,頁能搜索到一大堆方案,但是實(shí)際應(yīng)用中,卻發(fā)現(xiàn)總是很難做到100%的完美。這個大概有兩個點(diǎn),以微信為主的騰訊瀏覽器系列和其他瀏覽器。(因?yàn)轵v訊系列會攔截scheme,手百似乎也會,不知道百度在想什么= =,至于引導(dǎo)用戶在Safari中打開之類的方案,本文不再描述)解決方案大致有以下這么幾個:
1.url scheme
這個方案基本上就是針對微信、qq內(nèi)置瀏覽器,qq瀏覽器等之外的其余瀏覽器,從native那邊要一個scheme ,然后放在a標(biāo)簽里或者location.href跳一下就行了,但是現(xiàn)在主要問提來了,前端不知道本地到底有沒有安裝app,這就比較尷尬,只能繞過去,最終選取了這種方案:

實(shí)際上也很容易看出來,就是用一個iframe去做的一個跳頁,有的話喚起scheme沒有的話,會觸發(fā)定時器跳到下載地址。但是這個方式在ios里面,在沒有app的時候會遇到兩次提示,非常討厭。
2.Universal Link(ios)
用這個方法,主要是因?yàn)槟愕腻X沖的還不夠= =(據(jù)說有些可以騰訊兄弟直接給跳),既然大家都很難做軟妹幣戰(zhàn)士,那么就只能想辦法。
這邊在微信為主的騰訊兄弟內(nèi)置瀏覽器里面,還是比較推薦使用應(yīng)用寶的,它會自動判斷是否本地有app,安卓會自動喚起,只需在尾部拼上參數(shù)&android_schema="你的scheme"他便會自動喚起app,ios就不行咯,必須跳app store,(╯‵□′)╯︵┴─┴
終于到了本段主角Universal Link,以下是這貨的介紹:
這是iOS9推出的一項(xiàng)功能,如果你的應(yīng)用支持Universal Links(通用鏈接),那么就能夠方便的通過傳統(tǒng)的HTTP鏈接來啟動APP(如果iOS設(shè)備上已經(jīng)安裝了你的app,不需要額外做任何判斷等),或者打開網(wǎng)頁(iOS設(shè)備上沒有安裝你的app)?;蛟S可以更簡單點(diǎn)來說明,在iOS9之前,對于從各種從瀏覽器,Safari、UIWebView或者 WKWebView中喚醒APP的需求,我們通常只能使用scheme。
其實(shí)這貨實(shí)際上就是一個特殊的https請求,注意,必須是https(幫ios的同學(xué)劃重點(diǎn) ~~),看起來好屌,似乎有很復(fù)雜,對于前端來說,我們有太多的工作要做了:
window.location.href ="native端戰(zhàn)友給的Universal Link"
wtf?嗯,就是這樣,(╯‵□′)╯︵┴─┴
實(shí)際上我們要做的就這么多= =,其他的配置就需要native協(xié)調(diào)服務(wù)端兄弟去做了:準(zhǔn)備好與主站不同的域名,比如主站www.xxxx.com,你們可以準(zhǔn)備好open.xxxx.com的域名作為重定向用。好吧!實(shí)際上通用鏈接有一個很坑的屬性,必須是異域打開,而且如果你提交的是你主站的鏈接,你打開你的主站你會發(fā)現(xiàn)網(wǎng)站上方會掛著一個難看的灰條轉(zhuǎn)向appstore中你們的app,沒錯,就是ios系統(tǒng)干的這個事,具體的其他注意事項(xiàng)可以參考這篇文章IOS9通用鏈接(universal link)。
最終實(shí)現(xiàn)是這樣的:

是不是很簡單~,但是也不是很完美,總感覺差點(diǎn)什么,算了反正也大致實(shí)現(xiàn)了,就以后慢慢琢磨吧,ps,這貨只不過暫時沒有被管制,沒準(zhǔn)哪天就發(fā)現(xiàn)gg了,畢竟你的錢沖的還不夠~( ̄▽ ̄~)(~ ̄▽ ̄)~嘿嘿嘿嘿
最后,送上旺仔兒童大禮包(環(huán)境判斷方法,雖然也是百度的,但是省的找了,請叫我雷鋒\(^o^)/~)
最后的最后,不當(dāng)之處還請各路大牛多多指正~
