转载来自:http://www.jianshu.com/p/6b746f95b568
在应用开发过程中,我们经常会涉及到一个应用和另外一个应用之间的通信。比如调用支付宝、分享至微信等操作,这些都涉及到两个应用之间的通信。
1、在介绍应用跳转之前,我们先了解一下相关概念:
a、协议:双方必须遵守的一种规范,只有遵守了共同的协议彼此之间才能进行通信。eg:网络协议(http协议)
b、URL: 资源的存放路径或者地址,在iOS中NSURL类是专门用于包装资源路径的类
c、URL的组成结构:
例如:http://blog.csdn.net/micheal_zj/article/details/52798428
"http://": 协议类型
"blog.csdn.net": 服务器的ip地址
"/micheal_zj/article/details/52798428": 资源的存放路径
打印结果如下:
2、跳转原理
在iOS中,我们知道有这样一个类UIApplication,它专门负责对应用进行管理。那么,我们如何实现在自己的应用中打开别的应用呢?下面这个方法即可实现这点:
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion;
其实,我们平时如果有做过拨打电话和发送短信就会发现就是通过该方法实现的。短信和电话都是应用,实现发送短信和拨打电话其实就是实现了应用之间的通信跳转。
拨打电话:
上面我们可以看出,拨打电话:“tel://”,发送短信:“sms://”两个不同的协议,所以应用之间通信必须是各个应用都有自己独有的协议,当别的应用要和其通信时,用UIApplication对象打开包含相应协议的url。
3、跳转实现(应用间跳转)
现在创建两个项目,项目ApplicationJumpA和项目ApplicationJump。实现前面一个跳转至后面一个。我们需要事先的项目ApplicationJump中配置其独有的scheme(协议),这里我们将协议配置为"test1"如下图所示:
现在在项目ApplicationJumpA需要跳转操作的地方执行:
到这里已经基本实现了。注意:如果系统是iOS9以下那么已经成功了,但是如果是 iOS9以上的系统那么我们还需要在项目的plist文件中进行另外的配置。允许该项目打开的别的项目的协议,在plist文件中添加数组字段LSApplicationQueriesSchemes。如下图:
4、跳转实现(应用跳转至指定界面)
应用跳转至指定界面我们可以借助url中的post进行操作。依旧用上面两个项目举例,比如我们要跳转到项目ApplicationJump中的设置界面。那么我们需要在项目ApplicationJumpA中跳转的地方实现:
在项目ApplicationJump的AppDelegate中监听方法并实现推出设置界面的操作,如下图:
这样便实现了跳转到应用的指定界面。