iOS App間相互跳轉(zhuǎn)漫談 - part1

概述

文章介紹當下iOS系統(tǒng)中各種App之間的跳轉(zhuǎn)技術(shù)扇雕,并最終重點介紹UniversalLinks的一種特殊的使用技巧來幫助App來引流米丘,提升轉(zhuǎn)化渗蟹。

背景

介紹下當下支持的App頁面跳轉(zhuǎn)技術(shù)及其優(yōu)劣:

  1. 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)安裝后面會介紹黔宛。

  2. 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)理不怎么喜歡的是居然還顯示評分星級,這是個頭疼的事情代咸。

  3. 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)册着。

  1. 項目的Info.plist文件中,新增一個Key -> "URL Types"預(yù)置的Key輸入時有聯(lián)想演熟。
  2. 新增完后會自動變成一個數(shù)組司顿,展開查看第一個元素绽媒,將其中 "URL identifier" 置為App的BundleID
  3. 并且平級新增一個Key -> "URL Schemes"預(yù)置Key有聯(lián)想。
  4. 新增完后自動變成數(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)站端

  1. 創(chuàng)建一個名為apple-app-site-association的JSON格式文件几睛,防止在可以被根目錄直接訪問到的地方。例如打算綁定m.alibaba.com那么就需要https://m.alibaba.com/apple-app-site-association這個文件可以正常訪問夯接,mine/type 為 json/text。
  2. 文件的內(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端

  1. 找到 Alibaba.entitlements 文件
  2. 在里面 com.apple.developer.associated-domains 的數(shù)組下面添加一個item
  3. 值為 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汪茧。

從詞典上查看椅亚,這兩個詞的意思表達非常相近,都有計劃策劃的意思舱污。

參考資料

Promoting Apps with Smart App Banners

Inter-App Communication

AppID查找工具

Support Universal Links

原文 - iOS App間相互跳轉(zhuǎn)漫談-UniversalLinks的極致使用]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呀舔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扩灯,更是在濱河造成了極大的恐慌媚赖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珠插,死亡現(xiàn)場離奇詭異惧磺,居然都是意外死亡,警方通過查閱死者的電腦和手機捻撑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門磨隘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缤底,“玉大人,你說我怎么就攤上這事番捂「鲞螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵白嘁,是天一觀的道長坑鱼。 經(jīng)常有香客問我,道長絮缅,這世上最難降的妖魔是什么鲁沥? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮耕魄,結(jié)果婚禮上画恰,老公的妹妹穿的比我還像新娘。我一直安慰自己吸奴,他們只是感情好允扇,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著则奥,像睡著了一般考润。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上读处,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天糊治,我揣著相機與錄音,去河邊找鬼罚舱。 笑死井辜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的管闷。 我是一名探鬼主播粥脚,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼包个!你這毒婦竟也來了刷允?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤碧囊,失蹤者是張志新(化名)和其女友劉穎恃锉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呕臂,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡破托,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歧蒋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土砂。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡州既,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萝映,到底是詐尸還是另有隱情吴叶,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布序臂,位于F島的核電站蚌卤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奥秆。R本人自食惡果不足惜逊彭,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望构订。 院中可真熱鬧侮叮,春花似錦、人聲如沸悼瘾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亥宿。三九已至卸勺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烫扼,已是汗流浹背孔庭。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留材蛛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓怎抛,卻偏偏與公主長得像卑吭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子马绝,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 寫在前面 上一篇已經(jīng)介紹了iOS系統(tǒng)層面提供的應(yīng)用之間跳轉(zhuǎn)的技術(shù)和實施方案豆赏,本篇會帶大家更深入的了解Univera...
    小明筆記閱讀 815評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)富稻,斷路器掷邦,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 前言 隨著用戶的需求越來越多,對App的用戶體驗也變的要求越來越高椭赋。為了更好的應(yīng)對各種需求抚岗,開發(fā)人員從軟件工程的角...
    一縷殤流化隱半邊冰霜閱讀 87,129評論 214 1,098
  • 當下孩子上學,受罪的往往是家長哪怔。每次上學去的時候宣蔚,唯恐忘帶這向抢,忘記帶那個,于是孩子背著書包塞得滿滿的胚委,自己都有些心...
    藥山閱讀 2,191評論 2 50