应用场景:
百度地图等
第三方支付
第三方分享登陆
下面先说几个概念性东西:
1 URL :统一资源定位符(可以没有路径 但是必须要有协议头)
2 scheme: 协议头,用来决定查找资源的方式
3 path:路径
默认情况下应用程序没有URL,并且在iOS 中打开一个应用程序只要能拿到这个应用程序协议头即可
开始实现:
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 = [NSURL URLWithString:[NSString stringWithFormat:@"AppTurnTwo://"]];
//2 判断手机中是否安装了对应的应用程序
//1 获取对应程序的URL
//NSURL *url= [NSURL URLWithString:@"AppTurnTwo://"];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"AppTurnTwo://"]];
//2 判断手机中是否安装了对应的应用程序
if ([[UIApplication sharedApplication] canOpenURL:url]) {
//3 打开应用程序
[[UIApplication sharedApplication] openURL:url];
}else{
//调转到网页版 这儿以百度为例
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
}
这时运行会报以下错误:
This app is not allowed to query for scheme AppTurnTwo
这个程序是不允许AppTurnTwo查询方案
原因:
iOS 9系统策略更新,限制了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
这个错误是没有打开网络
<code class="xml">NSAppTransportSecurity</code>
<code class="xml"></code><pre class="hljs xml" name="code" style="white-space: pre-wrap; word-wrap: break-word; padding: 0.5em; font-size: 14px; line-height: 26px; background: rgb(255, 255, 255);"><code class="xml">NSAllowsArbitraryLoads</code>OK!