iOS Deep Links

Deep Link背景知識(shí)

Web鏈接不知道app的存在亡驰,當(dāng)在手機(jī)上打開(kāi)一個(gè)Jet.com這樣一個(gè)網(wǎng)頁(yè)鏈接饿幅,你會(huì)進(jìn)入到瀏覽器中打開(kāi)Jet.com網(wǎng)站,盡管你的手機(jī)上已經(jīng)安裝了Jet app栗恩。Deep Link解決的問(wèn)題就點(diǎn)擊一個(gè)網(wǎng)頁(yè)鏈接,能夠跳轉(zhuǎn)到對(duì)應(yīng)的app中磕秤。

傳統(tǒng)的deep link

傳統(tǒng)的deep link當(dāng)你在點(diǎn)擊鏈接的時(shí)候乳乌,能夠跳轉(zhuǎn)到相應(yīng)的app中市咆,只要你已經(jīng)安裝了app汉操。也就是如果手機(jī)上沒(méi)有安裝app蒙兰,跳轉(zhuǎn)至下載頁(yè)磷瘤。在iOS中芒篷,可以通過(guò)URL Scheme和Universe Link來(lái)實(shí)現(xiàn)。

deferred deep Link

deferred deep link是指用戶打開(kāi)一個(gè)web page的時(shí)候并沒(méi)有安裝對(duì)應(yīng)的app,在用戶安裝app以后打開(kāi)直接跳轉(zhuǎn)到鏈接對(duì)應(yīng)的內(nèi)容医窿。

deferred deep link

實(shí)現(xiàn)思路:H5需要上報(bào)設(shè)備的一些信息到服務(wù)器端進(jìn)行保存糊识,用戶下載后摔蓝,第一次啟動(dòng)也上報(bào)設(shè)備信息,去服務(wù)器端查找是否有匹配的H5頁(yè)點(diǎn)擊行為拌滋,如果匹配則進(jìn)行app內(nèi)部跳轉(zhuǎn)猜谚。

應(yīng)該上報(bào)哪些信息更獲得比較高的匹配準(zhǔn)確率败砂?
  • Device Info
    1> 前端獲取盡可能多的信息上報(bào)后臺(tái)進(jìn)行存儲(chǔ)
    2> app啟動(dòng)時(shí)魏铅,同樣提供盡可能多的設(shè)備信息,向后臺(tái)查詢
    3> 后臺(tái)根據(jù)相關(guān)設(shè)備信息以及前端和app端訪問(wèn)時(shí)間進(jìn)行模糊匹配览芳,匹配成功后向app返回?cái)?shù)據(jù)
    支持設(shè)備無(wú)限制,無(wú)侵入性沧竟,理論成功率低,實(shí)踐成功率較高

  • Paste Board
    1> 前端生成唯一標(biāo)識(shí)符identifier悟泵,通過(guò)js腳本保存在剪貼板
    2> 前端將identifier和其他數(shù)據(jù)上報(bào)后臺(tái),后臺(tái)進(jìn)行存儲(chǔ)
    3> app啟動(dòng)時(shí)讀取剪貼板中的identifier魁袜,向后臺(tái)查詢數(shù)據(jù)
    支持設(shè)備iOS10+,有侵入性峰弹,成功率高

  • 網(wǎng)頁(yè)和app共用Cookies
    Github上的例子[2]
    app內(nèi)SFSafariViewController和系統(tǒng)的safari是同一個(gè),共享同一個(gè)沙盒鞠呈,可以操作同一個(gè)cookie。
    1> 啟動(dòng)本地服務(wù)器蚁吝,safari訪問(wèn)指定頁(yè)面設(shè)置cookie舀射,對(duì)應(yīng)于為XXXHost
    2> 前端將相關(guān)數(shù)據(jù)上報(bào)后臺(tái),后臺(tái)解析cookie并與數(shù)據(jù)進(jìn)行綁定保存
    3> app啟動(dòng)時(shí)怀伦,先開(kāi)啟SFSafariViewController,訪問(wèn)特定url邢羔,并攜帶設(shè)備id
    4> 后臺(tái)解析上述訪問(wèn)url的設(shè)備id,并解析訪問(wèn)的cookie拜鹤,將cookie與設(shè)備id綁定
    5> app請(qǐng)求api接口流椒,攜帶設(shè)備id,通過(guò)后臺(tái)查詢相關(guān)信息
    app啟動(dòng)時(shí)SFSafariViewController設(shè)置為透明惯裕,用戶無(wú)法感知這一流程:蘋(píng)果審核指南:5.1.1
    支持設(shè)備iOS9,iOS10绣硝,無(wú)侵入性
    流程如下圖所示:

    通過(guò)Cookie進(jìn)行匹配[1]

整體流程示意圖
deferred link整體流程示意圖[1]

現(xiàn)有的Deep Link成熟產(chǎn)品Branch links

