# Deep Link 深度連結 ###### tags: `deeplink` `android` `ios` ## 簡介 在一般網頁裡,深度連結就是說這個連結不僅只是打開一個網站 http://example.com/ ,而是直接地打開這個網站中的某個具體內容頁面 http://example.com/my-awesome-content-page 在行動裝置中,透過點擊一個定義好並註冊的 Customer URL Schema(例如:instagram://),就能開啟 APP ## URL Scheme 第一代實現 deep link 的方法 ### URI、URL、URN * URI : universal resource identifier * URL : universal resource locator * URN : universal resource name ### URL v.s URN? URL包含了找到資源的方法(路徑)和資源名稱,也就是當一個URI包含了一個訪問機制或者網絡位置的時候(e.g. http// or ftp://),它就是一個URL了。 URN就是一個獨一無二的資源名稱,它是由urn開頭的一串URI。 e.g. urn:oasis:names:specification:docbook:dtd:xml:4.1.2 所以說,它們之間重要的區別就在於它的開頭,也就是Scheme. 利用它就可以在行動裝置中實現從 web 頁面或者別的 app 中喚起自己的app的功能 ### 限制 * 註冊 URL Scheme 時會有和別人衝突的風險 * 當要被喚起的app沒有安裝時,這個鏈接就會出錯 ## Deferred Deep Link ### 簡介 Deferred Deep Link(延遲性深度連結)就是當使用者透過一個特定的產品連結,點擊後進入該網頁,但該網頁可以引導使用者安裝應用程式,在安裝完程式後,照樣可以接續剛剛看過的商品,不讓整個體驗中斷 ### 缺點 必須註冊URL Scheme,而這個註冊事實上是有和別人衝突的風險,加上一但Deferred Deep Link實作不完全,也容易有失效連結的問題 因此為解決以上問題,蘋果和安卓都有了自己的第二套解決方案,分別是 iOS 的 Universal Link,和 Android 的 App Link ## Universal Link ### 版本 適用於 iOS 9.0 之後的版本 ## 簡介 擺脫過去定義URL Schema 的限制,反而是定義好Web與APP之間的呼應與連結,讓使用者可以利用HTTP/HTTPS連結,直接開啟APP進入內文頁 不是只定義一個custom URL scheme,而是匹配了多個web頁面到app中相應的位置,當用戶打開某個匹配的頁面時,iOS會自動地將其重定向到app內。 ### 優點 1. 當已經安裝了這個app的時候,不需要加載任何web頁面,app就會立即啟動;當這個app沒有安裝的時候,就會默認地從當前瀏覽器中重定向到App Store中引導用戶去下載安裝這個app。 2. Universal links是從服務器上查詢是哪個app需要被打開,因此不存在Custom URL scheme那樣名字被搶佔、衝突的情況。 3. Universal links支持從其他app中的UIWebView中跳轉到目標app 4. 安全性,用universl link去打開的時候,只有你(開發這個app的人)可以通過創建和上傳一個允許這個網頁去通過這個URL去打開你的app的文件。 5. 隱私性,提供Universal link給別的app進行app間的交流,然而對方並不能夠用這個方法去檢測你的app是否被安裝。(之前的custom scheme URL的canOpenURL方法可以,具體可以看這裡iOS Review-DetectScheme。) ### 缺點 在用戶點擊了Universal link之後,iOS會去檢測用戶最近一次是選擇了直接打開app還是打開網站。這個選擇的步驟,實際上是在用戶進入了app之後,頂部bar的右側會出現一個通過網站打開的按鈕選項。如圖: ![](https://i.imgur.com/lSETlmB.png) 因此,一旦用戶點擊了這個選項,他就會通過safiri打開你的網站。並且在之後的操作中,默認一直延續這個選擇,除非用戶從你的webpage上通過點擊Smart App Banner上的OPEN按鈕來打開。也就是說,用戶非常容易在一次選擇之後,使得Universal link喚醒app的功能失效了。 ## App Link ### 版本 適用於 Android 6.0 之後的版本 ### 簡介 同 ios 的 Universal Link 無須再透過彈跳視窗選擇開啟應用程式 ![](https://i.imgur.com/hXpkWpN.png) > 參考資料: > [理解Deep Link & URI Schemes & Universal Link & App Link](https://www.jianshu.com/p/909999e398e6) > [點擊網頁廣告就打開APP? 淺談手機APP的深度連結Deep Link的演進(Universal Link)](https://progressbar.tw/posts/264) > [Universal links on iOS vs. deep links (URL schemes)](https://stackoverflow.com/questions/35522618/universal-links-on-ios-vs-deep-links-url-schemes) ## Line [Using the LINE URL scheme](https://developers.line.biz/en/docs/messaging-api/using-line-url-scheme/#operating-environment) ### iOS 使用 `line://` 直接開啟 line ### Android 使用 `https://line.me/R/` 會有一個中繼跳轉畫面 ## FB ### iOS 使用 `fb://profile` ### Android 使用 `fb://facewebmodal/f?href=FACEBOOKURL` 參考資料: [Open Facebook Page in Facebook App (if installed) on Android [duplicate]](https://stackoverflow.com/questions/34564211/open-facebook-page-in-facebook-app-if-installed-on-android/34564284)