程序员

iOS应用跳转

2018-03-06  本文已影响64人  十一遥

应用跳转是指,自己的app跳转到指定的app(如果用户安装了此app的话).

例1:AppA 跳转到AppB.
AppA需要做的是: 添加白名单,实现跳转方法
(1) 在info.plist添加白名单

(2) 实现跳转方法

    // 1.获取应用程序AppB的URL Scheme
    NSURL *appBUrl = [NSURL URLWithString:@"AppB://?AppA"];
    
    // 2.判断手机中是否安装了对应程序
    if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
        // 3. 打开应用程序AppB
        [[UIApplication sharedApplication] openURL:appBUrl];
    } else {
       
        NSLog(@"没有安装AppB");
    }
AppB需要做的是: 设置自己的URL scheme, 在AppDelegate里实现跳转的方法

(1)设置自己的URL scheme

设置自己的URL scheme

(2)在AppDelegate里实现跳转的方法

//URL scheme
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    
    return YES;
}
例2:AppA 跳转到AppB指定界面.
AppA需要做的是: 添加白名单,实现跳转方法(实现的方法不同了)
    // 1.获取应用程序AppB的Page1页面的URL
    NSURL *appBUrl = [NSURL URLWithString:@"AppB://Page1?AppA"];
    
    // 2.判断手机中是否安装了对应程序
    if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
        
        // 3. 打开应用程序AppB的Page1页面
        [[UIApplication sharedApplication] openURL:appBUrl];
    } else {
        
        NSLog(@"没有安装");
    }
AppB需要做的是: 设置自己的URL scheme, 在AppDelegate里实现跳转的方法,在方法中实现指定界面跳转
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // 1.获取导航栏控制器
    UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
  
    // 2.获得主控制器
    ViewController *mainVc = [rootNav.childViewControllers firstObject];
    
    // 保存完整的App-A的URL给主控制器
    mainVc.urlString = url.absoluteString;
    
    // 3.每次跳转前必须是在跟控制器
    [rootNav popToRootViewControllerAnimated:NO];
    
    // 4.根据字符串关键字来跳转到不同页面
    if ([url.absoluteString containsString:@"Page1"]) { // 跳转到应用AppB的Page1页面
       
        //弹出方式取决于界面类型
        //[mainVc.navigationController pushViewController:[[Page1Controller alloc]init] animated:NO];
        [mainVc presentViewController:[[Page1Controller alloc]init] animated:NO completion:nil];
    }
    
    return YES;
}

上一篇 下一篇

猜你喜欢

热点阅读