应用间的跳转

应用间的跳转

标签(空格分隔): ios进阶


在手机app中经常需要在应用间跳转,比如微信分享,支付宝付款,第三方登陆等。

此处输入图片的描述

此处输入图片的描述

简单的例子

这些都是很常见的应用,要实现这样的功能需要在应用程序中设置 URL Schemes(目标应用程序)

此处输入图片的描述

然后在程序中写如下代码就可以跳转了

- (IBAction)weixing {
     NSURL *url = [NSURL URLWithString:@"weixin://"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}

跳转到目标应用程序的具体页面

  • 上面的例子是最简单的跳转,在实际应用中我们往往需要跳转到具体的页面,比如微信的好友页面,和微信的朋友圈页面
    这里我们自己建立了两个最简单的程序来说明这已跳转和返回的过程
    这里也把源应用程序的URL Schemes设置为”news”,把这个标志随跳转一起传到跳转的程序,好让跳转后通过这个标志能返回原程序,
//点击按钮跳到好友页面
- (IBAction)weixinghaoyou {
    [self openURLString:@"weixin://haoyou?news"];//把"news"传出去
}
//点击按钮跳到朋友圈页面
- (IBAction)weixingpenyouquan {
    [self openURLString:@"weixin://pengyou?news"];
}
- (void)openURLString:(NSString *)urlString
{
    NSURL *url = [NSURL URLWithString:urlString];
    NSLog(@"%@",url);
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
  • 在目标应用程序的AppDelegate方法中
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // 1.拿到主页控制器
    UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
    [rootNav popToRootViewControllerAnimated:NO];
    ViewController *mainVc = [rootNav.childViewControllers firstObject];

    // 1.1.给根控制器的urlString属性赋值
    mainVc.urlString = url.absoluteString;

    // 2.根据URL跳转到固定的界面
    if ([url.absoluteString containsString:@"session"]) {
        // 跳转到朋友圈()
        [mainVc performSegueWithIdentifier:@"mainToSession" sender:nil];
    } else if ([url.absoluteString containsString:@"timeline"]){
        // 跳转到微信好友界面
        [mainVc performSegueWithIdentifier:@"mainToTimeline" sender:nil];
    }
    return YES;
}
  • 在跳转后返回原来的应用程序(控制器都有个成员属性url,能保存传过来的URL)
//将url传出去
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"mainToSession"]) {
        SessionViewController *sessionVc = segue.destinationViewController;
        sessionVc.urlString = self.urlString;
    }
}
  • SessionViewController里面实现的点击返回原程序的按钮的方法:
- (IBAction)backToApp {
    // 1.拿到对应应用程序的URL
    NSString *urlString = [[self.urlString componentsSeparatedByString:@"?"] lastObject];
    NSString *appURLString = [NSString stringWithFormat:@"%@://", urlString];
    NSURL *url = [NSURL URLWithString:appURLString];

    // 2.判断一下应用程序是否可以打开,如果可以打开,则打开对应的应用程序
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值