使用場景
通過qq或者微信分享出來的H5鏈接,當(dāng)點擊H5鏈接的某個按鈕時,要實現(xiàn)如下功能:
- 用戶未安裝APP時,跳轉(zhuǎn)到AppStore引導(dǎo)用戶安裝
- 用戶安裝時,喚醒APP并跳轉(zhuǎn)到APP某一個指定的頁面。
注意??:傳統(tǒng)的URL Schema實現(xiàn)存在的弊端- 跳轉(zhuǎn)的時候會出現(xiàn)提示框,“是夠打開XX”,用戶體驗不好。
- 微信屏蔽URL Schema ,必須是出現(xiàn)在白名單里面才可以跳轉(zhuǎn)(意味著用戶無法在微信里面一鍵直達(dá)APP)。
而通用鏈接可以解決上述問題
通用鏈接的介紹及優(yōu)點可以參考一下鏈接
通用鏈接的優(yōu)點
- 安全性: 當(dāng)用戶安裝應(yīng)用程序,iOS會檢查您已經(jīng)上傳到web服務(wù)器文件,以確 保您的網(wǎng)站允許你的應(yīng)用程序能打開代表它的URL 文件,只要你創(chuàng)建并且上傳該文件,那么你的應(yīng)用和服務(wù)器之間的關(guān)聯(lián)是安全的。
- 靈活性: 當(dāng)你的應(yīng)用程序沒有被安裝的時候,通用鏈接照樣能夠工作。當(dāng)用戶沒有安裝你的應(yīng)用程序,點擊該鏈接,將會以用戶所期望的以Safari的形式訪問
- 私有性: 其他的應(yīng)用程序可以和你的應(yīng)用程序進行通信,不管你的應(yīng)用是夠被安裝。
- 簡單性: 通用鏈接既能支持你的網(wǎng)站,又能支持你的應(yīng)用。
- 獨特性: 與自定義的URL鏈接相比,通用鏈接不能被其他的應(yīng)用程序所訪問,因為它們使用的是標(biāo)準(zhǔn)的HTTP 或 HTTPS 鏈接到你的網(wǎng)站。
通用鏈接實現(xiàn)的條件
- 有一個注冊的域名
- 域名可通過 SSL 訪問(應(yīng)該是需要有效的證書)
- 支持上傳一個 JSON 文件到域名
- 至少 iOS 9 beta 2 版本
- 至少 Xcode 7 beta 2
- 需要真機測試,模擬器不支持通用鏈接
- web server 需要支持 https,客戶端需要通告 https 訪問,并且不支持任何重定向
通用鏈接實現(xiàn)的操作步驟
-
1. 開發(fā)者賬號中開啟Associated Domains域:
進入蘋果Apple Developer --- Member Center - Certificates, Identifiers & Profiles – Identifiers - App IDs –Edit 然后開啟打鉤 Associated Domains 后保存。 -
2. 添加Associated Domains域:
說明:你的 APP 域名必須用 applinks: 前置它,還添加一些你可能 擁有的子域和擴展(www.domain.com, news.domain.com 等等)。
作用:配置之后你的 APP 會自動從你的域名請求一個特殊的 JSON 文 件 apple-app-site-association。當(dāng)你第一次啟動 APP,它會從 https://domain.com/apple-app-site-association 下載這個文件。 -
上傳 apple-app-site-association到服務(wù)器的根目錄:
注意事項1 - 1 paths 路徑是大小寫敏感的
- 2 paths 內(nèi)容可以明確哪些通用鏈接是需要被處理的,哪些是不需要被處理的。
- 3 NOT使用:為了明確不被處理的鏈接,可以增加NOT在鏈接前面
- 4 可以使用*明確所有的網(wǎng)頁
- 5 可以使用一個明確的URL
- 6 可以追加到你的URL,使用匹配任何字符,使用?匹配一個字符,也可以使用和?的混搭模式。
注意事項2
- Appid的組成部分:teamId+bundleId teamId
- bundleId一定要和APP的bundleId一致
- apple-app-site-association文件不能帶后綴
- apple-app-site-association文件需要上傳到網(wǎng)站根目錄。
- 每一個代表應(yīng)用的字典必須包含一個appid和paths,appid是teamID和bundleId,paths是一個字符串的數(shù)組。明確著你的應(yīng)用支持的通用鏈接和不支持的通用鏈接。
列子:
此處如果有截圖就添加,json里面的內(nèi)容。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
NSString *activityTypeStr = userActivity.activityType;
if ([activityTypeStr isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webUrl = userActivity.webpageURL;
if ([webUrl.host isEqualToString:@"baidu.com"] ) {
//打開對應(yīng)頁面
} else {
//不能識別safari打開
[[UIApplication sharedApplication] openURL:webUrl];
}
}
}
在APP中處理通用鏈接
如果有截圖再替換
參考資料
https://developer.apple.com/ios/download/
http://www.cocoachina.com/ios/20150902/13321.html
http://www.itdecent.cn/p/c2ca5b5f391f
http://strivingboy.github.io/blog/2015/09/27/ios9
http://help.tune.com/marketing-console/ios-universal-links-with-tune/
http://stackoverflow.com/questions/33391615/ios-9-universal-links-dont-work
http://www.jackivers.me/blog/2015/9/17/list-of-universal-link-ios-9-apps