項目中時常有這種需求, 是經過連接跳轉到應用內部,如今iOS主流的方案有兩個javascript
備註:
* 關於URL Schemes更多瞭解,可參考傳送門
* 關於Universal Links更多瞭解,可參考傳送門html
(1)第三方應用集成了友盟分享到QQ和微信的功能java
(2)第三方應用分享了一個web頁面到微信或QQios
(3)打開分享的web頁面,點擊上面的某一個按鈕web
(4)若是用戶安裝了該應用,直接打開應用根據web地址中的參數跳轉到對應的頁面chrome
(5)若是用戶沒有安裝應用,直接跳轉到appStorejson
iOS9 以後提供的 Universal Links 功能服務器
(1)建立一個json文件,名稱必須爲 apple-app-site-association,⚠️該文件不可帶 .json 的後綴名微信
apple-app-site-association 文件必須放在https服務器的根目錄下,例:https://kahui.huankaun.com 這個路徑下 ⚠️必定是根目錄,也就是說該文件必須是一級目錄,供下載使用app
* apple-app-site-association 文件格式:
{ "applinks": { "apps": [], "details": [ { "appID": "teamID.bundleId", "paths": ["/deaplink","/wwdc/news/","*"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] } }
1)appID :
appID 格式爲 teamID.bundleId形式,譬如說個人teamID
是xxxxxxxxxxx
,bundleId
是com.mytest.app
那麼個人appID
就是:xxxxxxxxxxx.com.mytest.app。
teamID:打開蘋果官網,點擊Account,點擊左邊欄的 Membership,查找teamID
2) paths:
設定一個App的路徑支持列表,只有這些指定的路徑連接纔會被App所處理。格式以下:
"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
使用*
配置,則整個網站均可以使用
使用特定的URL,例如/wwdc/news/
來指定某一個特殊的連接。
在特定URL後面添加*
,例如 /videos/wwdc/2015/*
, 來指定網站的某一部分。若是你的網站是www.yohunl.com,你的path寫的是」/support/*」,那麼當用戶點擊www.yohunl.com/support/myDoucument,就能夠進入你的app了,相反www.yohunl.com/other 就不會.
除了使用*
來匹配任意字符,你也可使用 ?
來匹配單個字符,你能夠在路徑當中結合這兩個字符使用,例如 /foo/*/bar/201?/mypage
須要注意的是:
配置的paths路徑,是區分大小寫的
* 驗證apple-app-site-association
文件
文件配置完成以後,將其上傳到你的服務器根目錄或者.well-known
這個子目錄下。
https://yourdomain.com/apple-app-site-association
這個連接能夠訪問到,yourdomain.com
爲你的服務器域名。apple-app-site-association
文件配置正確。404
錯誤碼提示,則爲apple-app-site-association
文件未上傳成功,或者使用https://yourdomain.com/apple-app-site-association
路徑沒法訪問。app IDs
配置 和 項目配置 進入開發者網站,找到你本身的bundleId
,能夠點擊edit
按鈕,開啓associate domains
,以下圖:
在項目的Capablities
中開啓Associated domains
,以下圖:
domains
能夠添加多個,前綴必須爲
applinks:
,
applinks:
後爲你的服務器的域名。
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{ NSLog(@"userActivity : %@",userActivity.webpageURL.description); return YES; }
在appdelegate中實現上面這個方法,當使用Universal Links喚醒app時就執行這個方法。
快捷驗證,在備忘錄中輸入https://yourdomain.com/apple-app-site-association
,長按這個連接,出現下圖提示則配置成功。
當沒有安裝該應用時的處理方式是:上傳該html文件到 kahui.huankaun.com 路徑下,以下圖:
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <title>神機算萬年曆-跳轉中...</title> </head> <body> <script type="text/javascript"> setTimeout(function(){ window.location = "第三方在應用寶的下載連接" },3000)//延遲3s,給手機調起已安裝應用,若是不能調起就調用下載連接。 </script> </body> </html>
備註:若是咱們在手機上沒有安裝相應的應用,就能夠經過Universal Links重定向進行跳轉到下載也進行下載操做。由於咱們在paths設置了路徑限制,只要咱們重定向的路徑符合限制,就能先走本地是否安裝程序,若是沒有再跳轉到相應下載頁。