ios应用之间的跳转

ios应用之间的跳转

iOS应用之间的跳转是通过URL Scheme实现的。

  1. URL Scheme

    ios应用将自身绑定到一个自定义的URL Scheme上,该Scheme用于从浏览器活其他应用中启动本应用。

  2. LSApplicationQueriesSchemes白名单

    判断系统是够安装了指定的APP,使用canOpenURL方法,ios9之前这个方法直接检测系统是否安装了APP,ios9之后为了用户的隐私安全,必须将APP设置成白名单之后才能通过canOpenURL的检测。

应用跳转demo

一、 应用B跳转到应用A

  1. 在应用A中添加URL Scheme(如:A)
  2. 在应用B的Info.plist中设置白名单,添加应用A的URL Scheme(A)

应用B中跳转代码:

- (IBAction)Tiaozhuan:(UIButton *)sender {
    NSURL *url = [NSURL URLWithString:@"A://"];
    //检测是否安装了应用A
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        //跳转到应用A
        [[UIApplication sharedApplication] openURL:url];
    }
}

二、应用B跳转到应用A指定界面

应用B中代码:

- (IBAction)Tiaozhuan:(UIButton *)sender {
    NSURL *url = [NSURL URLWithString:@"A://?vc=One"];
    //检测是否安装了应用A
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        //跳转到应用A
        [[UIApplication sharedApplication] openURL:url];
    }
}

应用A中代码:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    if ([url.absoluteString rangeOfString:@"One"].location != NSNotFound) {
        UINavigationController *nav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        OneViewController *vc = [OneViewController new];
        [nav pushViewController:vc animated:YES];
    }
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation {
    if ([url.absoluteString rangeOfString:@"One"].location != NSNotFound) {
        UINavigationController *nav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        OneViewController *vc = [OneViewController new];
        [nav pushViewController:vc animated:YES];
    }
    return YES;
}
三、应用A反跳回应用B

应用B中代码:

- (IBAction)Tiaozhuan:(UIButton *)sender {
    NSURL *url = [NSURL URLWithString:@"A://B?vc=One"];
    //检测是否安装了应用A
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        //跳转到应用A
        [[UIApplication sharedApplication] openURL:url];
    }
}

应用A中代码:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    if ([url.absoluteString rangeOfString:@"One"].location != NSNotFound) {
        UINavigationController *nav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        OneViewController *vc = [OneViewController new];
        vc.scheme = [[[[url.absoluteString componentsSeparatedByString:@"://"] lastObject] componentsSeparatedByString:@"?"] firstObject];
        [nav pushViewController:vc animated:YES];
    }
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation {
    if ([url.absoluteString rangeOfString:@"One"].location != NSNotFound) {
        UINavigationController *nav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        OneViewController *vc = [OneViewController new];
        vc.scheme = [[[[url.absoluteString componentsSeparatedByString:@"://"] lastObject] componentsSeparatedByString:@"?"] firstObject];
        [nav pushViewController:vc animated:YES];
    }
    return YES;
}
@interface OneViewController : UIViewController

@property (nonatomic, copy) NSString *scheme;

@end

- (void)back:(id)sender {
    NSURL *url = [NSURL URLWithString:[self.scheme stringByAppendingString:@"://"]];
    //此处不需要调用canOpen方法判断是否安装应用 直接跳转
    [[UIApplication sharedApplication] openURL:url];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值