最好添加支持http协议 info plist加
<dict>
<key>NSAllowsArbitraryLoadskey>
<true/>
dict>
注意:
模拟器中也是可以跳转的,模拟器第一次跳转APP会弹出一个提示框。
真机不会弹提示框
这里的 URL identifier选填,URL Schemes必填
URL Schemes建议都小写,由于之后接收到数据的时候,不区分大写和小写, 都是转为小写。比如URL Schemes填写 CESHI 其实和 填写ceshi 一样
pedometer应用:
打开info.plist info选项卡添加一个数组 LSApplicationQueriesSchemes Array 数组一: item 0: ceshi01
在 info选项卡最下方的 URL Types中 identifier 不需要填写 URL Schemes: pedometer
- (void)performanceAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"ceshi01://"];
//判断当前系统是否有安装第三方app客户端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//打开一个网页
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
ceshi01应用:
LSApplicationQueriesSchemes Array
item 0: pedometer
URL Types中 identifier 不需要填写 URL Schemes: ceshi01 若不填写对方跳转不进来
- (IBAction)jumpToOtherAppAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURL URLWithString:@"pedometer://"]; //规定的格式是 URL Schemes://传递的消息 传递的消息区分大小写
//这里的pedometer表示第三方应用的info.plist 的URL Types 有一个 URL Schemes 为 pedometer 并不需要第三方应用的工程名字为pedometer,
也不需要第三方应用的 Bundle Identifier 末尾为pedometer (即:com.XXXXX.pedometer形式),也就是说应用之间跳转与工程名无关,也与 Bundle Identifier无关
这里暂且将URL Schemes 里的 pedometer 称之为 “跳转KEY”
// 判断当前系统是否有安装第三方app客户端
if([[UIApplication sharedApplication] canOpenURL:otherAppUrl]){
[[UIApplication sharedApplication] openURL:otherAppUrl];
}else{
//打开一个网页
NSURL *myUrl = [NSURL URLWithString:@"https://www.baidu.com/"];
[[UIApplication sharedApplication] openURL:myUrl];
}
}
经过以上设置两个app就可以互相跳转了
经过本人的反复测试:(双向跳转就是双方应用均满足以下的单向跳转)
单向跳转的流程猜测**********************************************************:
比如应用ceshi02跳转到应用pedometer
第一步:跳转代码:
- (IBAction)jumpAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"jumpkey://"];
// 判断当前系统是否有安装第三方app客户端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//打开一个网页
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
第二步:自己应用中:查询[NSURL URLWithString:@"jumpkey://"]; 中的jumpkey 在LSApplicationQueriesSchemes中是否查询的到 否则会报错
-canOpenURL: failed for URL: "pedometer://" - error: "This app is not allowed to query for scheme pedometer"
第三步:第三方应用pedometer中URL Schemes 有 jumpkey 若有就跳转
否则会报错 -canOpenURL: failed for URL: "pedometer://" - error: "(null)"
这三步缺一不可
注意:若ceshi02满足以上跳转后,当想从应用pedometer跳转回ceshi02时 也必须满足以上跳转的三个步骤,只不过身份对调了
若不满足跳转的三个步骤 那么不能跳转回 应用ceshi02 但是不影响系统自动生成的 左上角的 返回“ceshi02” 按钮 返回自身ceshi02的应用
下面研究应用之间传值:首先跳转得满足以上三个步骤 这里不再赘述
应用pedometer 给 应用ceshi 传值
1.应用pedometer 中:
- (void)serviceAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"ceshi://hello"]; //hello 为消息
// 判断当前系统是否有安装第三方app客户端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//打开一个网页
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
2. 应用ceshi 中
AppDelegate中
message 打印为 hello
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSString* message = [[urlhost]stringByRemovingPercentEncoding];
NSLog(@"%@",message);
returnYES;
}