使用openURL实现程序间带参数跳转详解



实现的效果:有两款应用A与B,A打开B

A --> B

1. 新建工程B,bundle ID为com.YouXianMing.B

建立一个URL

这么填写(与前面bundle ID类似的写法):

2. 新建工程A,bundle ID随便起,为简单起见,写下如下代码

复制代码
    NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"];
    if ([[UIApplication sharedApplication] canOpenURL:url])
    {
        NSLog(@"跳转并打开");
        [[UIApplication sharedApplication] openURL:url];
    }
    else
    {
        NSLog(@"打开失败");
    }
复制代码

先执行B(安装应用B),在执行应用A,你会发现可以正常从A应用跳转到B应用了.

很简单吧!

 

我们再来实现可以传递参数的

实现的效果:有两款应用A与B,A打开B,并传递一些参数

    参数

A -----> B

1. A中代码这么写

复制代码
    // 其他应用的 URL Schemes --> B
    // 其他应用的 Identifier  --> com.YouXianMing
    // values?              --> 要传递的参数,方便解析
    NSURL *url = [NSURL URLWithString:\
                  @"B://com.YouXianMing/values?username=WT&password=123456&callback=invoking"];
    if ([[UIApplication sharedApplication] canOpenURL:url])
    {
        NSLog(@"跳转并打开");
        [[UIApplication sharedApplication] openURL:url];
    }
    else
    {
        NSLog(@"打开失败");
    }
复制代码

2. 在B应用中请添加如下方法到AppDelegate.m中

复制代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([[url scheme] isEqualToString:@"B"])
    {
        if ([[url host] isEqualToString:@"com.YouXianMing"])
        {
            /*
             query用法
             
             The query string from the URL. 
             If the receiver does not conform to RFC 1808, returns nil. For example, 
             in the URL http://www.example.com/index.php?key1=value1&key2=value2, 
             the query string is key1=value1&key2=value2.
             */
            NSString *query = [url query];

            // 分割&
            NSArray *array = [query componentsSeparatedByString:@"&"];
        
            // 显示数据
            NSLog(@"%@", array);
        }
        
        return YES;
    }
    
    return NO;
}
复制代码

3. 执行A程序后,注意观察B程序的打印信息:

2014-04-21 13:06:00.277 B[1683:60b] (
    "username=WT",
    "password=123456",
    "callback=invoking"
)

 

实现的效果:有两款应用A与B,A打开B并传参数,B打开A并传参数

太简单了,略.

 

小结:

1. 如果A应用想被B应用打开,需要在A应用中设置URL,在设置中需要设置URL identifier 以及 URL Schemes,作为这个应用的标示

2. A既要打开B,B也能够打开A,那就需要AB两款应用都设置URL了

3. 可以传递字符串的参数

实现的效果:有两款应用A与B,A打开B

A --> B

1. 新建工程B,bundle ID为com.YouXianMing.B

建立一个URL

这么填写(与前面bundle ID类似的写法):

2. 新建工程A,bundle ID随便起,为简单起见,写下如下代码

复制代码
    NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"];
    if ([[UIApplication sharedApplication] canOpenURL:url])
    {
        NSLog(@"跳转并打开");
        [[UIApplication sharedApplication] openURL:url];
    }
    else
    {
        NSLog(@"打开失败");
    }
复制代码

先执行B(安装应用B),在执行应用A,你会发现可以正常从A应用跳转到B应用了.

很简单吧!

 

我们再来实现可以传递参数的

实现的效果:有两款应用A与B,A打开B,并传递一些参数

    参数

A -----> B

1. A中代码这么写

复制代码
    // 其他应用的 URL Schemes --> B
    // 其他应用的 Identifier  --> com.YouXianMing
    // values?              --> 要传递的参数,方便解析
    NSURL *url = [NSURL URLWithString:\
                  @"B://com.YouXianMing/values?username=WT&password=123456&callback=invoking"];
    if ([[UIApplication sharedApplication] canOpenURL:url])
    {
        NSLog(@"跳转并打开");
        [[UIApplication sharedApplication] openURL:url];
    }
    else
    {
        NSLog(@"打开失败");
    }
复制代码

2. 在B应用中请添加如下方法到AppDelegate.m中

复制代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([[url scheme] isEqualToString:@"B"])
    {
        if ([[url host] isEqualToString:@"com.YouXianMing"])
        {
            /*
             query用法
             
             The query string from the URL. 
             If the receiver does not conform to RFC 1808, returns nil. For example, 
             in the URL http://www.example.com/index.php?key1=value1&key2=value2, 
             the query string is key1=value1&key2=value2.
             */
            NSString *query = [url query];

            // 分割&
            NSArray *array = [query componentsSeparatedByString:@"&"];
        
            // 显示数据
            NSLog(@"%@", array);
        }
        
        return YES;
    }
    
    return NO;
}
复制代码

3. 执行A程序后,注意观察B程序的打印信息:

2014-04-21 13:06:00.277 B[1683:60b] (
    "username=WT",
    "password=123456",
    "callback=invoking"
)

 

实现的效果:有两款应用A与B,A打开B并传参数,B打开A并传参数

太简单了,略.

 

小结:

1. 如果A应用想被B应用打开,需要在A应用中设置URL,在设置中需要设置URL identifier 以及 URL Schemes,作为这个应用的标示

2. A既要打开B,B也能够打开A,那就需要AB两款应用都设置URL了

3. 可以传递字符串的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值