我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:

android开发微信跳转app app唤起微信再跳转到url_Scheme


那么IOS是如何实现App之间的跳转呢?今天就来学习一下。

URL Scheme:

IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。

其拉起的格式如下:

android开发微信跳转app app唤起微信再跳转到url_App_02


比如我们想拉起微信,可以在浏览器页面输入:weixin://

就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。

接下来我就演示一下如何在Safari浏览器中拉起我自己创建的一个App。

要让App支持被拉起,首先我们需要在URL Types中设置该App的URL Scheme。

如图,我设置自己的App的URL Scheme为Sample。

android开发微信跳转app app唤起微信再跳转到url_android开发微信跳转app_03


接下来我在模拟器中进行试验:输入Sample://

android开发微信跳转app app唤起微信再跳转到url_白名单_04


模拟器就会跳出是否拉起App的窗口,选择Open,就可以实现跳转了。

这里需要强调一下,如果我们将自己App的URL Scheme设置为weixin,并在Safari浏览器中输入weixin://,浏览器依旧会打开我们的App,这就为一些不法分子提供了机会,利用打开微信等人们App的链接,而实际上跳转到的页面很可能是非法的链接。

以上展示了使用Safari唤起我的App,那么如何使用我自己的App唤起别的App呢?接下来就演示一下。

两个App之间的唤起:

如图,模拟器中,使用左边的App拉起右边的App。

android开发微信跳转app app唤起微信再跳转到url_App_05

首先我需要设置我要拉起的App的URL Scheme,此处设置为TestScheme

android开发微信跳转app app唤起微信再跳转到url_Scheme_06

接着我在我自己的App里书写拉起的逻辑代码。
这里需要用到两个函数,一个是canOpenUrl,一个是openURL,原型如下:

- (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0)) NS_EXTENSION_UNAVAILABLE_IOS("");

这里代码中我们在viewClick函数中实现拉起App的逻辑。

-(void) viewClick{
    NSLog(@"viewClick");
    //点击手势执行打开TestScheme App
    NSURL *urlScheme = [NSURL URLWithString:@"test://"];  //注意这里的URL要写成你在对应的拉起的App中设置的URL Scheme
    __unused BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:urlScheme];
    [[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:^(BOOL success) {
        //
    }];
}

此时我们运行我们的App,并且执行点击逻辑,但是并不能拉起我们的App,并且canOpenURL返回的也是false。

这是因为在IOS9之后,IOS提供了白名单,只有在白名单里的App才能被拉起,因此,我们还需要把我们要拉起的App加入白名单。

接下来我们把要拉起的App加入白名单:

android开发微信跳转app app唤起微信再跳转到url_android开发微信跳转app_07


加入白名单后,我们再次点击黄色方框:

android开发微信跳转app app唤起微信再跳转到url_Scheme_08


设置断点观察:

android开发微信跳转app app唤起微信再跳转到url_App_09


可以看到canOpenURL返回YES,并且成功拉起TestScheme App。