2016-08-12: 在Github的Demo上增長Mac自定義Url Scheme,能夠在Safari上輸入特定協議頭打開應用,並傳遞參數)html
咱們接下來將要實現應用程序之間的跳轉及通信。如今手機開發中,不少時候咱們都須要在應用內跳轉到別的應用中,這個是很常見的。ios
爲此,咱們首先須要準備兩個項目ApplicationOne
和ApplicationTwo
。(下載項目源碼)git
在ApplicationOne
應用跳轉到ApplicationTwo
應用github
咱們須要先建立在ApplicationTwo
項目裏設置URL Types
協議,這裏我設置爲GC
,以下所示swift
在ApplicationOne
應用添加事件數組
@IBAction func openApplication() { // 1 let urlSting = "GC://" // 2 if let url = NSURL(string: urlSting) { // 3 let application = UIApplication.sharedApplication() // 4 if application.canOpenURL(url) { // 5 application.openURL(url) } } }
urlString
字符串urlString
字符串建立真正的url
,並檢測url
是否有用UIApplication
實例url
url
,在這裏即爲咱們的應用跳轉須要注意的是,協議開頭必需要是完整的,即爲
****://
app
實現方式很簡單,咱們只須要在url
協議裏補充參數就能夠了,好比我如今傳一個字符串GarveyCalvin
url
如今事件的代碼是這樣的code
@IBAction func openApplication() { let urlSting = "GC://GarveyCalvin" if let url = NSURL(string: urlSting) { let application = UIApplication.sharedApplication() if application.canOpenURL(url) { application.openURL(url) } } }
你能夠在協議後補充
n
個參數,只須要雙方都能解析獲得就行,具體的協議規則自行商議htm
而後在ApplicationTwo
應用的AppDelegate
文件,咱們須要實現以下方法去接收其它應用傳進來的參數
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { let newUrlHost: NSString = url.absoluteString ?? "" let range = newUrlHost.rangeOfString("//") if range.length != NSNotFound { let params = newUrlHost.substringFromIndex(range.length) UIAlertView(title: "params is \(params)", message: nil, delegate: nil, cancelButtonTitle: "Confirm").show() } else { UIAlertView(title: "haven't params", message: nil, delegate: nil, cancelButtonTitle: "Confirm").show() } return false }
咱們要實現的是,從ApplicationOne
跳轉到ApplicationTwo
應用,再從ApplicationTwo
跳轉回ApplicationOne
應用裏。
具體的實現步驟以下:
ApplicationOne
項目中添加URL Types
協議,具體看文章的上方,咱們剛剛纔作過。ApplicationTwo
應用知道是從哪裏跳轉的,所以咱們能夠在ApplicationOne
的url
跳轉事件把自身的URL Types
協議傳遞給ApplicationTwo
應用。像這樣GC://GarveyCalvin&GCFirst
ApplicationTwo
應用的application(_:openURL: sourceApplication:annotation:)
方法中獲取到ApplicationOne
的協議,咱們保存它,等到須要反向跳轉的時候就可使用它來進行跳轉了。有一位git友提醒了我,在iOS9
下運行報如下錯誤(issue):
-canOpenURL: failed for URL: "GC://GarveyCalvin&GCFirst" - error: "This app is not allowed to query for scheme GC"
這是由於在iOS9
中,蘋果作了嚴格的限制,咱們想要調起這個url
,必需要手動添加白名單,這樣蘋果纔會"放行"。咱們須要在info.plist
裏添加
<key>LSApplicationQueriesSchemes</key> <array> <string>GC</string> </array>
LSApplicationQueriesSchemes
是一個數組,用於存放url
白名單
大家能夠經過這個Git的連接去下載本文章所使用的完整項目源碼。(ApplicationJumpAndSentValue).
iOS開發拓展篇—應用之間的跳轉和數據傳遞
iOS應用程序開發之應用間的跳轉
在Mac和iOS中註冊自定義的URL Scheme
博文做者:GarveyCalvin
博文出處:http://www.cnblogs.com/GarveyCalvin/ 本文版權歸做者和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做!