美文网首页
iOS实现一个应用去handle另一个应用(一个App打开另外一

iOS实现一个应用去handle另一个应用(一个App打开另外一

作者: West说说 | 来源:发表于2019-10-18 14:15 被阅读0次

    一、首先我们创建两个用于测试的App项目(我这里以App-A 和 App-B 为例)

    image image

    二、打开工程,设置工程的InfoPlist:添加URL Types

    给你的App设置一个URL Schemes(明明以你的App或者工程名来命名) 这样就能让其它应用识别得到App

    ps:我们这里用App_B 去 handle 我们的App_A,故我们App_A就要设置URL Schemes

    image

    三、在App_B中,设置一个按钮,实现点击后handle出我们的App_A

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIButton *App_B_Button = [UIButton buttonWithType:UIButtonTypeCustom];
        App_B_Button.frame = CGRectMake(100,100,100,50);
        App_B_Button.backgroundColor = [UIColor purpleColor];
        [App_B_Button setTitle:@"App_B" forState:UIControlStateNormal];
        [App_B_Button addTarget:self action:@selector(app_B:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:App_B_Button];
    }
    
    -(void)app_B:(UIButton *)buttonB {
        NSURL *url = [NSURL URLWithString:@"appA://"];
        [[UIApplication sharedApplication] openURL:url];
    }
    

    点击按钮后:

    image

    这样就能实现App之间的跳转的功能了。

    注意:打开应用App-A的过程中,App-A有两种状态。

    第一种状态:App_A并没有启动,那么会启动App_A。并调用下面的方法。

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        return YES;
    }
    

    第二种状态:此时B已经启动了,但是在后台运行,这个时候不会调用该方法

    四、若想实现App跳转的同时进行传值,只需实现application的代理方法

    //当应用程序被其他程序打开的时候会调用这个方法,在该方法中可以实现两个应用程序间的数据局传递

    //通过这个代理方法可以拦截url

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
        NSString *urlStr = [url absoluteString];
        if([urlStr hasPrefix:@"AppA://"]) {
            urlStr = [urlStr stringByReplacingOccurrencesOfString:@"AppA://"withString:@""];//参数就在url,传值也在里面           
        }
        return NO;
    }
    

    相关文章

      网友评论

          本文标题:iOS实现一个应用去handle另一个应用(一个App打开另外一

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