作为UIApplication单例对象的方法 openURL方法的变化
作为UIApplication单例对象的方法 openURL:
在iOS开发中经常用来实现在当前应用打开外部链接的需求比如跳转到其他应用,跳转应用隐私设置界面;还有相关API canOpenURL:
进行跳转前判断.而这个古老(iOS2时出现)的 openURL
方法将被现今iOS10出现的新API openURL:options:completionHandler:
所替代.
虽然关于该API的官方文档补充完全,但所提供的信息足够能让开发者简单了解使用最新API打开外部链接的API究有何异同.
新API的官方描述
首先来看官方文档对iOS10的 What’s New in iOS UIKit部分对新API的描述
The new UIApplication method openURL:options:completionHandler:, which is executed asynchronously and calls the specified completion handler on the main queue (this method replaces openURL:).
这段话清楚地指明了新API的两个特点:异步执行open操作和主线程执行回调.
新API的代码描述
接下来再看看具体的接口代码,可以看出判断链接打开是否成功的方式也从以前的根据 openURL
调用return的布尔值变成了查询completion的success参数;
// old
- (BOOL)openURL:(NSURL*)url
// new
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion
并且额外地提供了一个用来URL处理的options字典参数,没有限定值时就要传空字典,就像下方代码一样调用.
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
options目前可传入参数Key在UIApplication头文件只有一个:UIApplicationOpenURLOptionUniversalLinksOnly,其对应的Value为布尔值,默认为False.
如该Key对应的Value为True,那么打开所传入的Universal Link时,只允许通过这个Link所代表的iOS应用跳转的方式打开这个链接,否则就会返回success为false,
也就是说只有安装了Link所对应的App的情况下才能打开这个Universal Link,而不是通过启动Safari方式打开这个Link的代表的网站.
[application openURL:URL options:@{UIApplicationOpenURLOptionUniversalLinksOnly : @YES} completionHandler:nil];