版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
iOS开发专栏收录该内容
180 篇文章2 订阅
订阅专栏
应用场景:
百度地图等
第三方支付
第三方分享登陆
下面先说几个概念性东西:
1 URL :统一资源定位符(可以没有路径但是必须要有协议头)
2 scheme:协议头,用来决定查找资源的方式
3 path:路径
默认情况下应用程序没有URL,并且在iOS中打开一个应用程序只要能拿到这个应用程序协议头即可
iOS 从一个APP跳转到另一个APP,并带参数跳到指定页面.https://blog.csdn.net/wangqinglei0307/article/details/78685058
开始实现:
1 新建两个工程 AppTurnOne 和AppTurnTwo 并在一中创建一个button 添加点击事件
2 我们做的是从 one 跳到 two 需要在two中设置下scheme 如下图:(设置URL scheme) weichat qq weibo 都是统一的;
当另一个app需要设置跳转到本app需要获取本app的协议头如截图一
//本app为 AppTurnTwo另一个需要跳转的App需要这个scheme
:
3 回到Appone 在点击事件中:
//跳转到另一个App (不加判断直接跳转)
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"AppTurnTwo://"]];
4 先运行 two 再运行one 让这两个程序都安装到模拟机上 点击button就会跳转到另一个页面
5 判断手机中是否安装了需要跳转的APP 如果有跳转 没有就跳转到网页版 或者返回.
/1获取对应程序的URL
//NSURL *url= [NSURL URLWithString:@"AppTurnTwo://"];
NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"AppTurnTwo://"]];
//2判断手机中是否安装了对应的应用程序
//1获取对应程序的URL
//NSURL *url= [NSURL URLWithString:@"AppTurnTwo://"];
NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"AppTurnTwo://"]];
//2判断手机中是否安装了对应的应用程序
if([[UIApplicationsharedApplication]canOpenURL:url]) {
//3打开应用程序
[[UIApplicationsharedApplication]openURL:url];
}else{
//调转到网页版这儿以百度为例
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://www.baidu.com"]];
}
这时运行会报以下错误:
This app is not allowed to query for scheme AppTurnTwo
这个程序是不允许AppTurnTwo查询方案
原因:
iOS9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。
受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里配置
配置:LSApplicationQueriesSchemes
再运行就可以跳转了:
如果你的输出信息是-canOpenURL: failed for URL: "kindle://home" - error: "This app is not allowed to query for scheme kindle"
去你的 target 里面的 Build Settings 下的 Enable Bitcode,把它设置成 NO,这不一定会阻挡你的控制台继续输出这条信息,但是可以保证你的 App 正常运行
关于其他通过 WebView 访问 http 网址引发的控制台报错信息 什么info.plist
这个错误是没有打开网络
NSAppTransportSecurityNSAllowsArbitraryLoadsOK!iOS 从一个APP跳转到另一个APP,并带参数跳到指定页面
功能实现:A跳到B并打开B中指定页面
步骤:
1.首先创建两个项目(项目A,项目B),在项目B中的info.plist文件中添加URL Types,如下图所示:
其中URL idenifier是项目B的bundle id ,URL Schemes 中添加一个命令前缀,我这里使用“projectB”,这个名字可以自己取,运行一下项目B。
2.在项目A中添加跳转代码
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"projectB://"]];
这里的URL的命令前缀必须和之前自己定义的一致,我把这行代码加到了一个button的点击方法里,现在点击button就可以跳到项目B了。
3.现在说下app之间跳转的通信,其实跟传值差不多。项目A中第二个button的点击方法添加代码
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"projectB://openBSecondPage"]];
4 . 项目B中在appDelegate中添加一个NSURL的属性,实现一个代理方法接收从项目A传过来的URL
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {self.url = url;returnYES; }
然后在B中第一个界面加上代码
- (void)viewDidLoad { [super viewDidLoad];NSURL * url = ((AppDelegate *)[UIApplication sharedApplication].delegate).url; ;if(url){//显示一下从A获取的url,url = projectB://openBSecondPage,host = openBSecondPageself.label.text = [NSString stringWithFormat:@"url = %@,host = %@",[url absoluteString],[url host]];//根据传过来的url的host进行一些操作if ([[url host]isEqualToString:@"openBSecondPage"]) {//跳转到第二个界面 [self performSegueWithIdentifier:@"second" sender:nil]; } } }
简而言之,就是根据从A中传过来的URL打开项目B后进行一些自定义操作