一篇文章瞭解H5打開APP的諸多方案

其實H5打開APP原本應該是一件很簡單的事,無非是在H5頁面上調用一個協議或者接口將APP打開嘛。可是由於技術方案的發展和某些流量APP的封鎖,喚起APP的方案就變得複雜了起來。本文從介紹喚起APP的諸多方案入手,講述各個方案的優缺,指望讀者能從全局的角度對H5喚起APP有一個系統的認識。

1. 喚起APP的方案

以下圖,當前主要有三種打開APP的渠道:流量APP封裝渠道,原生的打開渠道以及一些奇技淫巧。api

clipboard.png

1.1 流量APP封裝渠道

微信、手Q和微博等流量入口爲了保證流量不流失,對iOS和Android原生的喚起方案作了屏蔽和封裝。在這些APP中,使用原生喚起APP方案是無效的,只能用他們的方案或者位於白名單中的APP才能經過H5的喚起APP。跨域

1.1.1 微信

微信最初喚起APP方案是WXJSBridge,後來變爲了WX JS-SDK。這時候有人可能就要說了,你瞎說,我根本沒有看到JS-SDK上有關於喚起APP的相應接口。其實這些關於APP的接口都是有的,只不過沒有寫在文檔中。瀏覽器

要使用微信的喚起APP方案須要兩點:緩存

  • 明確知道喚起APP的接口
  • 要喚起的APP自己就處於微信的白名單中

因此對於第三方APP,即便知道了接口的名字也不能用。微信

而JS-SDK和JSBridge的本質實現都是同樣的,可是JS-SDK還要求使用者在本身的後臺全局緩存一個jsapi_ticket,若是是騰訊系單純想作喚起APP方面的邏輯的話,直接使用JSBridge無疑是個又快又好的作法。post

1.1.2 手Q

手Q和微信同樣,也對喚起APP作了封裝,一樣又白名單的限制,因此也只有騰訊系的APP才能使用。spa

可是在微信中,喚起騰訊系APP使用schema是不行的,可是對於在手Q打開騰訊系APP,能夠選擇使用schema而不是手Q的封裝方案MPP.code

另外說一點,手Q的MPP喚起APP並傳遞參數的方法有點問題,文檔寫的也不完善,確實不如直接用schema喚起好用。blog

1.1.3 其餘流量APP

主要是指微博,手機百度等APP,應該也是白名單的打開方式,日常用的很少,這裏不作贅述。接口

2. 原生渠道

2.1 Schema

Schema是一種頁面內跳轉協議,主要有如下幾部分組成[1]

行爲(應用的某個功能)    
            |
scheme://[path][?query]
   |               |
應用標識       功能須要的參數

可是在Chrome25以後,iOS9之後,Android和iOS原生都再也不支持這種協議,轉而轉變爲新的方案App Link和Universal Link。

對比起這種方案,Schema不能判斷出是否打開APP成功,也就不能針對沒有打開APP作一些處理(只能經過hack的手段,經過判斷頁面是否可見來達到這一點)。可是,Schema如今在除原生之外各大移動端瀏覽器上(如QQ瀏覽器,Chrome瀏覽器等)都有不錯的支持,並且使用schema不用客戶端作額外的處理,作一些簡單的邏輯仍是能夠用的。

2.2 Universal Link

Universal Link是iOS開發的一種無縫連接APP和Web的方式。當訪問一個連接時,若是安裝了APP,那麼直接跳轉APP的相應頁面,若是沒有安裝APP,則跳轉相應的H5頁面。不過咱們能夠利用它的這種特性來喚起APP。

Universal Link有幾個缺陷:

  • 要喚起的APP要作相應的支持
  • 當前的頁面和喚起的域名必定要跨域才能夠
  • 必須是Https

2.3 APP Link

APP Link的初衷和Universal Link一致,都是爲了給用戶提供無縫的用戶體驗——若是安裝了APP則跳轉APP,沒有安裝APP就跳轉相應頁面,所以,咱們也能夠用它來作喚起APP。一樣的,它也須要APP作相應的設置。

不過APP Link是Android上提供的方案,它和Universal Link不一樣的是:不須要使用https協議

3. 其餘渠道

3.1 應用寶渠道

應用寶渠道是應用寶借用本身騰訊系APP的能力,利用本身的權限來幫助其餘APP在微信上喚起,換取其餘推廣資源的行爲。

不過這種方案已經被微信給封殺了。因此當前,做爲一個第三方APP,是沒有辦法在微信上喚起的

4. 總結

本文泛泛的總結了市面上常見的H5喚起APP方案,羅列了它們的優缺點。受限於騰訊系自己白名單的限制,沒有辦法給出一個最佳實踐,可是也但願能給你們對H5喚起APP提供一些幫助。

相關文章
相關標籤/搜索