Universal Links

什么是Universal Links婶博?

iOS9之后,Apple推出的一種通用鏈接荧飞,能夠方便的通過https鏈接來啟動APP,通過唯一的網址名党,不需要特別的schema就可以鏈接一個特定的視圖到APP叹阔。
這也就設計到universal links的幾個特性:

  1. Unique:唯一性,不像自定義Url schemes那樣传睹,因為他使用到了你網站的http或者https鏈接
  2. Secure:安全性耳幢,當用戶安裝應用時,iOS會檢測你上傳到服務器上的文件欧啤,以確保你的網站允許其代表應用打開你的應用睛藻。
  3. Flexible:靈活性,當沒有安裝你的app時universal links也是可以正常使用的邢隧,當點擊link時會直接在safari中打開url店印。
  4. Simple:一個url可以為app和web提供服務。
  5. Private:其他app可以與你的app通信倒慧,不需要知道你的應用程序是否安裝按摘。

配置Universal links

配置Universal links需要網站與app協(xié)同處理包券,兩端都需要做一些工作。

1.創(chuàng)建并上傳關聯(lián)文件

首先炫贤,你的網站必須支持https溅固。

然后,創(chuàng)建apple-app-site-association文件兰珍,注意一定是沒有.json后綴的侍郭,在未壓縮的情況下,文件大小不能超過128KB掠河。

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

<b>appID:</b>是由TeamID+BundleId組成亮元,TeamID可以通過開發(fā)者賬號來查看,Bundle ID可以直接在工程里查看口柳。

<b>paths:</b>是一個數(shù)組類型用來指定網站路徑苹粟,并且是大小寫敏感的:
使用“*” 指定整個網站,在域名下的任何地址都可以打開App跃闹。

“/wwdc/news/”指定鏈接嵌削,以指定網站的某些部分.

還可以使用“?”匹配任何單個字符,"/foo/*/bar/201?/mypage"

創(chuàng)建好apple-app-site-association文件后望艺,將其上傳到web服務器的跟目錄下或者.well-known子目錄下苛秕。<b>文件是通過https訪問不需要有任何重定向。</b>然后你可以直接在瀏覽器中輸入domain/apple-app-site-association或者domain/.well-known/apple-app-site-association訪問你所上傳的文件找默。

通過Apple的測試網站可以檢測你上傳的文件是否正確艇劫。傳送門

注意:在用Nginx處理文件的MIME Type配置時,在域名下針對該文件進行處理惩激,也就是說response的Content-Type必須設置為”application/json“店煞。

使用Nginx處理文件的MIME Type配置,在server的某個域名下針對該文件處理

location /apple-app-site-association {
    default_type application/json;
}

接下來就是在App內部配置了风钻。

  1. 需要支持Universal links的話顷蟀,需要將開發(fā)者中心的配置APPlication Services列表中的ASSociated Domains變成Enabled。

  2. 在項目targets->Capabilities->Associated Domains中配置App link骡技。在這里需要注意一下鸣个,有的域名為www.abc.comabc.com,這兩個對于Universal links來說是不同的域名布朦,所以囤萤,如果你的網站是這兩個都需要做處理的話,需要將這兩個域名都放在associate domains列表下是趴。在添加時都要將applinks:放在域名前面涛舍。
    例如:

  1. 不需要手動的添加entitlements,當添加domain之后唆途,系統(tǒng)會自動添加相應的文件到工程做盅,如果沒有的情況下缤削,只能通過手動添加。
  2. 在AppDelegate中調用方法來處理Universal links的回調吹榴。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *webUrl = userActivity.webpageURL;
        if ([webUrl.host isEqualToString:@"domain"]) {
            //打開對應頁面
        }else{
            //不能打開亭敢,使用Safari 打開
            [[UIApplication sharedApplication]openURL:webUrl];
        }
    }
    return YES;
}

這里回傳過來一個NSUserActivity類型的數(shù)據,對該數(shù)據處理來跳轉相應的界面图筹。也就不再多說了帅刀。

到此整體的流程就已經處理完了。相關的內容介紹還是推薦看官方文檔远剩,寫的比較細致扣溺。

注意事項

  1. apple-app-site-association文件上傳一定不要有.json后綴,那些隱藏后綴名的需要注意瓜晤。
  2. web server必須支持https
  3. 上傳文件最好在根目錄下锥余,官方說也可以在根目錄下的.well-known目錄下。
  4. Xcode中配置Associated Domians時痢掠,一定要添加applinks:前綴驱犹。最多添加20-30條。
  5. app在<b>安裝</b>的時候會訪問domain獲取apple-app-site-association文件,這個可以通過抓包來獲取足画。不是在打開app時訪問雄驹。
  6. 直接dev打包到手機上應該就可以測試,保證網絡暢通淹辞。
  7. 最簡單的方式檢測Universal links是否有效医舆,將那個鏈接拷貝的備忘錄中(imessage、郵件)象缀,直接點擊鏈接會跳轉到App蔬将,或者長按,會在彈出的ActionSheet中第二個顯示在xxx中打開央星。
  8. 一定是從上級頁面(網頁)<b>點擊觸發(fā)</b>的Universal links霞怀。
  9. 用 Safari 打開目標域名,或者在其他 App 里用 SFSafariViewController, WKWebView, UIWebView 打開目標域名等曼,都可以達到效果。

