使用統一資源標識符(URI)連接到一個App中特定的位置,而不是簡單地打開App。 用戶未安裝App的狀況下,同樣能夠在用戶安裝App後從新還原用戶以前預覽的頁面。常見的有如下2種實現方式。html
咱們一般只能使用scheme。這種方式須要經過safari中喚醒APP,可是這種方式須要提早判斷系統中是否安裝了可以響應此scheme的app,而且這種方式在微信等中是被禁用了的。若是沒有安裝app則該連接變成了無效連接。前端
設置info.plistgit
URL Schemes
填寫的是
rrddl
,
Identifier
填寫的是
renrendai.com
。那麼我就能夠在safari地址欄中輸入
rrddl://renrendai.com
來打開咱們的app。
iPhone在安裝應用時能夠檢測到info.plist
文件中是否有CFBundleURLTypes
,若是存在則將相應的schemes
註冊到系統中,若有其它app經過github
UIApplication.shared.openURL(URL(string: "rrddl://renrendai.com")!)
複製代碼
或者safari打開時,系統會查找已註冊的Schemes來啓動對應的app。web
若是不想被其它應用無故調起能夠在AppDelegate
中open url
方法中經過host和path等條件加以限制。json
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let components = URLComponents(string: url.absoluteString)
let pathPool = ["dl", "h5", "tab"]
if pathPool.contains(components?.path ?? "") {
JumpManager.handel(url) //處理url跳轉
return true
}
return false
}
複製代碼
1.不能檢測用戶是否安裝了app,對沒有安裝app的用戶沒有引導做用。api
2.沒有惟一的應用標識,沒法保證用戶不會安裝註冊相同URL方案的第三方app。跨域
Universal Links就是一個通用連接,iOS9以上的用戶,能夠經過點擊這個連接無縫的重定向到一個app應用,而不須要經過safari打開跳轉。若是用戶沒有安裝這個app,則會在safari中打開這個連接指向的網頁。(現已被微信封禁)bash
1 app第一次安裝或者版本更新後第一次啓動,app向工程裏配置的域名發起Get請求拉取apple-app-association
這個Json文件。服務器
2 app將apple-app-association
註冊給系統。
3 由iPhone上的任意webView
發起跳轉的url(在webKit作了處理),若是是apple-app-association
註冊的通用連接則打開App,觸發Universal Link delegate
;沒命中,webView
繼續跳轉url。
apple-app-site-association
,包含固定格式的json文件{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleId",
"paths": ["/deaplink","/wwdc/news/","*"]
}
]
}
}
複製代碼
appID
的格式爲teamID.bundleId
形式。
apple-app-site-association
不能帶後綴名
1.文件配置完成以後,將其上傳到你的服務器根目錄或者.well-known
這個子目錄下(iOS 9.3才能夠)
2.確保使用https://yourdomain.com/apple-app-site-association
這個連接能夠訪問到,yourdomain.com
爲你的服務器域名。
1.使用*
配置,則整個網站均可以使用。
2.使用特定的URL,例如/user/home
來指定某一個特殊的連接。
3.在特定URL後面添加*
,例如/user/*
, 來指定網站的某一部分。
4.除了使用*
來匹配任意字符,你也可使用 ?
來匹配單個字符,你能夠在路徑當中結合這兩個字符使用,例如 /user/*/201?
。
進去登陸蘋果開發者中心,在identifiers
下App IDs
打開Associated Domains
開關。
domains
能夠添加多個,前綴必須爲
applinks:
,
applinks:
後爲你的服務器的域名。值得注意的是要想觸發Universal Link攔截必須跨域,假如Universal Link配置的是
wx.renrendai.com
這個域名,而且對這個域名下好比
/point /home /user
等
urlPath
進行了識別,也就是說只有當你訪問
https://wx.renrendai.com/point/xxx
纔會觸發Universal Link攔截,而正經的Url
https//www.renrendai.com/point/xxx
是不會觸發Universal Link的攔截。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == "NSUserActivityTypeBrowsingWeb" {
let url = userActivity.webpageURL
JumpManager.handel(url) //處理url跳轉
return true
}
return false
}
複製代碼
https://yourdomain.com/apple-app-site-association
長按這個連接,出如今XXXapp打開即爲成功。(在信息裏同理)apple-app-site-association
放置在服務器根目錄或者.well-known
這個子目錄下便可,在真機模擬是發如今iOS9.3-iOS12
請求的地址是在.well-known
下而非根目錄下
最後慣例,歡迎你們star咱們的人人貸大前端團隊博客,全部的文章還會同步更新到知乎專欄 和 掘金帳號,咱們每週都會分享幾篇高質量的大前端技術文章。若是你喜歡這篇文章,但願能動動小手給個贊。