iOS Universal Links(通用連結)

來源:互聯網
上載者:User

iOS Universal Links(通用連結)
簡介

什麼是Universal Links(通用連結)?
這是iOS9推出的一項功能,如果你的應用支援Universal Links(通用連結),那麼就能夠方便的通過傳統的HTTP連結來啟動APP(如果iOS裝置上已經安裝了你的app,不需要額外做任何判斷等), 或者開啟網頁(iOS裝置上沒有安裝你的app).或許可以更簡單點來說明,在iOS9之前,對於從各種從瀏覽器,Safari、UIWebView或者 WKWebView中喚醒APP的需求,我們通常只能使用scheme.首先是app中註冊某個scheme,例如

在網頁中,

開啟APP開啟撥號開啟系統的簡訊app

但是這種方式有個不好的地方,就是需要提前判斷系統中是否安裝了能夠響應此scheme的app,這個判斷,網上很多,例如從瀏覽器或者Webview 中喚醒APP,如文章所描述的那樣,很多網頁中的判斷是有問題的,經常會出現空白頁,跳轉不了等.更加悲催的是這種通過scheme方式來開啟其它的app的方式,在中是被禁用了的.這意味著從的app中,是沒法開啟我們的app的.

Universal Links(通用連結):一條普通的http連結,例如https://yohunl.com/openApp,當你支援通用連結的時候,系統中安裝了你的app,那麼使用者點選連結,就直接進入到你的app中了,無論你是在中還是在其它哪裡!!! 當你沒有安裝的時候,你可以去到你指定的頁面(你可以直接展示你原來的H5頁面,也可以跳轉到下載頁等).也就是說,使用者無需知道你是否安裝了app,如果安裝了,這條連結就可以進app(進入你app了,你就可以以本地原生頁面去展示資訊給使用者了),沒有安裝,就直接進原來的h5頁面,對使用者來說,是一個無縫的過程,非常順暢!

官方的說明文檔

Universal Links(通用連結)的優點 唯一性: 不像自訂的scheme,因為它使用標準的http/https連結到你的web網站,所以它不會被其它的app所聲明.另外,Custom URL scheme 因為是自訂的協議,所以在沒有安裝 app 的情況下是無法直接開啟的,而 universal links 本身是一個 HTTP/HTTPS 連結,所以有更好的相容性 安全:當使用者的手機上安裝了你的app,那麼iOS將去你的網站上去下載你上傳上去的說明檔案(這個說明檔案聲明了你的app可以開啟哪些類型的http連結).因為只有你自己才能上傳檔案到你網站的根目錄,所以你的網站和你的app之間的關聯是安全的. 可變:當使用者手機上沒有安裝你的app的時候,Universal Links也能夠工作.如果你願意,在沒有安裝你的app的時候,使用者點選連結,會在safari中展示你網站的內容. 簡單:一個URL連結,可以同時作用於網站和app 私人 其它app可以在不需要知道你的app是否安裝了的情況下和你的app相互連信.怎麼支援Universal Links(通用連結)先決條件:

你必須有一個網域名稱,且這個網域名稱的網站需要支援https,然後擁有網站的上傳到根目錄的許可權(這個許可權是為了上傳一個apple指定的檔案)

支援Universal Links(通用連結)建立一個json格式的命名為apple-app-site-association檔案,注意這個檔案 必須沒有尾碼名,檔案名稱必須為 apple-app-site-association!!!
{    "applinks": {        "apps": [],        "details": [            {                "appID": "9JA89QQLNQ.com.apple.wwdc",                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]            },            {                "appID": "ABCD1234.com.apple.wwdc",                "paths": [ "*" ]            }        ]    }}

說明:
appID: 這裡的組成方式是 teamId.yourapp’s bundle identifier.如上面的 9JA89QQLNQ,ABCD1234都是teamId,這個值從哪來的呢?
它是從的開發人員賬戶的個人中心來的,登陸你的開發人員中心

