標籤:
網上也有講這塊的,感覺講得都不是很好。而且有一些細節根本沒有講清楚。這裡重寫整理一下相關知識點。
主要內容
- URL Scheme 是什嗎?
- 項目中關鍵的配置
- 注意事項
URL Scheme 是什嗎?
iOS有個特性就是應用將其自身”綁定”到一個自訂 URL scheme 上,該 scheme用於從瀏覽器或其他應用中啟動本應用。常見的分享到第三方之間的跳轉都是基於Scheme的。
通過對比網頁連結來理解iOS 上的 URL Schemes,應該就容易多了。
URL,我們都很清楚,http://www.apple.com就是個URL,我們也叫它連結或網址;
Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ://之前的那段字元。比如 http://www.apple.com這個網址的Schemes是 http。
根據我們上面對URL Schemes的使用,我們可以很輕易地理解,在以本地應用為主的 iOS 上,我們可以像定位一個網頁一樣,用一種特殊的 URL 來定位一個應用甚至應用裡某個具體的功能。而定位這個應用的,就應該這個應用的URL 的 Schemes 部分,也就是開頭兒那部分。比如簡訊,就是 sms:
你可以完全按照理解一個網頁的 URL ——也就是它的網址——的方式來理解一個 iOS 應用的 URL,拿蘋果的網站和 iOS 上的來做個簡單對比:
| |
網頁(蘋果) |
iOS 應用() |
| 網站首頁/開啟應用 |
http://www.apple.com |
weixin:// |
| 子頁面/具體功能 |
http://www.apple.com/mac/(Mac頁面) |
weixin://dl/moments(朋友圈) |
關於基礎概念性的就講這麼多
項目中關鍵的配置在項目
Info的
Url Type中配置(
被喚起端)
Url Type,表示可以被哪些帶首碼Url開啟,而不是可以開啟以這些首碼開頭的app。
- 說明
- URL identifier只是一個標示符,隨意填寫,建議寫成:
com.*.*反轉網域名稱的方法保證該名字的唯一性。
- URL Scheme就是你用來通訊的命令首碼,用來定位一個應用。
在
Plist檔案中配置
- 注意:
URL Schemes 是一個數組,允許應用定義多個 URL schemes。接收到喚起如何處理
在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中判斷喚起的來源source app,根據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; }
以上配置是在被喚起應用中配置的。
喚起端
一般情況下,喚起端可以直接調用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"
注意事項
通過上面的方法可以喚醒其他的應用,簡單總結下一些注意事項。
- URL Scheme 其實就是一個app應用的唯一標誌。通過它來確定開啟那個應用。
- 一定要分清哪些配置在哪方配置,被喚醒與喚醒。
- iOS9之後需要在喚起端加入
LSApplicationQueriesSchemes千萬不能忘。
- 還有一個問題還沒解決,如何再次回到喚醒應用的介面。這個需要參考下官方的
XCallbackURL。聽說有些複雜,有空再看看。
文/紙簡書生(簡書作者)
原文連結:http://www.jianshu.com/p/7a308f5b89fc
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。
iOS App 喚醒另一個App