工作生活iOS

iOS - 应用间跳转

2019-07-01  本文已影响0人  厦门_小灰灰

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

应用跳转原理

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

配置URL Schemes
配置URL Schemes.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,打开指定页面
- (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");
    }
    
}
- (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!

上一篇下一篇

猜你喜欢

热点阅读