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/ 本文版权归做者和博客园共有,欢迎转载,但须保留此段声明,并给出原文连接,谢谢合做!