翻譯自How Branch links work
Branch Links是一個(gè)成熟的Deep Link產(chǎn)品域那,查看其官方文檔有助于理解Deep Link在前端和后臺(tái)的多方面應(yīng)用及在前端和后臺(tái)的API設(shè)計(jì)猜煮。

1. 創(chuàng)建Links

  • Mobile SDK
    當(dāng)你集成了Mobile SDK,在你的app內(nèi)分享或者邀請(qǐng)另一個(gè)用戶的時(shí)候淑蔚,利用SDK發(fā)出請(qǐng)求愕撰,然后SDK返回一個(gè)Branch link。
  • Web SDK
    當(dāng)你集成了Web SDK搞挣,在的網(wǎng)頁(yè)內(nèi)一個(gè)用戶點(diǎn)擊分享或者邀請(qǐng)另一個(gè)用戶的時(shí)候,利用SDK發(fā)出請(qǐng)求仓犬,然后SDK返回一個(gè)Branch link舍肠。
  • API
    使用API批量生成Branch Link窘面,比如需要為郵件聯(lián)系人每一個(gè)人發(fā)一個(gè)唯一的link叽躯。
  • Dynamic Long Links
    不想通過(guò)SDK的API來(lái)創(chuàng)建links点骑,只是在自己的link后邊加上一些查詢參數(shù)。
  • Quick Links
    具體定制links的外觀等等畔况,通過(guò)Dashboard平臺(tái)訂制

2. links中攜帶數(shù)據(jù)

通過(guò)Dashboard的Quick Link Creator跷跪,可以為link添加任一額外的key-value數(shù)據(jù)馋嗜。建議添加如下字段:

說(shuō)明 例子
channel 分發(fā)link的渠道 Facebook, email, SMS
feature link的動(dòng)作 share, invite, deal, gift
campaign link對(duì)應(yīng)的運(yùn)營(yíng)活動(dòng) "Fall Sale"秋季促銷(xiāo), "Launch Event"發(fā)布活動(dòng)
tags link相關(guān)的標(biāo)簽 boots, recipes, paid
link中攜帶數(shù)據(jù)

3. 點(diǎn)擊links

Branch link實(shí)際上是web上的一個(gè)網(wǎng)頁(yè)吵瞻,當(dāng)用戶點(diǎn)擊Branch link時(shí)橡羞,打開(kāi)了這個(gè)webpage,我們使用matching去檢測(cè)你的用戶設(shè)備卿泽,操作系統(tǒng)签夭,瀏覽器,和瀏覽器相關(guān)的cookie措拇,檢查用戶是否安裝了app慎宾,然后進(jìn)行下一步操作。

點(diǎn)擊鏈接之后的行為

4.使用數(shù)據(jù)

deep linking的難點(diǎn)在于券犁,與link相關(guān)的數(shù)據(jù)汹碱,比如用戶從哪來(lái),要到哪去色难,都會(huì)在app store丟失。一旦你打開(kāi)app娇昙,app就通過(guò)Mobile SDK請(qǐng)求Branch笤妙,我們使用device fingerprints去將app打開(kāi)與最初的link點(diǎn)擊匹配起來(lái),即使中間被app store下載步驟所分割股毫。

當(dāng)匹配完成后召衔,將發(fā)送與該link相關(guān)的數(shù)據(jù)(步驟2)到你app中,然后趣席,app就可以使用這些數(shù)據(jù)醇蝴∮扑ǎ可以使用與鏈接關(guān)聯(lián)的數(shù)據(jù)進(jìn)行個(gè)性化顯示(比如link中配置了一張圖片),當(dāng)然也可以鏈接到app的具體內(nèi)容頁(yè)面嵌纲。

app獲取link攜帶的數(shù)據(jù)

5. 匹配準(zhǔn)確率

見(jiàn)第二節(jié)Branch Matching

6. 統(tǒng)計(jì)圖表

所有的link攜帶的數(shù)據(jù)腥沽,link的點(diǎn)擊鸠蚪,app的使用情況都可以通過(guò)圖表展示出來(lái)茅信。通過(guò)圖表獲得的信息包括:

  • 獲取最多下載的渠道
  • 推薦貢獻(xiàn)最多的用戶
  • 對(duì)某一塊內(nèi)容的查閱,點(diǎn)擊和安裝

如下圖所示:


Link點(diǎn)擊統(tǒng)計(jì)

內(nèi)容統(tǒng)計(jì)

Branch Matching

100%匹配的方法

直接deeplinking

