最全经典总结: ios跳转到第三方应用,APP互相跳转传值

最好添加支持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 sharedApplicationcanOpenURL:otherAppUrl]){

        [[UIApplication sharedApplicationopenURL:otherAppUrl];

    }else{

        //打开一个网页

        NSURL *myUrl = [NSURL URLWithString:@"https://www.baidu.com/"];

        [[UIApplication sharedApplicationopenURL: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;

}


你可能感兴趣的:(iOS应用)