Deeplink應用描述
Deeplink,簡單講,就是你在手機上點擊一個鏈接之后,可以直接鏈接到app內部的某個頁面,而不是app正常打開時顯示的首頁。不似web,一個鏈接就可以直接打開web的內頁,app的內頁打開,必須用到deeplink技術。
想要在h5頁面中喚起app的某個頁面也要用到該技術,兩個App之間完成橫向調用也是通過該技術
假如要從APP-F調用APP-T
1)APP-T要進行自定義scheme的配置(iOS是info文件,Android是activity),並進行參數處理的coding。
2)APP-F進行調用,首先判斷設備是否安裝APP-T。
3)如果未安裝,則跳轉到APP-T的web版應用(假設他提供web版)或者是跳轉到AppStore等應用市場進行下載。
4)如果已安裝,則調用APP-T配置好的URL SCHEME,直接打開APP-T的相關界面。
核心技術
URL SCHEMES簡介
核心的技術就是:URL SCHEMES,不論是IOS還是Android。
URL Schemes 有兩個單詞:
-
URL,我們都很清楚,http://www.apple.com 就是個 URL,也叫它鏈接或網址;
-
Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ://之前的那段字符。比如 http://www.apple.com 這個網址的 Schemes 是 http。
就像給服務器資源分配一個 URL,以便我們去訪問它一樣,我們同樣也可以給手機APP分配一個特殊格式的 URL,用來訪問這個APP或者這個APP中的某個功能(來實現通信)。
APP得有一個標識,好讓我們可以定位到它,它就是 URL 的Scheme 部分。
URL Scheme 語法
URL SCHEMES值
我們可以像定位一個網頁一樣,用一種特殊的 URL 來定位一個應用甚至應用里某個具體的功能。而定位這個應用的,就應該這個應用的 URL 的 Schemes 部分,也就是開頭兒那部分。
不唯一性
但是需要注意的是應用的URL Schemes 並不唯一,也就是說一個應用可以“起多個名“,不同應用的URL Schemes也可能因為名字一樣發生沖突。
固定性
iOS系統級應用,有一些已經定義了URL Schemes,比如短信是 sms:、通話是tel:、iBooks是ibooks:,在定義自己APP的URL Schemes的時候要避免跟系統應用名稱一樣。
傳參
與URL一樣,URL Schemes也可以通過傳參打開特定的APP界面。
URL:http://images.google.com/images?q=關鍵字
URL Schemes:weixin://dl/moments(打開微信朋友圈)
Scheme 鏈接痛點
在 ios 上會有確認彈窗提示用戶是否打開,對於用戶來說喚端,多出了一步操作。若用戶未安裝 APP ,也會有一個提示窗,告知我們 “打不開該網頁,因為網址無效”
傳統 Scheme 跳轉無法得知喚端是否成功,Universal Link 喚端失敗可以直接打開此鏈接對應的頁面
Scheme 在微信、微博、QQ瀏覽器、手百中都已經被禁止使用,使用 Universal Link 可以避開它們的屏蔽( 截止到 18年8月21日,微信和QQ瀏覽器已經禁止了 Universal Link,其他主流APP未發現有禁止 )
如何調用三種喚端媒介
URL Scheme 還是URL ,只是 URL Scheme算是特殊的 URL。所以我們可以拿使用 URL 的方法來使用它們。
iframe
|
在只有 URL Scheme 的日子里,iframe 是使用最多的了。因為在未安裝 app 的情況下,不會去跳轉錯誤頁面。但是 iframe 在各個系統以及各個應用中的兼容問題還是挺多的,不能全部使用 URL Scheme。
a 標簽
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"">掃一掃</a> |
使用過程中,對於動態生成的 a 標簽,使用 dispatch
來模擬觸發點擊事件,發現很多種 event 傳遞過去都無效;使用 click()
來模擬觸發,部分場景下存在這樣的情況,第一次點擊過后,回到原先頁面,再次點擊,點擊位置和頁面
所識別位置有不小的偏移,所以 Intent 協議從 a 標簽換成了 window.location。
window.location
URL Scheme 在 ios 9+ 上諸如 safari、UC、QQ瀏覽器中, iframe 均無法成功喚起 APP,只能通過 window.location 才能成功喚端。當然,如果我們的 app 支持 Universal Link,ios 9+ 就用不到 URL Scheme 了。而 Universal Link
在使用過程中,我發現在 qq 中,無論是 iframe 導航 還是 a 標簽打開 又或者 window.location 都無法成功喚端,一開始我以為是 qq 和微信一樣禁止了 Universal Link 喚端的功能,其實不然,百般試驗下,通過 top.location 喚端成功
了。
總結
APP要想被其他APP直接打開,自身得支持,讓自己具備被人打開的能力。(URL Schemes)
APP要想打開其他的APP,自身也得支持。(判斷設備是否安裝、各種跳轉的處理)
Deeplink從宏觀角度,需要有業界統一標准與規范,才有可能形成一定的氣候。
在統一的標准下,只有當APP接入到一定的量級,形成一個生態,我們暢想的那種APP間無縫銜接的場景才會真正實現。
一些常用APP的URL Schemes
知乎 回答 zhihu://answers/{id} 用戶頁 zhihu://people/{id} 微信 weixin://dl/scan 掃一掃 weixin://dl/feedback 反饋 weixin://dl/moments 朋友圈 weixin://dl/settings 設置 weixin://dl/notifications 消息通知設置 weixin://dl/chat 聊天設置 weixin://dl/general 通用設置 weixin://dl/officialaccounts 公眾號 weixin://dl/games 游戲 weixin://dl/help 幫助 weixin://dl/feedback 反饋 weixin://dl/profile 個人信息 weixin://dl/features 功能插件 騰訊微博:TencentWeibo:// 淘寶:taobao:// 支付寶:alipay:// 微博:sinaweibo:// weico微博:weico:// QQ瀏覽器:mqqbrowser:// uc瀏覽器:ucbrowser:// 海豚瀏覽器:dolphin:// 搜狗瀏覽器:SogouMSE:// 百度地圖:baidumap:// Chrome:googlechrome:// 優酷:youku:// 京東:openapp.jdmobile:// 人人:renren:// 美團:imeituan:// 1號店:wccbyihaodian:// 我查查:wcc:// 有道詞典:ddictproapp:// 點評:dianping:// 微盤:sinavdisk:// 豆瓣fm:doubanradio:// 網易公開課:ntesopen:// 名片全能王:camcard:// 淘寶寶貝搜索:taobao://http://s.taobao.com/?q=[prompt] 淘寶店鋪搜索:taobao://http://shopsearch.t |