概述
文章介紹當下iOS系統(tǒng)中各種App之間的跳轉(zhuǎn)技術(shù)扇雕,并最終重點介紹UniversalLinks的一種特殊的使用技巧來幫助App來引流米丘,提升轉(zhuǎn)化渗蟹。
背景
介紹下當下支持的App頁面跳轉(zhuǎn)技術(shù)及其優(yōu)劣:
-
Scheme跳轉(zhuǎn)
例如:<appscheme>://detail?id=10000
用戶在系統(tǒng)中其他App中點擊scheme鏈接租悄;瀏覽器網(wǎng)頁中點擊scheme鏈接會彈出一個Alert彈框眶俩,讓用戶確認是否跳轉(zhuǎn)嫡丙。
優(yōu)勢:與http的url提供類似拴袭,可以通過URL直觀表達跳轉(zhuǎn)的頁面和意思。觸發(fā)條件可以是用戶點擊曙博,也可以通過程序觸發(fā)JS或者App拥刻。
劣勢:跳轉(zhuǎn)時系統(tǒng)會彈出確認框讓用戶確認,體驗略差羊瘩。并且不能知道App是否安裝泰佳,只能通過一些手段推測需要跳轉(zhuǎn)的App是否已經(jīng)安裝,如果跳轉(zhuǎn)時沒有安裝則會彈出“Safari不能打開該網(wǎng)頁尘吗,因為網(wǎng)址無效逝她。”的提示體驗打折扣睬捶,關(guān)于H5頁面如何推測App已經(jīng)安裝后面會介紹黔宛。 -
Smart App Banners
在HTML頁面中植入一個meta標簽,類似于:<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
訪問這個頁面的時候在網(wǎng)頁加載完后往下拉頁面可以看到App的跳轉(zhuǎn)入口擒贸,可以承接跳轉(zhuǎn)的App的功能臀晃。
可以手機訪問這個Demo頁面來體驗下
優(yōu)勢:對用戶而言觉渴,點擊進入不需要二次確認;自動檢測App安裝狀態(tài)徽惋,未安裝引導(dǎo)到App Store案淋,已安裝則可直接打開App,并帶入預(yù)置在app-argument中的url值险绘,讓App感知當前的頁面踢京,可以App中繼續(xù)行為。
劣勢:最大的問題是跳轉(zhuǎn)操作不可通過程序控制宦棺,只能由用戶點擊觸發(fā)跳轉(zhuǎn)瓣距;另一個產(chǎn)品經(jīng)理不怎么喜歡的是居然還顯示評分星級,這是個頭疼的事情代咸。 Univeral Links
從iOS9開始蹈丸,蘋果開放了一種新的App之間的跳轉(zhuǎn)方式,從使用體驗上來看呐芥,蘋果希望這種技術(shù)用于不打斷用戶的操作行為為前提逻杖,提供更好的App跳轉(zhuǎn)方式。舉例來說贩耐,正在訪問用戶正在訪問m.alibaba.com弧腥,那么如果用戶已經(jīng)安裝了Alibaba.com App那么系統(tǒng)將自動引導(dǎo)到App,并將正在訪問的完整http鏈接提供到打開的App以提供在App上繼續(xù)之前行為的能力潮太。
這種技術(shù)帶來了完美的體驗管搪,通俗點說,現(xiàn)在還能提供http的URL(當然需要https)直接打開App铡买,而且沒有二次確認!當然也有些地方有待完善奇钞,這個下文會詳細提到。
三種技術(shù)各有優(yōu)劣媒至,組合使用可以讓引流體驗變得非常好拒啰。下面會簡單介紹三種技術(shù)的部署方法和一些技巧完慧。
部署
Scheme方式跳轉(zhuǎn)
這種技術(shù)部署是需要App本身對scheme協(xié)議頭進行注冊的,而且這種注冊是屬于系統(tǒng)級別本地注冊關(guān)聯(lián)册着。
- 項目的Info.plist文件中,新增一個Key -> "URL Types"預(yù)置的Key輸入時有聯(lián)想演熟。
- 新增完后會自動變成一個數(shù)組司顿,展開查看第一個元素绽媒,將其中 "URL identifier" 置為App的BundleID
- 并且平級新增一個Key -> "URL Schemes"預(yù)置Key有聯(lián)想。
- 新增完后自動變成數(shù)組免猾,展開,在第一個元素中填入想要注冊的scheme協(xié)議頭即可囤热,比如想要注冊 "enalibaba://"猎提,那么只要輸入 "enalibaba" 即可。
這時App安裝后旁蔼,協(xié)議頭即注冊生效锨苏,可以通過瀏覽器地址欄中輸入該協(xié)議頭即可跳轉(zhuǎn)。
注意:因為是本地注冊棺聊,所以如果遇到某個其他App也注冊這個協(xié)議頭那會發(fā)生什么情況呢伞租?經(jīng)過實踐測試結(jié)果發(fā)現(xiàn),協(xié)議頭是本地搶注式葵诈,先被安裝的注冊的App擁有更高的優(yōu)先權(quán),當先裝的App被刪除時祟同,第二注冊者會命中晕城,以此后推泞坦。
App Smart Banner
這種方式是直接去中心化砖顷,去校驗贰锁,完全自由的一種部署方式。
唯一需要做的只是在html頁面新增meta標簽即可
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
使用iOS手機訪問這個地址 Demo頁面
Universal Links
這種方式更為麻煩一些滤蝠,因為相當于支持了http鏈接直接打開App豌熄,所以需要雙向授信才行。
網(wǎng)站端
- 創(chuàng)建一個名為
apple-app-site-association
的JSON格式文件几睛,防止在可以被根目錄直接訪問到的地方。例如打算綁定m.alibaba.com那么就需要https://m.alibaba.com/apple-app-site-association
這個文件可以正常訪問夯接,mine/type 為 json/text。 - 文件的內(nèi)容格式如下
{ "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", //bundleid "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] //path 可以通配符 }, { // 可配置多個域名和path匹配規(guī)則的綁定 "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] } }
App端
- 找到 Alibaba.entitlements 文件
- 在里面
com.apple.developer.associated-domains
的數(shù)組下面添加一個item - 值為
applinks:m.alibaba.com
即可
當然App端能找到entitlements文件需要打開Capabilities中的Associated Domain能力芯丧,這需要開發(fā)者賬號項目才能開啟缨恒。
到這里雙向綁定已做完,編譯項目到設(shè)備上萧锉,通過點擊在 備忘錄 中預(yù)置的匹配Universal Links鏈接辨赐,即可完美跳轉(zhuǎn)了帆焕。
為什么要放到備忘錄换吧?不能直接瀏覽器地址欄打開嗎满着?答案是不行风喇,還記得上面講過宁改,蘋果希望的是不打斷用戶意圖的情況下,所以在瀏覽器地址欄中直接輸入地址的行為魂莫,蘋果認為用戶有明顯意圖想要訪問http網(wǎng)頁还蹲,所以不會直接跳轉(zhuǎn)到App。當然程序也無法控制耙考,如果是JS程序跳轉(zhuǎn)某個UniversalLinks谜喊,那結(jié)果就是請求正常發(fā)出,并不會跳轉(zhuǎn)到App倦始。
而且斗遏,而且,蘋果的初衷其實是希望不同App之間可以通過這種方式相互跳轉(zhuǎn)鞋邑。
當初我親測微信跳轉(zhuǎn)Alibaba.com App完美跳轉(zhuǎn)炫狱。
后來,有一種非常規(guī)操作可以阻擋這種跳轉(zhuǎn)剔猿,以至于現(xiàn)狀是幾乎所有App都禁用了UniversalLinks的外跳视译。
但我仍然有解決辦法,我會把UniversalLinks的運作原理和攻防技巧放在下一篇文章里詳細描述归敬。
豆知識
Scheme和Schema
其實正確的叫法應(yīng)該叫Scheme[skim]酷含,而不是Schema['ski:m?],官方文檔在描述中也是一直使用Scheme汪茧。
從詞典上查看椅亚,這兩個詞的意思表達非常相近,都有計劃策劃的意思舱污。