包含Xcode11.0的配置方式和iOS13出現的問題。html
Universal Link
(通用連接)Universal Link
(通用連接)是Apple在iOS9推出的一種可以方便的經過傳統HTTPS
連接來啓動APP的功能,可使用相同的網址打開網址和APP。當你的應用支持Universal Link
(通用連接),當用戶點擊一個連接是能夠跳轉到你的網站並得到無縫重定向到對應的APP,且不須要經過Safari
瀏覽器。若是你的應用不支持的話,則會在Safari
中打開該連接。在蘋果開發者中能夠看到對它的介紹是:前端
Seamlessly link to content inside your app, or on your website in iOS 9 or later. With universal links, you can always give users the most integrated mobile experience, even when your app isn’t installed on their device.web
Universal Link
(通用連接)Universal Link
(通用連接):看起來就是一條普通的https
連接,固然是咱們在該連接域名根目錄配置過的一個連接,也能夠在該連接中放置對應的H5頁面。當用戶的點擊該連接,只要手機中安裝了支持該連接的APP就會直接進入到APP中。若是沒有安裝APP則會跳轉到Safari
瀏覽器中,展現H5頁面。對用戶來講則是一個無縫跳轉的過程。json
Universal Link
(通用連接)的應用場景使用Universal Link
(通用連接)可讓用戶在Safari
瀏覽器或者其餘APP的webview
中拉起相應的APP,也能夠在APP中使用相應的功能,從而來把用戶引流到APP中。好比淘寶當在Safari
瀏覽器中進入淘寶網頁點擊打開APP則會使用Universal Link
(通用連接)來拉起淘寶APP。跨域
Universal Link
(通用連接)跳轉的好處URL Scheme
,由於它使用標準的HTTPS
協議連接到你的web站點,因此通常不會被其它的APP所聲明。另外,URL scheme
由於是自定義的協議,因此在沒有安裝 app 的狀況下是沒法直接打開的(在Safari
中還會出現一個不可打開的彈窗),而Universal Link
(通用連接)自己是一個HTTPS
連接,因此有更好的兼容性;HTTPS
連接能夠打開那些APP)。由於只有你本身才能上傳文件到你網站的根目錄,因此你的網站和你的APP之間的關聯是安全的;Universal Link
(通用連接)也可以工做。若是你願意,在沒有安裝你的app的時候,用戶點擊連接,會在safari中展現你網站的內容;HTTPS
的連接,能夠同時做用於網站和APP;Universal Link
(通用連接)HTTPS
的域名,而且擁有該域名下的上傳到根目錄的權限(爲了上傳Apple指定文件)。開發者中心配置:找到對應的App ID,在Application Services列表裏有Associated Domains一條,把它變爲Enabled就能夠了。瀏覽器
配置App ID支持Associated Domains:
安全
配置指定文件:建立一個內容爲json格式的文件,蘋果將會在合適的時候,從咱們在項目中填入的域名請求這個文件。這個文件名必須爲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就是teamId。登錄開發者中心,在Account -> Membership裏面能夠找到Team ID。網絡
paths:設定你的app支持的路徑列表,只有這些指定的路徑的連接,才能被app所處理。星號的寫法表明了可識 別域名下全部連接。
上傳指定文件:上傳該文件到你的域名所對應的根目錄或者.well-known目錄下,這是爲了蘋果能獲取到你上傳的文件。上傳完後,本身先訪問一下,看看是否可以獲取到,當你在瀏覽器中輸入這個文件連接後,應該是直接下載apple-app-site-association文件。
Universal Link
(通用連接)相關驗證在iOS設備中的備忘錄中輸入APP能識別的連接,而後直接點擊此連接,就會直接跳轉到你的app了。或是長按,在出現的彈出菜單中第二項是在’XXX’中打開,這也表明着成功:
或是你將要測試的網址在Safari
中打開,在出現的網頁上方下滑,能夠看到有在」XX」應用中打開:
出現菜單:
當點擊某個連接,直接能夠進咱們的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; }
蘋果爲了方便開發者,提供了一個網頁來驗證咱們編寫的這個apple-app-site-association是否合法有效,進入驗證網址進行驗證:
注意
前端開發常常面臨跨域問題,必需要求跨域,若是不跨域,就不行。
只有當前webview
的URL
域名,與跳轉目標URL
域名不一致時,Universal Link
(通用連接)才生效。
服務器換域名了腫麼辦???
當Associated Domains添加新的 Domains的以後,在app再次啓動的時候抓包發現(不須要刪除重裝),蘋果會給新添加的這個Domains發送一個請求,請求新Domain下的apple-app-site-association文件。
也就是說Associated Domains發生改變的話,系統是會知道的,這樣就能夠在迭代的時候刪除舊的域名,添加新的域名了。
另外Domains的配置也可使用通配符,例如:applinks:*.mywebsite.com
全都配置好了,項目也能喚起來了,web頁面到底該怎麼弄呀???通用連接指向的服務器的頁面到底應該是哪一個?
以前iOS和安卓用的是同一個網頁,也就是說從APP內分享出去的網頁,能夠被蘋果用戶和安卓用戶同時查看,在這裏須要由web童鞋使用js判斷當前所處的平臺以及其系統。
若是是安卓用戶,則顯示安卓相關提示頁面。
若是是蘋果用戶,那麼分兩種:
Universal Link
(通用連接)了,且該通用連接地址指向的是一個APP下載引導頁面,那麼當用戶安裝了APP,便可經過通用連接喚醒APP;若是用戶沒有安裝app,那麼就會跳轉到通用連接指向的APP下載引導頁面,達到最大化的客戶導流。URL Scheme
的重定向,以實如今Safari
中喚醒咱們的APP。當使用通用連接喚醒APP以後,手機右上角有一個小按鈕?
那個小按鈕只有(在iOS10.0如下才有)是能夠引導用戶跳轉到Safari
中,名字叫bread crumbs button
(麪包屑),固然也去不掉;而且當用戶點過這個按鈕後,再點擊Universal Link
(通用連接)不會直接打開對應的APP。
備忘錄和safari中均可以打開app,怎麼分享到其餘app裏面就不行了?
未跨域致使的,如:分享到微信的連接是https://www.mydomain.com/share.html
,而後該網頁中的「在app內打開」按鈕配置的通用連接爲https://www.mydomain.com/index.html
。
跨域的意思是說,通用連接 和 調用通用連接的網頁不要使用同一域名。
即若是通用連接域名爲www.mydomain.com
,則通用連接所處的網頁域名就不能是www.mydomain.com
。
微信已經禁用了Universal Link
(通用連接)
iOS13中在safari中能夠打開相應APP,可是從微信或其餘APP中點擊去safari怎麼就打開了別的APP?
在iOS13以前在其餘APP去safari中打開Universal Link
(通用連接)系統匹配域名是全匹配,而在iOS13以後規則發生了變化,猜想是包含關係。好比在iOS13以前,若是Universal Link
(通用連接)爲w.mydomain.com
那麼在微信或者其餘APP訪問www.mydomain.com
而後點擊去safari打開則不會拉起相應APP,而在iOS13則會拉起相應APP。
而在safari中輸入的連接則依然和iOS以前同樣,只有www.mydomain.com
纔會提示打開相應APP。
文章如有不對地方,歡迎批評指正