实现应用间的跳转
从demo1到demo2,首先设置demo2 的 URL schme:
设置路径 tagert -> info ->URL_types 设置自己的schme在demo1 中响应时间中设置
// 进行应用跳转 URL Scheme格式 : scheme://
[[UIApplication
sharedApplication] openURL:[NSURL URLWithString:@"demo2://"]];
- 点击屏幕响应时间,弹出提示,直接跳转
如果添加
// 判断系统上是否安装该App if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"demo2://"]]) {
// 如果安装 --> 跳转 // 进行应用跳转 URL Scheme格式 : scheme:// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demo2://"]];
}else{
// 如果未安装 --> 提示或到AppStore下载页等
NSLog(@"未安装此应用...");
}
这时候发现无法实现跳转,是因为iOS进行应用跳转时,如果使用了canOpenURL进行判断,就需要设置白名单,只有设置了URL Scheme白名单,才有可能返回YES
- 设置白名单
-- 在info.plist 中对应的key: LSApplicationQueriesSchemes
<key>LSApplicationQueriesSchemes</key><array><!-- 目标应用 URL Scheme 白名单--><string>替换成目标app的URL Scheme</string></array>
补充:
1).因为URL Scheme并不是唯一的,一个app也可以对应多个URL Scheme,所以会存在URL Scheme劫持的隐患
2).为了防止应用轻易获取用户隐私(通过canOpenURL遍历应用列表,就知道了用户安装的app列表,就一定程度上了解了用户的隐私),所以iOS9开始加入了白名单的限制(白名单有个数限制,最多90条)
跳转并传递参数
// 2. URL Scheme格式 : scheme://参数 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demo2://demo1"]];
url.absoluteString 取url 中的字符串
- 使用应用转到另一个应用会调用一下方法,可以在此方法里做一些事情
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
// 设置界面
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController; tabBar.selectedIndex = 1; return YES;
}