網上也有講這塊的,感受講得都不是很好。並且有一些細節根本沒有講清楚。這裏重寫整理一下相關知識點。數組
iOS
有個特性就是應用將其自身」綁定」到一個自定義 URL scheme
上,該 scheme
用於從瀏覽器或其餘應用中啓動本應用。常見的分享到第三方之間的跳轉都是基於Scheme
的。瀏覽器
經過對比網頁連接來理解iOS
上的 URL Schemes
,應該就容易多了。安全
URL
,咱們都很清楚,http://www.apple.com
就是個URL
,咱們也叫它連接或網址;Schemes
,表示的是一個 UR
L 中的一個位置——最初始的位置,即 ://
以前的那段字符。好比 http://www.apple.com
這個網址的Schemes
是 http。根據咱們上面對URL Schemes
的使用,咱們能夠很輕易地理解,在以本地應用爲主的 iOS 上,咱們能夠像定位一個網頁同樣,用一種特殊的 URL
來定位一個應用甚至應用裏某個具體的功能。而定位這個應用的,就應該這個應用的URL 的 Schemes
部分,也就是開頭兒那部分。好比短信,就是 sms:
微信
你能夠徹底按照理解一個網頁的 URL ——也就是它的網址——的方式來理解一個 iOS 應用的 URL,拿蘋果的網站和 iOS 上的微信來作個簡單對比:app
網頁(蘋果) | iOS 應用(微信) | |
---|---|---|
網站首頁/打開應用 | http://www.apple.com | weixin:// |
子頁面/具體功能 | http://www.apple.com/mac/(Mac頁面) | weixin://dl/moments(朋友圈) |
關於基礎概念性的就講這麼多ide
Info
的Url Type
中配置(被喚起端)
Url Type
,表示能夠被哪些帶前綴Url打開,而不是能夠打開以這些前綴開頭的app。網站
com.*.*
反轉域名的方法保證該名字的惟一性。Plist
文件中配置URL Schemes
是一個數組,容許應用定義多個 URL schemes
。 在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
中判斷喚起的來源source app
,根據Url
所攜帶的參數進行不一樣的操做。好比跳轉到制定的頁面,相關的邏輯處理等等.url
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"Calling Application Bundle ID: %@", sourceApplication); NSLog(@"URL scheme:%@", [url scheme]); NSLog(@"URL query: %@", [url query]); // Customer Code return YES; }
以上配置是在被喚起應用中配置的。spa
通常狀況下,喚起端能夠直接調用appDelegate
的代理方法去喚醒其餘應用。代理
- (void)awakeOtherApp { NSString *customURL = @"otherApp://"; if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" message:[NSString stringWithFormat: @"No custom URL defined for %@", customURL] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } }
iOS9
之後,喚起端須要配置一下
LSApplicationQueriesSchemes
.iOS9
以後須要,iOS9
以後提升了app
的安全性,須要給出一個相似白名單的東西,在白名單裏面的才能打開app
。否則報錯: -canOpenURL: failed for URL: "OpenAppTest://mark?id=007" - error: "This app is not allowed to query for scheme OpenAppTest"
經過上面的方法能夠喚醒其餘的應用,簡單總結下一些注意事項。
LSApplicationQueriesSchemes
千萬不能忘。XCallbackURL
。據說有些複雜,有空再看看。