iOS开发-应用之间的跳转及通信
2015-10-14 12:30
525 查看
Update
2016-08-12: 在Github的Demo上增加Mac自定义Url Scheme,可以在Safari上输入特定协议头打开应用,并传递参数)简介
我们接下来将要实现应用程序之间的跳转及通讯。现在手机开发中,很多时候我们都需要在应用内跳转到别的应用中,这个是很常见的。为此,我们首先需要准备两个项目
ApplicationOne和
ApplicationTwo。(下载项目源码)
应用间的简单跳转
在ApplicationOne应用跳转到
ApplicationTwo应用
我们需要先创建在
ApplicationTwo项目里设置
URL Types协议,这里我设置为
GC,如下所示
在
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) } } }
1: 创建
urlString字符串
2: 利用
urlString字符串创建真正的
url,并检测
url是否有用
3: 获得
UIApplication实例
4: 检测是否能够打开此
url
5: 打开
url,在这里即为我们的应用跳转
需要注意的是,协议开头必须要是完整的,即为
****://
应用间的传值跳转
实现方式很简单,我们只需要在url协议里补充参数就可以了,比如我现在传一个字符串
GarveyCalvin
现在事件的代码是这样的
@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个参数,只需要双方都能解析得到就行,具体的协议规则自行商议
然后在
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的协议,我们保存它,等到需要反向跳转的时候就可以使用它来进行跳转了。
适配iOS9
有一位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白名单
Download
你们可以通过这个Git的链接去下载本文章所使用的完整项目源码。(ApplicationJumpAndSentValue).参考文章
iOS开发拓展篇—应用之间的跳转和数据传递iOS应用程序开发之应用间的跳转
在Mac和iOS中注册自定义的URL Scheme
博文出处:http://www.cnblogs.com/GarveyCalvin/
本文版权归作者和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作!
相关文章推荐
- iOS开发-应用之间的跳转及通信
- iOS 带有震荡效果的动画
- ARC下循环引用的问题 ++ 整理
- 需求 - 10 - 支付宝、银联接入
- 【iOS开发】---- 如何将图片保存至自定义分组
- 【iOS开发】---- ALAsset,ALAssetsLibrary,ALAssetsgroup常见属性及用法
- IOS顺时针传值-模型传值
- [IOS] Storyboard全解析-第一部分
- iOS9适配
- 如何判断ios设备类型
- iOS 学习笔记——0002(位运算符的应用)
- ios9设置bitcode AMR编译
- iOS 清除缓存
- iOS 应用状态恢复
- iOS之矩形图片切割成圆形图片
- iOS 编码规范
- Xcode 7 及 iOS9 更新遇到的一些问题
- iOS资料必看
- ios开发中关于绘图的问题
- IOS7 第一次接触ALAssetsLibrary,简单介绍一下ALAssetsLibrary的作用