在iOS9以前,對於從各類從瀏覽器、Safari中喚醒APP的需求,咱們一般只能使用scheme。可是這種方式須要提早判斷系統中是否安裝了可以響應此scheme的app,而且這種方式在微信中是被禁用了的。html
Universal Links是iOS9推出的一項功能,使你的應用能夠經過傳統的HTTP連接來啓動APP(若是iOS設備上已經安裝了你的app,無論在微信裏仍是在哪裏), 或者打開網頁(iOS設備上沒有安裝你的app)。前端
下面簡單說下怎麼使用Universal Links,具體的能夠看官方的說明文檔ios
1.先決條件:你必須有一個域名,且這個域名須要支持https。web
2.須要在開發者中心作配置:找到對應的App ID,在Application Services列表裏有Associated Domains一條,把它變爲Enabled就能夠了。json
配置App ID支持Associated Domains:跨域
{ "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] } }
說明:xcode
appID:組成方式是 teamId.yourapp’s bundle identifier。如上面的 9JA89QQLNQ就是teamId。登錄開發者中心,在Account - Membership裏面能夠找到Team ID。
paths:設定你的app支持的路徑列表,只有這些指定的路徑的連接,才能被app所處理。星號的寫法表明了可識別域名下全部連接。
這篇博客裏有不少其餘公司的例子,能夠參考一下。也有可能有的公司的已經再也不適用,能夠換換其餘公司的。瀏覽器
.well-known
目錄下,這是爲了蘋果能獲取到你上傳的文件。上傳完後,本身先訪問一下,看看是否可以獲取到,當你在瀏覽器中輸入這個文件連接後,應該是直接下載apple-app-site-association文件。
在iOS設備中的備忘錄中輸入App能識別的連接,而後直接點擊此連接,就會直接跳轉到你的app了。或是長按,在出現的彈出菜單中第二項是在’XXX’中打開
,這也表明着成功:服務器
在」XX」應用中打開
:
在微信的網頁瀏覽器中也是能夠的,雖然微信屏蔽了全部的scheme方式跳轉到其它app,可是Universal Links是由系統直接處理的,微信屏蔽不了,這也就實現了從微信跳轉到咱們的app。微信
蘋果爲了方便開發者,提供了一個網頁來驗證咱們編寫的這個apple-app-site-association是否合法有效,進入驗證網址進行驗證:
如今用戶點擊某個連接,直接能夠進咱們的app了,可是咱們的目的是要可以獲取到用戶進來的連接,根據連接來展現給用戶相應的內容。
咱們須要在工程裏的 AppDelegate 裏實現方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *url = userActivity.webpageURL; if (url是咱們但願處理的) { //進行咱們的處理 } else { [[UIApplication sharedApplication] openURL:url]; } } return YES; }
前端開發常常面臨跨域問題,必需要求跨域,若是不跨域,就不行。
只有當前webview的url域名,與跳轉目標url域名不一致時,Universal Link 才生效。
好了先說到這裏,若是遇到什麼問題能夠詳細看官方的說明文檔。
1.支持https呀,必定要是符合蘋果認證的https證書呀。
2.系統問題,確保iOS9以上
3.配置文件問題,apple-app-site-association
文件中配置的path和測試用的通用連接不一致,注意是區分大小寫的。
4.域名問題,xcode中配置的域名一不當心寫錯了。
1.上面也提到過,由於網絡波動有可能會致使部分用戶第一次安裝時,沒法下載apple-app-site-association
文件,這個只能引導用戶刪除重裝或者在迭代時修改Associated Domains配置告訴系統從新下載apple-app-site-association
文件。
2.另一種多是蘋果抽風致使,筆者今年年初一碰到過一個蛋疼的問題,從中午一直到下午4點發現重複的刪除重裝,app也不會請求服務器的apple-app-site-association文件,過了4點以後就行了。當時由於時間特殊並無深究究竟是什麼緣由致使。
筆者作了一個小測試,當Associated Domains添加新的 Domains的以後,在app再次啓動的時候抓包發現(不須要刪除重裝),蘋果會給新添加的這個Domains發送一個請求,請求新Domain下的apple-app-site-association文件。
也就是說Associated Domains發生改變的話,系統是會知道的,這樣就能夠在迭代的時候刪除舊的域名,添加新的域名了。
另外Domains的配置也可使用通配符,例如:applinks:*.mywebsite.com
咱們以前iOS和安卓用的是同一個網頁,也就是說從app內分享出去的網頁,能夠被蘋果用戶和安卓用戶同時查看,在這裏咱們是由web童鞋使用js判斷當前所處的平臺以及其系統。
若是是安卓用戶,則顯示安卓相關提示頁面。
若是是蘋果用戶,那麼分兩種:
一、若是是9以上的系統,相關的「在app內打開」按鈕的連接配置的就是咱們的通用連接Universal Links了,且該通用連接地址指向的是一個 app下載引導頁面,那麼當用戶安裝了app,便可經過通用連接喚醒app;若是用戶沒有安裝app,那麼就會跳轉到通用連接指向的app下載引導頁面,達到最大化的客戶導流。
二、若是是9如下的系統,則由web童鞋在當前頁面添加一個 「右上角在safari打開」,相應的 「在app內打開」的按鈕就會發一個 跳轉到咱們app schema的重定向,以實如今safari中喚醒咱們的app。
那個小按鈕是能夠引導用戶跳轉到safari中,名字叫bread crumbs button(麪包屑),固然也去不掉。
未跨域致使的,如:分享到微信的連接是 https://www.mydomain.com/share.html,而後該網頁中的「在app內打開」按鈕配置的通用連接爲 https://www.mydomain.com/index.html。
跨域的意思是說,通用連接 和 調用通用連接的網頁不要使用同一域名。
即若是通用連接域名爲「www.mydomain.com」,則通用連接所處的網頁域名就不能是「www.mydomain.com」。