我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:
那么IOS是如何实现App之间的跳转呢?今天就来学习一下。
URL Scheme:
IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。
其拉起的格式如下:
比如我们想拉起微信,可以在浏览器页面输入:weixin://
就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。
接下来我就演示一下如何在Safari浏览器中拉起我自己创建的一个App。
要让App支持被拉起,首先我们需要在URL Types中设置该App的URL Scheme。
如图,我设置自己的App的URL Scheme为Sample。
接下来我在模拟器中进行试验:输入Sample://
模拟器就会跳出是否拉起App的窗口,选择Open,就可以实现跳转了。
这里需要强调一下,如果我们将自己App的URL Scheme设置为weixin,并在Safari浏览器中输入weixin://,浏览器依旧会打开我们的App,这就为一些不法分子提供了机会,利用打开微信等人们App的链接,而实际上跳转到的页面很可能是非法的链接。
以上展示了使用Safari唤起我的App,那么如何使用我自己的App唤起别的App呢?接下来就演示一下。
两个App之间的唤起:
如图,模拟器中,使用左边的App拉起右边的App。
首先我需要设置我要拉起的App的URL Scheme,此处设置为TestScheme
接着我在我自己的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加入白名单:
加入白名单后,我们再次点击黄色方框:
设置断点观察:
可以看到canOpenURL返回YES,并且成功拉起TestScheme App。