為什麼在 iPhone 裡面點擊 Quora 問答的鏈接會自動跳轉到 Quora 客戶端,而知乎 iPhone 客戶端就不能這樣,而是直接打開網頁?

Quora和知乎每周都會給我發送「一周問答精選」的郵件,我直接在郵件裡面點擊鏈接的話,Quora會先打開iPhone的瀏覽器,然後立馬跳轉打開Quora客戶端,但是同樣打開知乎精選的鏈接,就只是打開瀏覽器,而不是跳轉到知乎客戶端。感覺跳轉到客戶端肯定更方便操作(關注、評論等不需要再次登錄)。這樣實現的技術原理大概是怎樣的?知乎為什麼不做這樣的實現?


關於原理,其他幾位同學都解釋的差不多了,在這我就說下知乎為什麼沒有完整實現從 web 到 app 的跳轉機制。

如 @Bill Cheng 同學所說,其實知乎 iPhone 里已實現了 scheme,現階段完整的 scheme 如下:

- zhihu://questions/&

- zhihu://topics/&

- zhihu://people/&

但是,Mobile Safari 並沒有提供介面用於「安靜的」探測所處 iOS 是否支持某個 Scheme。

所謂「安靜的」,是說當通過 HTTP(或者 JS)強制跳轉到自定義的 scheme,成功則罷,但若失敗 Mobile Safari 會彈出 alert 告知地址非法。iOS 6 引入的 app banner 方式也不夠安靜,也沒有回調可以用於進一步定製 web 的行為。

現在的方案是大多是通過 JS 的延時方式(回到瀏覽器一段時候後仍會看到那個 alert),或者用戶自行開關的方式來達到 web 到原生 app 的跳轉,對用戶來說還是存在困惑和打擾的,所以知乎 iPhone 暫時沒有跟進。

另外,因為在 iOS 上原生 app 里可以「安靜的」探測其它 app 的 scheme,所以你會發現在微信的內置瀏覽器里打開一些有原生 app 的 web 時,你會發現一些廠商給你留了跳到他家 app 的 link,那是因為微信先行探測到了你裝了對應的 app 並且通過 url 傳參告知了那家廠商。


首先告訴你實現原理

實現方法就是傳說中的iOS URL Scheme,具體到Quora這個例子上,Quora使用的Scheme是『quora://question/(0000000)』這種類型的

現在在iOS上點擊Quora的鏈接,你會看到一個頁面,頂端寫著『View In Quora App』,點擊這個按鈕就會執行Quora的自定義Scheme,然後系統會決定是跳轉到App Store還是Quora的軟體

然後告訴你知乎為什麼沒有這麼做

知乎的App已經有一個自定義的URL Scheme了,那就是『zhihu://』,不過很奇怪知乎並沒有建立和問題相關的關聯內容,這個Scheme現在僅且僅作為移動版頁面頂部條調用知乎App使用

不過這個也不是一定得,說不定相關URL只是沒有出現在知乎的網頁上而已,畢竟我不是開發人員……(估計還常年被知乎開發鄙視……

最後說一下頁面如何判斷是否安裝軟體

這個也是通過URL Scheme來做的,具體可以參見蘋果上次iOS 6發布時介紹的那個移動頁面頂端展示Bar的代碼,那貨反正是可以檢測時你否有安裝軟體的,不過能不能把這個信息反饋給伺服器重生成頁面就不知道了……

========體內酒精含量:0.4%========

希望這次不要被知乎工程師鄙視……


  1. 確實是用scheme跳轉。

  2. 用JS做跳轉。但,是在page loading完成以後,才去做跳轉。如果沒裝應用的話,頁面不會有動靜,所以不存在判斷裝沒裝的問題。
  3. 是在判斷了是移動設備或者iPhone或者是什麼來著,才載入這段腳本。

嗯,差不多就是這些。


研究過pinterest的寫法,不知道quora怎麼做的,但估計差不多。

當系統內有pinterest應用時

打開頁面後,會跳轉協議pinterest://

這時候webkit發現自己沒法處理這個協議,拋給系統,

系統發現有註冊過pinterest://這個協議,就調用對應的App並把協議後面的參數傳進去。

當沒有Pinterest App怎麼辦呢?

目前pinterest的做法是:跳轉pinterest://協議,並設置計時器

如果零點幾秒內有返回,說明系統內沒有註冊這個scheme,就跳轉http://到對應頁面完成對應動作,

如果在這零點幾秒內沒有返回,說明系統已經找到了這個協議並調用了對應app。

至於說為什麼知乎iPhone客戶端沒這麼干,我也不知道。


推薦閱讀:

知乎 iPhone 客戶端 2.0 是如何登上社交榜第一位的?
知乎iOS客戶端為什麼做的爛?
你經常(或很少)使用知乎的反對按鈕嗎?為什麼?
如果Minecraft世界裡有知乎,會提些什麼問題?
各位知友平時一天的生活都是怎樣的?

TAG:知乎 | 客戶端 | 移動開發 | 知乎iOS應用 |