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

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

1. 喚起APP的方案

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

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無疑是個又快又好的做法。

1.1.2 手Q

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

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

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

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提供一些幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章