iOS scheme跳转机制
简介
苹果手机中的APP都有一个沙盒,APP就是一个单独个体,信息独立,相互是不可以进行通信的.但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便App之间相互调用而设计的.我们可以通过系统的openURL来打开该APP,并可以传递一些参数,URL Scheme必须能唯一表示一个APP,如果你设置的URL Scheme和逼得APP的URL Scheme冲突时,你的APP不一定会被启动起来.因为当你的APP在安装的时候,系统里面已经注册了你的URL Scheme.一般情况下,是会调用先安装的APP.但是iOS的系统APP的URL Scheme肯定是最高的,所以我们定义URL Scheme的时候,尽量避开系统APP已经定义过的URL Scheme
URL Scheme的命名应该是只能纯英文字符,而不能含有下划线或者数字
注册URL Scheme
方法一
在 TARGETS -> Info -> URL Types 点击添加
方法二
在info.plist中右击,选中
Add Row选项,然后输入URL types,类型为 Array
URL Identifier是自定义的 URL scheme 的名字,一般采用反转域名的方法保证该名字的唯一性,比如 com.DemoB.www,不过在iOS中打开一个应用程序只需要拿到这个应用程序的协议头(URL Scheme)即可,所以我们只需配置应用程序的协议头即可。一个应用是可以有多个URL Schemes的
使用
1. 应用A跳转到应用B
这里创建了两个应用:DemoA 和DemoB,DemoB注册了Scheme为"DemoBScheme",下面来实现DemoA→DemoB的跳转
#pragma mark - DemoA -> DemoB
- (IBAction)jumpToDemoB:(id)sender {
NSString *urlString = @"DemoBScheme://";//没有参数
NSURL *url = [NSURL URLWithString:urlString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
}];
}
else {
[self showMessage:@"没有该应用"];
}
}
分别运行两个应用,然后在DemoA中点击相应的按钮跳转到DemoB,会发现并不能跳转,因为在iOS9以后,如果使用canOpenURL:方法,改方法所涉及的URL Scheme必须在Info.plist中将它们列为白名单,否则不能使用
在info.plist中添加LSApplicationQueriesSchemes