openURL:在 iOS 10 中已弃用
openURL: deprecated in iOS 10
Apple iOS 10 已弃用 openURL: for openURL:option:completionHandler
如果我有:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]];
会变成怎样? options:<#(nonnull NSDictionary<NSString *,id> *)#>
详细
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"] options:<#(nonnull NSDictionary<NSString *,id> *)#> completionHandler:nil];
谢谢
更新
options:@{}
对于没有键和值的空字典
http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl/
这样写。
处理完成处理程序
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://www.google.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
不处理completionHandler
[application openURL:URL options:@{} completionHandler:nil];
Apple 引入了 openURL:
方法作为使用 iOS 打开外部 link 的方法 2. 相关功能 canOpenURL:
在 [=74] 中获得了一些隐私控制=] 9 阻止您查询设备中已安装的应用程序。现在 iOS 10 Apple 已经弃用了 openURL:options:completionHandler:
的普通旧 openURL
。
这是我的快速指南,告诉您使用 iOS 10.
打开外部 link 需要了解的内容
现在已弃用的方法只有一个参数用于 URL 打开和 returns 一个布尔值来报告成功或失败:
// Objective-C
- (BOOL)openURL:(NSURL*)url
// Swift
open func canOpenURL(_ url: URL) -> Bool
iOS10 中的新方法:
// 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:
.
- 在主队列上调用的完成处理程序
成功。如果您对状态不感兴趣,则可为空。
打开 URL 与 iOS 10
如果你有一个只有 iOS 10 的应用程序,这意味着什么,不关心选项和完成状态,只想停止 Xcode 抱怨:
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
在实践中,只要您仍然支持 iOS 9 或更早版本,您就会希望回退到普通的旧 openURL
方法。让我们看一个示例,其中执行此操作并使用完成处理程序来检查打开的状态:
首先是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) {
if let url = URL(string: scheme) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:],
completionHandler: {
(success) in
print("Open \(scheme): \(success)")
})
} else {
let success = UIApplication.shared.openURL(url)
print("Open \(scheme): \(success)")
}
}
}
// Typical usage
open(scheme: "tweetbot://timeline")
选项
UIApplication
头文件列出了选项字典的单个键:
UIApplicationOpenURLOptionUniversalLinksOnly
:如果 URL 是一个有效的通用 link 且应用程序配置为打开它,则使用设置为真 (YES) 的布尔值来打开它。如果没有配置应用程序或用户禁止使用它打开 link,则调用完成处理程序时使用 false (NO)。
要覆盖默认行为,请创建一个键设置为 true (YES) 的字典,并将其作为选项参数传递:
// Objective-C
NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
[application openURL:URL options:options completionHandler:nil];
// Swift
let options = [UIApplicationOpenURLOptionUniversalLinksOnly : true]
UIApplication.shared.open(url, options: options, completionHandler: nil)
例如,如果我将其设置为 true 并尝试打开 URL https://twitter.com/kharrison,如果我没有安装 Twitter 应用程序而不是打开 link,它将失败在 Safari 中。
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
// In Xcode 9 and iOS 11
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://facebook.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
打开应用程序设置(Objective-c)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
options:@{}
completionHandler:^(BOOL success) {
}];
- Tested in iOS 12
Swift 5.0.1 及以上
UIApplication.shared.open(URL.init(string: UIApplication.openSettingsURLString)!)
Apple iOS 10 已弃用 openURL: for openURL:option:completionHandler
如果我有:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]];
会变成怎样? options:<#(nonnull NSDictionary<NSString *,id> *)#>
详细
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"] options:<#(nonnull NSDictionary<NSString *,id> *)#> completionHandler:nil];
谢谢
更新
options:@{}
对于没有键和值的空字典
http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl/
这样写。
处理完成处理程序
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://www.google.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
不处理completionHandler
[application openURL:URL options:@{} completionHandler:nil];
Apple 引入了 openURL:
方法作为使用 iOS 打开外部 link 的方法 2. 相关功能 canOpenURL:
在 [=74] 中获得了一些隐私控制=] 9 阻止您查询设备中已安装的应用程序。现在 iOS 10 Apple 已经弃用了 openURL:options:completionHandler:
的普通旧 openURL
。
这是我的快速指南,告诉您使用 iOS 10.
打开外部 link 需要了解的内容现在已弃用的方法只有一个参数用于 URL 打开和 returns 一个布尔值来报告成功或失败:
// Objective-C
- (BOOL)openURL:(NSURL*)url
// Swift
open func canOpenURL(_ url: URL) -> Bool
iOS10 中的新方法:
// 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:
. - 在主队列上调用的完成处理程序 成功。如果您对状态不感兴趣,则可为空。
打开 URL 与 iOS 10
如果你有一个只有 iOS 10 的应用程序,这意味着什么,不关心选项和完成状态,只想停止 Xcode 抱怨:
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
在实践中,只要您仍然支持 iOS 9 或更早版本,您就会希望回退到普通的旧 openURL
方法。让我们看一个示例,其中执行此操作并使用完成处理程序来检查打开的状态:
首先是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) {
if let url = URL(string: scheme) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:],
completionHandler: {
(success) in
print("Open \(scheme): \(success)")
})
} else {
let success = UIApplication.shared.openURL(url)
print("Open \(scheme): \(success)")
}
}
}
// Typical usage
open(scheme: "tweetbot://timeline")
选项
UIApplication
头文件列出了选项字典的单个键:
UIApplicationOpenURLOptionUniversalLinksOnly
:如果 URL 是一个有效的通用 link 且应用程序配置为打开它,则使用设置为真 (YES) 的布尔值来打开它。如果没有配置应用程序或用户禁止使用它打开 link,则调用完成处理程序时使用 false (NO)。
要覆盖默认行为,请创建一个键设置为 true (YES) 的字典,并将其作为选项参数传递:
// Objective-C
NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
[application openURL:URL options:options completionHandler:nil];
// Swift
let options = [UIApplicationOpenURLOptionUniversalLinksOnly : true]
UIApplication.shared.open(url, options: options, completionHandler: nil)
例如,如果我将其设置为 true 并尝试打开 URL https://twitter.com/kharrison,如果我没有安装 Twitter 应用程序而不是打开 link,它将失败在 Safari 中。
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
// In Xcode 9 and iOS 11
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://facebook.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
打开应用程序设置(Objective-c)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
options:@{}
completionHandler:^(BOOL success) {
}];
- Tested in iOS 12
Swift 5.0.1 及以上
UIApplication.shared.open(URL.init(string: UIApplication.openSettingsURLString)!)