當(dāng)app已經(jīng)安裝妖谴,可以直接通過(guò)Branch links的配置得到app的URL scheme(myapp://)或者Universal Links膝舅,我們可以直接打開(kāi)app并傳遞一個(gè)click identifier;click identifier然后被發(fā)送到Branch servers去獲取與link相關(guān)聯(lián)的數(shù)據(jù)洼滚。

非100%匹配的方法

瀏覽器到app的fingerprint匹配

Branch搜集了用戶在瀏覽器中點(diǎn)擊Branch Link獲取的設(shè)備信息技潘,和用戶在打開(kāi)app時(shí)搜集到的設(shè)備信息。這些信息包括IP地址铲掐,操作系統(tǒng)值桩,操作系統(tǒng)版本,設(shè)備類型以及其他參數(shù)斯入。這就是用戶的digital fingerprint蛀蜜,能夠從瀏覽器和app中獲取到。

但是由于瀏覽器中獲取的digital fingerprint數(shù)據(jù)比從app中獲取的digital fingerprint數(shù)據(jù)量要少磅摹,所以從app中獲取到的digital fingerprint是無(wú)法100%匹配到從瀏覽器中獲取到的digital fingerprint霎奢。當(dāng)打開(kāi)app時(shí),發(fā)現(xiàn)有多個(gè)瀏覽器digital fingerprint與之匹配帝美,可以選擇一個(gè)最小時(shí)間范圍內(nèi)的digital fingerprint作為匹配晤硕,但是這個(gè)匹配可能不準(zhǔn)確。

Configuring Your iOS App for 100% Match ( > iOS 10 only)

Include SafariServices.framework

First off, you'll need to include the SafariServices.framework into your app to leverage this. Currently, as soon as you add the Framework, Branch will start triggering the Safari-based 100% match technique. To add the framework, simply go to your Xcode project:

  • Select the right build target
  • Select the General tab
  • Scroll down to Linked Frameworks and Libraries
  • Click the + button
  • Add SafariServices.framework
Set the matching domain to app.link

Because our Safari View Controller matching method works based on comparing the cookie Branch set on a click to the cookie set with the View Controller, the domains must be consistent. iOS assumes that you're on the bnc.lt domain, so if you're using app.link domain as your default (most apps), you must specify this domain in your PLIST file.

Please set the branch_app_domain to app.link in your PLIST as shown below:

Need to disable SafariViewController?

Note that this mechanism can be disabled using the following method, which should be called before initSession.

Objective-C|Swift
[[Branch getInstance] disableCookieBasedMatching];

參考文獻(xiàn)

[1] LDLink方案設(shè)計(jì). 老周
[2] App自動(dòng)登錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市占拍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌表牢,老刑警劉巖掖疮,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浊闪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搁宾,警方通過(guò)查閱死者的電腦和手機(jī)盖腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸟款,“玉大人茂卦,你說(shuō)我怎么就攤上這事〈υ” “怎么了蛛砰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵泥畅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我位仁,道長(zhǎng)障癌,這世上最難降的妖魔是什么辩尊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮轿亮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘我注。我一直安慰自己但骨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布掠抬。 她就那樣靜靜地躺著校哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腰奋。 梳的紋絲不亂的頭發(fā)上抱怔,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天野蝇,我揣著相機(jī)與錄音,去河邊找鬼绕沈。 笑死乍狐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浅蚪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盗誊!你這毒婦竟也來(lái)了隘弊?” 一聲冷哼從身側(cè)響起梨熙,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刀诬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后质欲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帐要,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榨惠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年赠橙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片期揪。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凤薛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出速兔,到底是詐尸還是另有隱情活玲,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布镀钓,位于F島的核電站镀迂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏窟赏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望求豫。 院中可真熱鬧诉稍,春花似錦、人聲如沸杯巨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)心褐。三九已至笼踩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掘而,已是汗流浹背于购。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留女蜈,地道東北人色瘩。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓居兆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泥栖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勋篓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 20180914 修心日記第十九天 壞掉的雨傘 今天譬嚣,孩子放學(xué)路上打電話說(shuō)钞它,不小心把雨傘掉在地上摔壞了。以往尼桶,我會(huì)...
    湘笨?jī)?/span>閱讀 504評(píng)論 8 5
  • 忽悠與被忽悠 兒時(shí)記計(jì)九 忽悠與被忽悠 春節(jié)己接近尾聲泵督,元宵佳節(jié)即將來(lái)臨庶喜。舞獅子...
    雪若晨曦閱讀 761評(píng)論 1 7
  • 九寨溝的色彩、繽紛溢豆、奇特瘸羡、變幻無(wú)窮;九寨溝的水景形態(tài)極美队他,湖峻村,瀑,潭粘昨,泉,異彩紛呈芭析,收盡天下水景之美態(tài)吞瞪。九寨溝,一...
    旅途印記閱讀 433評(píng)論 0 0
  • 我還記得以前有個(gè)學(xué)長(zhǎng)告訴我們对碌,人際交往中有一條很重要的法則蒿偎,就是要給對(duì)方他需要的,而不是你認(rèn)為他需要的。對(duì)一個(gè)人好...
    我的蜂蜜呢閱讀 244評(píng)論 0 1