移動(dòng)端深度鏈接童叠,簡(jiǎn)稱(chēng)deeplink框喳。這是一種通過(guò)uri鏈接到app特定位置的一種跳轉(zhuǎn)技術(shù)课幕,不單是簡(jiǎn)單地通過(guò)網(wǎng)頁(yè)、app等打開(kāi)目標(biāo)app五垮,還能達(dá)到利用傳遞標(biāo)識(shí)跳轉(zhuǎn)至不同頁(yè)面的效果乍惊。參考Create Deep Links to App Content
場(chǎng)景
在推廣、廣告放仗、應(yīng)用間跳轉(zhuǎn)的場(chǎng)景下润绎,使用極多。這里將根據(jù)以下要點(diǎn)來(lái)介紹deeplink诞挨。
- intent
- intent-filter
- scheme
原理介紹
- intent
首先我們要講一下的是intent莉撇,在android中,intent作為“調(diào)用意圖”來(lái)解釋再合適不過(guò)了惶傻,其作用不用多說(shuō)棍郎,就是為調(diào)用其他app所做的封裝,這里就簡(jiǎn)單說(shuō)一下银室。intent的調(diào)用有顯式和隱式兩種方式涂佃。
顯式調(diào)用就好比你去別人家做客,顯式調(diào)用類(lèi)似于你知道朋友家的地址粮揉,浙江省杭州市西湖區(qū)某某小區(qū)幾棟幾零幾巡李,人家門(mén)牌都寫(xiě)的很清楚抚笔,你去找就很容易扶认,指向性唯一。
隱式調(diào)用包含一定的條件殊橙,有action辐宾,category,data膨蛮,type叠纹,extras,flags等等敞葛,每一種屬性都類(lèi)似于篩選條件誉察。你說(shuō)你要去杭州的山上玩,那么就會(huì)給你定位到杭州市的各種山惹谐,只要符合這個(gè)條件持偏,他們都會(huì)一一被列出來(lái),至于去哪里氨肌,就看你自己選鸿秆。
- intent-filter
intent-filter是針對(duì)你跳轉(zhuǎn)的目標(biāo)來(lái)講的怎囚,就類(lèi)似于門(mén)牌的修飾卿叽,他會(huì)在門(mén)牌上定義上述介紹的那些屬性。當(dāng)有intent發(fā)送過(guò)來(lái)的時(shí)候,就會(huì)篩選出符合條件的app來(lái)考婴。最常見(jiàn)的就是
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
這倆屬性可以說(shuō)AndroidManifest.xml最常見(jiàn)的兩行代碼了贩虾,作用就是app第一個(gè)啟動(dòng)的activity。一個(gè)app里有很多activity沥阱,在啟動(dòng)的時(shí)候整胃,系統(tǒng)并不知道哪個(gè)是第一個(gè)要啟動(dòng)的,那么他就發(fā)一個(gè)setAction為“android.intent.action.MAIN”喳钟、setCategory為“android.intent.category.LAUNCHER”的intent出來(lái)屁使,被匹配的到Activity就會(huì)啟動(dòng)了。
- Android Deeplink探究
deeplink所需要的幾個(gè)屬性大致有以下幾個(gè)
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="xt"
android:host="www.abc.com"
android:pathPrefix="/work" />
</intent-filter>
這邊一個(gè)個(gè)介紹過(guò)去奔则,action.VIEW是打開(kāi)一個(gè)視圖蛮寂,category.DEFAULT為默認(rèn),category.DEFAULT為設(shè)置該組件可以使用瀏覽器啟動(dòng)易茬,這個(gè)是關(guān)鍵酬蹋,從瀏覽器跳轉(zhuǎn),就要通過(guò)這個(gè)屬性抽莱。data中的scheme范抓、host、pathPrefix等等食铐,這個(gè)是uri的鏈接匕垫,scheme可以導(dǎo)向app的跳轉(zhuǎn),是另一個(gè)關(guān)鍵虐呻。
接下來(lái)就是生成一個(gè)短鏈象泵,通過(guò)瀏覽器打開(kāi)就行了。比如"xt://www.abc.com/work"斟叼,這里要注意的是偶惠,uri也是層級(jí)過(guò)濾的,例如有兩個(gè)activity同時(shí)聲明了scheme為“xt”朗涩,那么會(huì)繼續(xù)往下匹配host忽孽。
好了,deeplink的原理及使用谢床,就基本講完了兄一。
拓展
由于推廣等場(chǎng)景的使用,許多都是由網(wǎng)頁(yè)打開(kāi)萤悴,針對(duì)一些未安裝的用戶(hù)進(jìn)行跳轉(zhuǎn)的瘾腰。整個(gè)流程要求用戶(hù)先去應(yīng)用市場(chǎng)下載,下載完后再打開(kāi)跳轉(zhuǎn)覆履。普通的deeplink實(shí)現(xiàn)方案已經(jīng)不能滿(mǎn)足蹋盆,進(jìn)而演化出一種延遲深度鏈接费薄。
目前市場(chǎng)上流行的解決方案很多,類(lèi)似魔窗栖雾,google的firebase dynamic-link楞抡,branch,facebook的app-links等等(我是不是要收一波廣告費(fèi)txtx)析藕。翻看了一下源碼及實(shí)現(xiàn)召廷,大致是通過(guò)訪(fǎng)問(wèn)定向鏈接的時(shí)候(這個(gè)和短鏈不一樣,短鏈?zhǔn)轻槍?duì)本地app的账胧,長(zhǎng)鏈?zhǔn)强梢哉嬲L(fǎng)問(wèn)的http網(wǎng)頁(yè))竞慢,會(huì)上傳設(shè)備、ip治泥、時(shí)間戳等信息筹煮,在app啟動(dòng)的時(shí)候,再去異步向他們服務(wù)器請(qǐng)求短鏈居夹。也有和應(yīng)用市場(chǎng)合作败潦,先把信息傳遞給應(yīng)用市場(chǎng),在市場(chǎng)中打開(kāi)也可以定向跳轉(zhuǎn)准脂。ps:iOS中的實(shí)現(xiàn)好像是訪(fǎng)問(wèn)瀏覽器中的cookie劫扒。
方案很多,各有優(yōu)缺點(diǎn)狸膏,目前來(lái)看均可嘗試沟饥,結(jié)合各平臺(tái)的資源去實(shí)現(xiàn)。
總結(jié)
deeplink的使用大致就上述內(nèi)容环戈,還有深層次的內(nèi)容闷板,像是scheme協(xié)議等,有空深究了再做分享院塞。