com.apple.wwdc是你的方式是 teamId.yourapp’s ,在你的xcode工程中

paths:
根據 paths 鍵設定一個你的app支援的路徑列表,只有這些指定的路徑的連結,才能被app所處理,舉個例子:如果你的網站是www.yohunl.com,你的path寫的是”/support/*”,那麼當使用者點擊www.yohunl.com/support/myDoucument,就可以進入你的app了,相反www.yohunl.com/other 就不會.
path是大小寫敏感的!
*號表示任意路徑.

上傳該檔案apple-app-site-association到你的網域名稱所對應的網站的根目錄下(其實也不一定是根目錄,例如ghost部落格網站,就沒有根目錄一說,它就需要放在相應的主題目錄下),這一步是為了蘋果能從https://你的網域名稱/apple-app-site-associationxh擷取到你上傳的apple-app-site-association檔案.
上傳完後,自己先訪問一下,看看是否能夠擷取到,用我的做例子,https://yohunl.com/apple-app-site-association ,當你點擊這個連結,應該是下載apple-app-site-association檔案.
驗證該檔案是否合法,蘋果為了方便開發人員,提供了一個網頁來驗證我們編寫的這個apple-app-site-association是否合法有效,驗證網址,進入網站進行驗證

在xcode工程裡進行一些配置
首先就是開啟工程配置中的Associated Domains開啟

在其中的Domains中填入你想支援的網域名稱(這裡不是隨便填的,是可以支援你需要的Universal Links的網域名稱), 必須以 applinks: 為首碼
例如我的填入的是

applinks:yohunl.comapplinks:www.yohunl.com

蘋果將會在合適的時候,從這裡填入的網域名稱請求檔案apple-app-site-association

注意:當你開啟Associated Domains後,xcode會在你的工程中添加.entitlements檔案
並且如果你登陸你的開發人員中心,可以看到
,這些都是有助於你排除問題的.

到此,你的app就已經可以支援Universal Links(通用連結)了!!!
那麼怎麼測試呢?

測試Universal Links(通用連結)是否生效

在iOS裝置中的備忘錄中添加記事本或簡訊中輸入App能識別的連結,然後直接點擊此連結,就會直接跳轉到你的app了
或是長按,在出現的快顯功能表中第二項是“在’XXX’中開啟”,這也代表著成功。

或是你將要測試的網址放到safari中一個網頁中,然後點選連結,在出現的網頁上方,下滑,可以看到有 在”XX”應用中開啟 (很多教程上說,在safari中直接點擊,就會跳轉到app,但是經過我實際驗證,是不可以的,可能是蘋果又調整了一下策略吧)

在的網頁瀏覽器中,也是可以的,雖然屏蔽了所有的custom scheme方式的跳轉到其它app,但是Universal Links(通用連結)因為是普通的http連結,由系統直接處理的,屏蔽不了,這也就實現了從跳轉到我們的app!!

工程中添加處理方法

現在使用者點擊某個連結,直接可以進我們的app了,但是,這不是我們的最終目的,我們的目的是要能夠擷取到使用者進來的連結,根據連結來處理,需要展示給使用者的資訊

在工程裡的 AppDelegate 裡實現 方法

- (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:@"yohunl.com"]) {            //進行我們需要的處理        }        else {            [[UIApplication sharedApplication]openURL:webpageURL];        }    }    return YES;}

當 userActivity 是 NSUserActivityTypeBrowsingWeb 類型, 則意味著它是由Universal Links進來的,就可以添加我們自己的處理邏輯了!

後記

如果遇到不能起作用,http://stackoverflow.com/questions/32751225/ios9-universal-links-does-not-work上有討論各種可能出現的問題 ,你可以去參考下

參考iOS 9學習系列:打通 iOS 9 的通用連結(Universal Links) 蘋果官方Universal Links iOS9 Universal Links 國外人列舉的當前支援Universal Links的app和其apple-app-site-association檔案 51個應用的檔案清單 查看是否支援 Universal Links的蘋果網站 網址

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.