iOS Universal Links(通用鏈接) 適配小結(jié)

簡介

Universal Links 是蘋果在2015年WWDC上推出的一項新功能,官方功能描述如下:

In iOS 9 and later, universal links let users open your app when they tap links to your website within WKWebView and UIWebView views and Safari pages, in addition to links that result in a call to openURL:, such as those that occur in Mail, Messages, and other apps.

簡單來說即當(dāng)用戶在 WKWebView、UIWebView 或者 Safari 中點擊一個鏈接,如果設(shè)備上安裝了適配該鏈接的 app,就可以跳轉(zhuǎn)該 app 對應(yīng)的頁面碗啄,否則仍然展示網(wǎng)頁 。由于目前微信內(nèi)置瀏覽器仍然不支持 openURL 的方式進(jìn)行應(yīng)用間的跳轉(zhuǎn),不少 app 產(chǎn)品通過接入 Universal Links 實現(xiàn)微信瀏覽器一鍵跳轉(zhuǎn)到自己app的功能米苹。

效果

在“取暖” app 中接入 Universal Links ,微信中打開分享的話題砰琢,點擊底部“打開App”按鈕蘸嘶,直接跳轉(zhuǎn)到“取暖”對應(yīng)的話題詳情頁面:


微信一鍵跳轉(zhuǎn)到app

流程

1.創(chuàng)建一個包含 JSON 數(shù)據(jù)的 apple-app-site-association 文件,內(nèi)容格式如下:
apple-app-site-association 文件內(nèi)容

? appID:app Prefix + Bundle ID, 其中 app Prefix 可以從蘋果開發(fā)賬號頁面"Certificates, Identifiers & Profiles" - "Identifiers" - "App IDs" 下找到對應(yīng) App IDs 查看陪汽,Bundle ID 可以在項目的 target -- General 中找到训唱;

? paths :設(shè)定你的 app 支持的路徑列表,只有這些指定的路徑的鏈接,才能被 app 所處理。其中 "*" 表示任意路徑(可接于指定路徑后面挚冤,表示該指定路徑下的所有子路徑)况增,"?" 表示替換路徑中的一個字符。

Use * to specify your entire website

Include a specific URL, such as /wwdc/news/, to specify a particular link

Append * to a specific URL, such as /videos/wwdc/2015/*, to specify a section of your website

In addition to using * to match any substring, you can also use ? to match any single character. You can combine both wildcards in a single path, such as /foo/*/bar/201?/mypage.

注意點:
1> 正常情況下app Prefix 和開發(fā)者賬號頁面"Membership" - "Membership information" 中的Team ID是相同的训挡,但是對于一些年代比較久遠(yuǎn)的app澳骤,這兩個值可能會不同歧强,此時應(yīng)該選擇app Prefix;

app Prefix

2> paths 大小寫敏感为肮;

3> "?" 表示替換一個字符誊锭,但是類似"#"這種特殊字符不可以被替換,例如paths中填寫 "/foo/*/bar/201?/mypage"弥锄,如果實際域名中路徑為 "/foo/abc/bar/201#/mypage"丧靡,則無法實現(xiàn)跳轉(zhuǎn);

4> apple-app-site-association 文件的內(nèi)容是JSON格式籽暇,其本身并沒有任何后綴名温治;

2.將 apple-app-site-association 文件上傳到服務(wù)器的 ".well-known" 或者根目錄下(親測兩個目錄均能生效)。
3. 在 Xcode - TARGETS - Capabilities 中打開 "Associated Domains" 開關(guān)戒悠,在Domains中添加需要進(jìn)行跳轉(zhuǎn)的域名(所有適配的域名前面都需要加上 "applinks:" 才能生效)熬荆;
配置域名

完成步驟2和3,可通過蘋果官方提供的網(wǎng)址進(jìn)行驗證是否生效绸狐,如果域名配置成功卤恳、apple-app-site-association 文件上傳成功且格式正確,則 "Link to Application" 狀態(tài)為 "PASSED".

配置成功1

實際適配過程中寒矿,會出現(xiàn)文件正常上傳突琳,瀏覽器中訪問地址也可以正常下載 apple-app-site-association 文件,但是通過上述網(wǎng)站進(jìn)行驗證顯示狀態(tài)不通過的情況符相。這時也可以通過在備忘錄中添加記事本或短信中輸入App能識別的鏈接拆融,如果直接點擊此鏈接能直接跳轉(zhuǎn)到你的app,或是長按鏈接文字,在出現(xiàn)的彈出菜單中第二項是“在'XXX'中打開”啊终,也代表配置成功镜豹。