那些坑

1. 跨域跳轉:餓了么遇到的一個問題

這里的問題凿蒜,就是我們將鏈接復制在備忘錄里發(fā)現(xiàn)可以拉起App禁谦,但是放在網頁里,點擊卻是沒有任何效果废封,這個幾乎就是跨域的鍋州泊。

這個應該是在iOS9.2之后出現(xiàn)的問題。假設當前網頁是abc.com/a漂洋,在這里有一個鏈接跳轉到abc.com/b,還是在同一個域名abc.com下遥皂。這時點擊力喷,系統(tǒng)將不會進行拉起App的操作,必須在不同的域名下比如abcd.com/b演训,這樣才會根據關聯(lián)文件去判斷是否要拉起app弟孟。這個時候就需要在Xcode中添加一個域名在碰到跨域問題不能拉起App時,鏈接改為其他的域名样悟。
這里也有解釋

2. 選擇性跳轉

這個也是一個坑拂募,蘋果會通過Universal links記錄用戶的行為習慣,當你通過一個Universal links成功的拉起了App窟她,這時你發(fā)現(xiàn)在status bar右上角有一個小按鈕(帶一個小箭頭)陈症。當你點擊了之后會成功的在Safari中打開,這時震糖,蘋果就認為你不需要這個Universal links拉起App录肯,此后在通過這個Universal links點擊時,都是在safari或者網頁中打開吊说,不會再拉起App论咏。這個是有辦法補救的,通過在Safari中點擊鏈接長按疏叨,在app中打開潘靖。此后通過Universal links就可以拉起App了。也就說蚤蔓,蘋果會記錄最后一次Universal links的跳轉情況來判斷是否需要拉起app卦溢。

這里感覺第一個的跨域跳轉與第二個的選擇性跳轉是很類似的,第一個在當前域名下點擊Universal links不能拉起app就相當于當前系統(tǒng)認為你這個universal links本身就在瀏覽器中打開的秀又,認為不需要拉起app单寂。

When a user taps a universal link that you handle, iOS also examines the user’s recent choices to determine whether to open your app or your website. For example, a user who has tapped a universal link to open your app can later choose to open your website in Safari by tapping a breadcrumb button in the status bar. After the user makes this choice, iOS continues to open your website in Safari until the user chooses to open your app by tapping OPEN in the Smart App Banner on the webpage.

相關網站

官方文檔

通過Apple的測試網站可以檢測你上傳的文件是否正確。傳送門

寫的不好吐辙,如果有問題歡迎指正宣决。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昏苏,隨后出現(xiàn)的幾起案子尊沸,更是在濱河造成了極大的恐慌,老刑警劉巖贤惯,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洼专,死亡現(xiàn)場離奇詭異,居然都是意外死亡孵构,警方通過查閱死者的電腦和手機屁商,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈墅,“玉大人蜡镶,你說我怎么就攤上這事雾袱。” “怎么了官还?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵芹橡,是天一觀的道長。 經常有香客問我妻枕,道長僻族,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任屡谐,我火速辦了婚禮述么,結果婚禮上,老公的妹妹穿的比我還像新娘愕掏。我一直安慰自己度秘,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布饵撑。 她就那樣靜靜地躺著剑梳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滑潘。 梳的紋絲不亂的頭發(fā)上垢乙,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音语卤,去河邊找鬼追逮。 笑死,一個胖子當著我的面吹牛粹舵,可吹牛的內容都是我干的钮孵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼眼滤,長吁一口氣:“原來是場噩夢啊……” “哼巴席!你這毒婦竟也來了?” 一聲冷哼從身側響起诅需,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤漾唉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堰塌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赵刑,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年蔫仙,在試婚紗的時候發(fā)現(xiàn)自己被綠了料睛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丐箩。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摇邦,死狀恐怖恤煞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情施籍,我是刑警寧澤居扒,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站丑慎,受9級特大地震影響喜喂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜竿裂,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一玉吁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腻异,春花似錦进副、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至机打,卻和暖如春矫户,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背残邀。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工皆辽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罐旗。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓膳汪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親九秀。 傳聞我的和親對象是個殘疾皇子遗嗽,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容