美文网首页工作生活iOS
iOS - 应用间跳转

iOS - 应用间跳转

作者: 厦门_小灰灰 | 来源:发表于2019-07-01 18:29 被阅读0次

在平常的开发中,会经常遇到从我们自己的App跳转到其他App,如微信分享,第三方支付,使用系统的内置程序等;

应用跳转原理

通过应用程序的自定义的协议头(URL Schemes),只需配置应用程序的协议头即可。
比如有两个应用,一个是应用A,一个是应用B

  • 通过设置应用B的URL Schemes,应用B将其自身“绑定”到一个自定义URL Schemes上,就可以从应用A中利用应用B的URL Schemes启动应用B;
配置URL Schemes
配置URL Schemes.png

这里有个点需要注意:

  • iOS9之前不需要设置白名单,就可以实现跳转;
  • iOS9之后,要跳转应用的URL Schemes添加到白名单中(白名单在Info.plist设置,对应的key为LSApplicationQueriesSchemes),否则不能使用;


    LSApplicationQueriesSchemes.png

接下来通过代码来实现应用间的跳转,事先先创建两个应用,然后将各自的URL Schemes配置为AppA和AppB,并且设置白名单。

1. 应用A跳转应用B
AppA跳转AppB.gif
- (IBAction)jumpToAppB:(id)sender {
    
    NSURL *url = [NSURL URLWithString:@"AppB://"];
    
    //判断是否可以打开应用B
    if ( [[UIApplication sharedApplication] canOpenURL:url] ) {
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"无法打开应用B");
    }
    
}
2. 应用A跳转应用B,打开指定页面
  • 在应用B中创建两个页面。


    两个页面.png
  • 代码

- (IBAction)jumpToAppBHomePage:(id)sender {
    
    NSURL *url = [NSURL URLWithString:@"AppB://home"];
    
    //判断是否可以打开应用B
    if ( [[UIApplication sharedApplication] canOpenURL:url] ) {
        //打开应用程序App-B的Home页面
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"无法打开应用B");
    }
    
}

- (IBAction)jumpToAppBDetailPage:(id)sender {
    
    NSURL *url = [NSURL URLWithString:@"AppB://detail"];
    
    //判断是否可以打开应用B
    if ( [[UIApplication sharedApplication] canOpenURL:url] ) {
        //打开应用程序App-B的Detail页面
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"无法打开应用B");
    }
    
}
  • 在应用B的AppDelegate中,重写
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    //注意:这里只是简单的跳转页面,具体跳转还是要跟实际相关,比如是是在当前页面在打开新页面,还是要回到首页在打开新页面
    UIViewController *rootVC = self.window.rootViewController;
    
    if ( [url.absoluteString containsString:@"home"] ) {
        //跳转Home页面
        HomeVC *homeVC = [[HomeVC alloc] init];
        [rootVC presentViewController:homeVC animated:YES completion:nil];
    } else if ( [url.absoluteString containsString:@"detail"] ) {
        //跳转Detail页面
        DetailVC *detailVC = [[DetailVC alloc] init];
        [rootVC presentViewController:detailVC animated:YES completion:nil];
    }

    
    return YES;
}

效果图就不给出了。自己补脑。嘻嘻!

3. 应用A跳转应用B后,应用B在跳转会应用A

从应用B再跳转回应用A,那么在跳转到应用B的时候,要将应用A的URL Schemes传递过来。
URL的规则:
应用B的协议头://额外的参数?应用A的协议头
其中:? 是分割符

具体怎么保存应用A的协议头,就看具体页面,看是保存为局部变量还是全局变量,在需要的时候在拿出来使用。记得要在协议头后面拼接上://

简单代码如下

    //比如应用A跳转的地址为:AppB://home?AppA
    //这边假设上面的AppB://home?AppA 存储在局部变量中 urlString
    NSString *jumpUrlScheme = [[self.urlString componentsSeparatedByString:@"?"] lastObject];
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://", jumpUrlScheme]];
    
    //判断是否可以打开应用B
    if ( [[UIApplication sharedApplication] canOpenURL:url] ) {
        //打开应用程序App-B的Home页面
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"无法打开应用");
    }

over!

相关文章

  • 获取plist中的URL Schemes

    最近在写的项目中涉及到了应用间的跳转实现,iOS实现跳转应用是通过 openURL:方法; 此时遇到多个应用跳转到...

  • iOS应用间跳转

    场景需求:一个应用A(以news应用为示例)跳转到另外一个应用B(以weChat为示例),常见需求如下1.应用推荐...

  • iOS应用间跳转

    1.应用通过配置URL schemes进行标识(可以配置多个URL schemes)。跳转到其他应用就必须知道这个...

  • ios 应用间跳转

    1.先来看看效果,这里做了三个功能 从MyApp跳转到YourApp 从MyApp跳转到YourApp的指定页面 ...

  • iOS - 应用间跳转

    在平常的开发中,会经常遇到从我们自己的App跳转到其他App,如微信分享,第三方支付,使用系统的内置程序等; 应用...

  • iOS应用跳转到appstore评分

    iOS应用跳转到appstore评分 标签(空格分隔): IOS 跳转到应用评价页 跳转到应用详情页 appid是...

  • iOS应用内跳转到系统设置页面

    iOS应用内跳转到系统设置页面 iOS应用内跳转到系统设置页面

  • 应用间跳转与Applinks

    iOS应用间跳转的教程.应用间跳转(Obj-C) 简单总结: 1.A程序与B程序,B程序需要被打开,在B工程中的t...

  • iOS应用间的跳转

    如下所示: 打印结果: 可知 在一个 URL 对象中,http 即是 scheme,www.abc.com 即是 ...

  • iOS 应用间的跳转

    http://www.jianshu.com/p/b5e8ef8c76a3

网友评论

    本文标题:iOS - 应用间跳转

    本文链接:https://www.haomeiwen.com/subject/buqncctx.html