這里其實(shí)就解釋了我們做H5喚醒App并直達(dá)指定頁(yè)面的必要性。
涉及哪些要素谬俄?
喚醒App這件事,在不同平臺(tái)要采用不同的方法,主要是這三個(gè):
URL Scheme
Universal Link
Android App Links
1庶艾、URL Scheme
URL Scheme是iOS、Android都兼容的機(jī)制擎勘,只需要原生App開(kāi)發(fā)時(shí)注冊(cè)Scheme即可咱揍,用戶(hù)點(diǎn)擊此類(lèi)鏈接時(shí),會(huì)自動(dòng)喚醒App棚饵,并借助URL Router機(jī)制跳轉(zhuǎn)到指定頁(yè)面煤裙。
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
<scheme name>:是scheme的名稱(chēng),代表著協(xié)議名稱(chēng)噪漾。
<hierarchical part>:它包含 authority 和 path硼砰。
<query>:可選項(xiàng)目,隔開(kāi)或&隔開(kāi)的鍵值對(duì)<key>=<value>
<fragmentg> :可選項(xiàng)目包怪与,其它額外的標(biāo)識(shí)信息
盡管URL Scheme兼容性高夺刑,但卻存在許多限制,比如:
國(guó)內(nèi)各個(gè)廠商瀏覽器差異很大,當(dāng)要被喚醒的目標(biāo)App未安裝時(shí)遍愿,這個(gè)鏈接很容易出錯(cuò)存淫。
當(dāng)注冊(cè)有多個(gè)Scheme相同的時(shí)候,目前是沒(méi)有辦法區(qū)分的沼填。
不支持從其他App中的UIWebView中跳轉(zhuǎn)到目標(biāo)App桅咆。
被部分主流平臺(tái)禁止,微信坞笙、微博岩饼、QQ瀏覽器、手機(jī)百度中都已經(jīng)被禁止使用薛夜。
正是由于這些限制的存在籍茧,蘋(píng)果和安卓都不約而同發(fā)布了自己的第二套方案:iOS的Universal Link、Android的App Links梯澜。
2寞冯、Universal Link
Universal Link是iOS9后蘋(píng)果推出的通用鏈接技術(shù),能夠方便的通過(guò)一個(gè)https鏈接來(lái)打開(kāi)App指定頁(yè)面晚伙,不需要額外的判斷吮龄,如果沒(méi)有安裝App,可以跳轉(zhuǎn)到自定義地址咆疗。
相對(duì)Scheme的優(yōu)勢(shì)在于漓帚,Universal Link是一個(gè)Web Link,因此少了很多麻煩:
當(dāng)用戶(hù)已安裝該App時(shí)午磁,不需要加載任何頁(yè)面尝抖,能夠立即喚醒App,用戶(hù)未安裝App漓踢,則跳去對(duì)應(yīng)的web link(自定義頁(yè)面)。
Universal Links支持從其他App中的UIWebView中跳轉(zhuǎn)到目標(biāo)app喧半。
提供Universal Link給別的App進(jìn)行App間的交流奴迅,然而對(duì)方并不能夠用這個(gè)方法去檢測(cè)你的App是否被安裝,具有比較好的隱私性挺据。
絕大多數(shù)平臺(tái)都支持Universal Link构蹬,微信7.0.5版本也解除了對(duì)Universal Link的限制科汗,同時(shí)也能被搜索引擎索引坤检。
3膘婶、App Links
Android M以上版本可以通過(guò)App Links,讓用戶(hù)在點(diǎn)擊一個(gè)鏈接時(shí)跳轉(zhuǎn)到App的指定頁(yè)面,前提是這個(gè)App已經(jīng)安裝并經(jīng)過(guò)驗(yàn)證莫瞬。App Links的最大的作用涨岁,就是可以避免從頁(yè)面喚醒App時(shí)出現(xiàn)的選擇瀏覽器選項(xiàng)框,前提是必須注冊(cè)相應(yīng)的Scheme印衔,就可以實(shí)現(xiàn)直接打開(kāi)關(guān)聯(lián)的App玄糟。
實(shí)際上App Links和Universal Links差異不大逢并,但相對(duì)來(lái)說(shuō)有不同的限制:
App links在國(guó)內(nèi)的支持還不夠,部分安卓瀏覽器并不支持跳轉(zhuǎn)至App米辐,而是直接在瀏覽器上打開(kāi)對(duì)應(yīng)頁(yè)面胸完。
系統(tǒng)詢(xún)問(wèn)是否打開(kāi)對(duì)應(yīng)App時(shí),假如用戶(hù)選擇“取消”并且選中了“記住此操作”翘贮,那么用戶(hù)以后就無(wú)法再跳轉(zhuǎn)App赊窥。
幾個(gè)方案的缺陷
這幾種方式無(wú)論哪種都無(wú)法解決這幾個(gè)問(wèn)題:
當(dāng)用戶(hù)未安裝目標(biāo)App時(shí),無(wú)法保留用戶(hù)停留的上下文狸页,也就是說(shuō)锨能,用戶(hù)下載完App后,無(wú)法在首次打開(kāi)App時(shí)還原指定頁(yè)面芍耘。
Web目前無(wú)法監(jiān)聽(tīng)App是否已安裝址遇,因此這幾個(gè)方案都需要一些其他方法兼容喚醒App,或者跳轉(zhuǎn)下載頁(yè)面斋竞。
那么怎樣實(shí)現(xiàn)用戶(hù)安裝App后進(jìn)入指定頁(yè)面呢倔约?
眾所周知,蘋(píng)果出于用戶(hù)隱私的保護(hù)坝初,設(shè)置了名為沙盒的機(jī)制:應(yīng)用只能訪問(wèn)它聲明可以訪問(wèn)的資源浸剩,但沙盒也阻礙了應(yīng)用間合理的信息共享。
但也不是完全沒(méi)辦法鳄袍,比如使用模糊匹配绢要,盡可能收集設(shè)備的特征,將Web和App上的信息點(diǎn)配合算法做一個(gè)匹配是可以做到的畦木,但準(zhǔn)確率和成功率就取決于算法本身袖扛。如果App本身業(yè)務(wù)需求不高,那么低精度的方案也可以滿(mǎn)足十籍,但如果業(yè)務(wù)上需要一個(gè)能做到一對(duì)一精準(zhǔn)匹配的方案,那么精準(zhǔn)度不夠高顯然會(huì)影響業(yè)務(wù)的開(kāi)展唇礁。