OC 技术 App与App互相跳转(视频+源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

源码+视频解析地址:https://download.csdn.net/download/weixin_38716347/43090784

效果:
请添加图片描述

在开发过程中一般会从自己的App跳去另外一个App然后再跳回来的。
下面具例子新建两个工程AppA和AppB
步骤:1 填写白名单,用于在别的App跳回来的。
在这里插入图片描述
也可以在info.plist里面设置也是可以,两个地方随便你选择一个地方:
在这里插入图片描述
也可以吧info.plist的数组形式转换成代码形式来去设置
在这里插入图片描述

 <!--  自己App的标记  -->
 <key>CFBundleURLTypes</key>
 <array>
     <dict>
         <key>CFBundleTypeRole</key>
         <string>Editor</string>
         <key>CFBundleURLSchemes</key>
         <array>
             <string>AppA</string>
         </array>
     </dict>
 </array>
 
 <!--  要跳转到的App  -->
 <key>LSApplicationQueriesSchemes</key>
 <array>
     <string>AppB</string>
 </array>

然后再新建一个AppB用同样的方式来设置好它,然后接下来就是相互之前的跳转代码。

AppA跳过去的代码:

//跳转到AppB
-(void)buttonOneClick:(UIButton *)btn {    
    NSString *UrlStr = @"AppB://";
    NSURL *url = [NSURL URLWithString:UrlStr];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
    }else{
        //未安装软件
    }
}

//跳转到App指定页面
- (void)buttonTwoClick:(UIButton *)btn {
    
    NSString *UrlStr = @"AppB://ok";
    NSURL *url = [NSURL URLWithString:UrlStr];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
    }else{
        //未安装软件
    }
    
}

//跳转到AppB获取URL的参数
-(void)buttonThreeClick:(UIButton *)btn {
    NSString *UrlStr = @"AppB://ok?name:a&age:12";
    NSURL *url = [NSURL URLWithString:UrlStr];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
    }else{
        //未安装软件
    }
}

在AppB的AppDelegate里面接收需要写的代码。

//如果是通过URL打开的本应用,则下面的方法会被执行  (用于跳转App的指定页面)
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    //1.获取请求的URL地址
    NSString *urlString = [url absoluteString];
    
    //2.判断地址中包含的信息为bbb则打开第二个页面
    if ([urlString hasPrefix:@"AppB://ok"])
    {
        //获取window中加载的根视图,也就是那个导航
        UINavigationController *navi = (UINavigationController *)self.window.rootViewController;
        //为了触发push第二个界面的segue,需要拿到
        //左边灰色背景的那个控制器的引用
        //而灰色的那个控制器是navi的根视图控制器
        ViewController *vc = (ViewController *)navi.topViewController;
        [vc.navigationController pushViewController:[[BViewController alloc] init] animated:YES];
    }
    return YES;
}

// iOS9新版API
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    self.url = url;
    
    //1.获取请求的URL地址
    NSString *urlString = [url absoluteString];
    
    //2.判断地址中包含的信息为bbb则打开第二个页面
    if ([urlString hasPrefix:@"AppB://ok"])
    {
        //获取window中加载的根视图,也就是那个导航
        UINavigationController *navi = (UINavigationController *)self.window.rootViewController;
        //为了触发push第二个界面的segue,需要拿到
        //左边灰色背景的那个控制器的引用
        //而灰色的那个控制器是navi的根视图控制器
        ViewController *vc = (ViewController *)navi.topViewController;
        [vc.navigationController pushViewController:[[BViewController alloc] init] animated:YES];
    }
    
    return YES;
}

// 建议使用这个来适配iOS9以下系统
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
{
    self.url = url;
    return YES;
}

如何获取App传过来的参数呢?这个我好想没有写成功。但是代码是很值得参考的深究一下就可以,因为没有用到这样的需求就不研究了。

//获取AppA传过来的参数a
- (void)getAppAData{    
    NSURL * urling = ((AppDelegate *)[UIApplication sharedApplication].delegate).url;
    if(urling){
        //显示一下从A获取的url,url = weixin://timelineage,host = timeline
        NSString *rsult = [NSString stringWithFormat:@"url = %@,host = %@",[urling absoluteString],[urling host]];
        NSLog(@"获取结果 - %@",rsult);
        //根据传过来的url的host进行一些操作
        if ([[urling host]isEqualToString:@"ok"]) {
            //跳转到第二个界面.或者根据其他操作
            NSLog(@"成功获取参数");
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯汉栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值