苹果在iOS 2 推出openURL:方法用于打开外部链接,而与之相关的方法 canOpenURL:
在iOS 9隐私控制里也禁止查询设备中已安装的App。
苹果在iOS 10 中已经弃用了openURL:
这个旧方法,用openURL:options:completionHandler:
来代替。
iOS 10中的新方法:
// Objective-C
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion
// Swift
open func open(_ url: URL, options: [String : Any] = [:], completionHandler completion: (@escaping (Bool) -> Swift.Void)? = nil)
它有三个参数:
要打开的URL。
一个可选字典(可参考下面的实例)。传一个空字典时,该方法的效果与 openURL:
一致。
一个带有 成功与否 参数的 completion handler(可认为是闭包或block)。如果你对这个状态不感兴趣可以传Null。
代码实例:
显示 Objective-C代码:
- (void)openScheme:(NSString *)scheme {
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:scheme];
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[application openURL:URL options:@{}
completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",scheme,success);
}];
} else {
BOOL success = [application openURL:URL];
NSLog(@"Open %@: %d",scheme,success);
}
}
// Typical usage
[self openScheme:@"tweetbot://timeline"];
Swift 版代码:
func open(scheme: String) {
ifleturl = URL(string: scheme) {
if#available(iOS 10, *) {
UIApplication.shared.open(url, options: [:], completionHandler: {
(success) in
print("Open \(scheme): \(success)") }
) } else{
letsuccess = UIApplication.shared.openURL(url)
print("Open \(scheme): \(success)")
}
}
}
// Typical usage
open(scheme: "tweetbot://timeline")
参考文章:
链接:https://juejin.im/post/5d26e80bf265da1bca520552
。