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協同處理,兩端都需要做一些工作。

1.創建并上傳關聯文件

首先,你的網站必須支持https。

然后,創建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可以通過開發者賬號來查看,Bundle ID可以直接在工程里查看。

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

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

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

創建好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的話,需要將開發者中心的配置APPlication Services列表中的ASSociated Domains變成Enabled。

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

  1. 不需要手動的添加entitlements,當添加domain之后,系統會自動添加相應的文件到工程,如果沒有的情況下,只能通過手動添加。
  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類型的數據,對該數據處理來跳轉相應的界面。也就不再多說了。

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

注意事項

  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>點擊觸發</b>的Universal links。
  9. 用 Safari 打開目標域名,或者在其他 App 里用 SFSafariViewController, WKWebView, UIWebView 打開目標域名,都可以達到效果。

那些坑

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

這里的問題,就是我們將鏈接復制在備忘錄里發現可以拉起App,但是放在網頁里,點擊卻是沒有任何效果,這個幾乎就是跨域的鍋。

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

2. 選擇性跳轉

這個也是一個坑,蘋果會通過Universal links記錄用戶的行為習慣,當你通過一個Universal links成功的拉起了App,這時你發現在status bar右上角有一個小按鈕(帶一個小箭頭)。當你點擊了之后會成功的在Safari中打開,這時,蘋果就認為你不需要這個Universal links拉起App,此后在通過這個Universal links點擊時,都是在safari或者網頁中打開,不會再拉起App。這個是有辦法補救的,通過在Safari中點擊鏈接長按,在app中打開。此后通過Universal links就可以拉起App了。也就說,蘋果會記錄最后一次Universal links的跳轉情況來判斷是否需要拉起app。

這里感覺第一個的跨域跳轉與第二個的選擇性跳轉是很類似的,第一個在當前域名下點擊Universal links不能拉起app就相當于當前系統認為你這個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的測試網站可以檢測你上傳的文件是否正確。傳送門

寫的不好,如果有問題歡迎指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容