配置成功2
4. 在項目的 AppDelegate 里實現(xiàn)回調(diào)方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
{
    if ([userActivity.activityType   isEqualToString:NSUserActivityTypeBrowsingWeb]) {

      NSURL *webpageURL = userActivity.webpageURL;
      NSString *host = webpageURL.host;

      if ([host isEqualToString:@"xxxx.com"]) { // "xxxx.com"為步驟3中配置的域名
        // 解析路徑、跳轉(zhuǎn)到指定界面 and so on...
    }
    else {
      [[UIApplication sharedApplication]openURL:webpageURL];
    }
  }
  return YES;
}```

當(dāng) userActivity 類型為 NSUserActivityTypeBrowsingWeb , 表明它是由Universal Links捕獲進(jìn)來蓝牲,即可以添加解析路徑趟脂、跳轉(zhuǎn)到指定界面等具體操作。

# 補(bǔ)充
需要特別注意一點:必須跨域才能支持 Universal Links 例衍!

>When a user is browsing your website in Safari and they tap a universal link to a URL in the same domain as the current webpage, iOS respects the user’s most likely intent and opens the link in Safari. If the user taps a universal link to a URL in a different domain, iOS opens the link in your app.

舉例假設(shè)當(dāng)前微信瀏覽器中話題詳情頁面的 URL 為 "www.baidu.com/XXX/YYY"昔期,底部“打開App”按鈕對應(yīng)的鏈接URL為 "www.baidu.com/AAA/BBB",雖然通過上述4步配置了 "www.baidu.com/AAA/BBB" 路徑肄渗,但由于兩者都在百度的域名下镇眷,因此實際不能完成跳轉(zhuǎn)。

通過以上4步及跨域支持翎嫡,即可實現(xiàn)一鍵從微信跳轉(zhuǎn)到app的功能欠动,但是細(xì)心的讀者可能會發(fā)現(xiàn),從微信跳轉(zhuǎn)到app的時候,屏幕右上角還有個 "warmup.cc" 的小箭頭:

![右上角跳轉(zhuǎn)箭頭](http://upload-images.jianshu.io/upload_images/716949-5fdb94194ba43dc4.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

點擊該箭頭具伍,會在Safari中打開該頁面翅雏。此時再回到微信瀏覽器中點擊 "打開App"按鈕,神奇的事情出現(xiàn)了:無法跳轉(zhuǎn)到appH搜俊M浮!

解決方案:在Safari中打開該頁面萤厅,將網(wǎng)頁拉倒最頂部橄抹,會出現(xiàn)一個懸浮框,點擊懸浮框中的打開按鈕惕味,又跳回到app中打開指定頁面楼誓,此時再回到微信瀏覽器中點擊 "打開App"按鈕,又能正常跳轉(zhuǎn)到app了名挥。

![Safari中的橫條](http://upload-images.jianshu.io/upload_images/716949-112d6b0ee9dca183.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

分析:Universal Links 功能的接入其實相當(dāng)于給某些 URL 添加了一種新的打開方式疟羹,但是舊的通過瀏覽器打開 URL 的方式仍然可用,當(dāng)點擊右上角跳轉(zhuǎn)箭頭時禀倔,相當(dāng)于又設(shè)置這些特定 URL 的默認(rèn)打開方式為瀏覽器而非 web榄融,因此一鍵跳轉(zhuǎn)功能此時會失效。反之通過點擊頂部 "打開" 按鈕救湖,相當(dāng)于又將這些特定 URL 的默認(rèn)打開方式修改為 app 愧杯,一鍵跳轉(zhuǎn)功能恢復(fù)正常。

ps:在Safari中打開頁面剛進(jìn)入時捎谨,橫條是隱藏的民效,一定要將頁面拉到最頂部時才能顯示憔维。之前曾考慮通過修改頁面布局讓其默認(rèn)顯示涛救,但是由于其并不是網(wǎng)頁內(nèi)部元素,以失敗告終 T^T .
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末业扒,一起剝皮案震驚了整個濱河市检吆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌程储,老刑警劉巖蹭沛,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異章鲤,居然都是意外死亡摊灭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門败徊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帚呼,“玉大人,你說我怎么就攤上這事∶荷保” “怎么了眷蜈?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沈自。 經(jīng)常有香客問我酌儒,道長,這世上最難降的妖魔是什么枯途? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任忌怎,我火速辦了婚禮,結(jié)果婚禮上酪夷,老公的妹妹穿的比我還像新娘呆躲。我一直安慰自己,他們只是感情好捶索,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布插掂。 她就那樣靜靜地躺著,像睡著了一般腥例。 火紅的嫁衣襯著肌膚如雪辅甥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天燎竖,我揣著相機(jī)與錄音璃弄,去河邊找鬼。 笑死构回,一個胖子當(dāng)著我的面吹牛夏块,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纤掸,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼脐供,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了借跪?” 一聲冷哼從身側(cè)響起政己,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掏愁,沒想到半個月后歇由,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡果港,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年沦泌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛掠。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡谢谦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情他宛,我是刑警寧澤船侧,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站厅各,受9級特大地震影響镜撩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜队塘,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一袁梗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憔古,春花似錦遮怜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焰情,卻和暖如春陌凳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背内舟。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工合敦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人验游。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓充岛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耕蝉。 傳聞我的和親對象是個殘疾皇子崔梗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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