其實H5打開APP原本應該是一件很簡單的事,無非是在H5頁面上調用一個協議或者接口將APP打開嘛。可是由於技術方案的發展和某些流量APP的封鎖,喚起APP的方案就變得複雜了起來。本文從介紹喚起APP的諸多方案入手,講述各個方案的優缺,指望讀者能從全局的角度對H5喚起APP有一個系統的認識。
以下圖,當前主要有三種打開APP的渠道:流量APP封裝渠道,原生的打開渠道以及一些奇技淫巧。api
微信、手Q和微博等流量入口爲了保證流量不流失,對iOS和Android原生的喚起方案作了屏蔽和封裝。在這些APP中,使用原生喚起APP方案是無效的,只能用他們的方案或者位於白名單中的APP才能經過H5的喚起APP。跨域
微信最初喚起APP方案是WXJSBridge,後來變爲了WX JS-SDK。這時候有人可能就要說了,你瞎說,我根本沒有看到JS-SDK上有關於喚起APP的相應接口。其實這些關於APP的接口都是有的,只不過沒有寫在文檔中。瀏覽器
要使用微信的喚起APP方案須要兩點:緩存
因此對於第三方APP,即便知道了接口的名字也不能用。微信
而JS-SDK和JSBridge的本質實現都是同樣的,可是JS-SDK還要求使用者在本身的後臺全局緩存一個jsapi_ticket,若是是騰訊系單純想作喚起APP方面的邏輯的話,直接使用JSBridge無疑是個又快又好的作法。post
手Q和微信同樣,也對喚起APP作了封裝,一樣又白名單的限制,因此也只有騰訊系的APP才能使用。spa
可是在微信中,喚起騰訊系APP使用schema是不行的,可是對於在手Q打開騰訊系APP,能夠選擇使用schema而不是手Q的封裝方案MPP.code
另外說一點,手Q的MPP喚起APP並傳遞參數的方法有點問題,文檔寫的也不完善,確實不如直接用schema喚起好用。blog
主要是指微博,手機百度等APP,應該也是白名單的打開方式,日常用的很少,這裏不作贅述。接口
Schema是一種頁面內跳轉協議,主要有如下幾部分組成[1]
行爲(應用的某個功能) | scheme://[path][?query] | | 應用標識 功能須要的參數
可是在Chrome25以後,iOS9之後,Android和iOS原生都再也不支持這種協議,轉而轉變爲新的方案App Link和Universal Link。
對比起這種方案,Schema不能判斷出是否打開APP成功,也就不能針對沒有打開APP作一些處理(只能經過hack的手段,經過判斷頁面是否可見來達到這一點)。可是,Schema如今在除原生之外各大移動端瀏覽器上(如QQ瀏覽器,Chrome瀏覽器等)都有不錯的支持,並且使用schema不用客戶端作額外的處理,作一些簡單的邏輯仍是能夠用的。
Universal Link是iOS開發的一種無縫連接APP和Web的方式。當訪問一個連接時,若是安裝了APP,那麼直接跳轉APP的相應頁面,若是沒有安裝APP,則跳轉相應的H5頁面。不過咱們能夠利用它的這種特性來喚起APP。
Universal Link有幾個缺陷:
APP Link的初衷和Universal Link一致,都是爲了給用戶提供無縫的用戶體驗——若是安裝了APP則跳轉APP,沒有安裝APP就跳轉相應頁面,所以,咱們也能夠用它來作喚起APP。一樣的,它也須要APP作相應的設置。
不過APP Link是Android上提供的方案,它和Universal Link不一樣的是:不須要使用https協議
應用寶渠道是應用寶借用本身騰訊系APP的能力,利用本身的權限來幫助其餘APP在微信上喚起,換取其餘推廣資源的行爲。
不過這種方案已經被微信給封殺了。因此當前,做爲一個第三方APP,是沒有辦法在微信上喚起的。
本文泛泛的總結了市面上常見的H5喚起APP方案,羅列了它們的優缺點。受限於騰訊系自己白名單的限制,沒有辦法給出一個最佳實踐,可是也但願能給你們對H5喚起APP提供一些幫助。