[英]OpenURL in iOS10
So apparently OpenURL
has been deprecated in iOS 10. Does anyone have any documentation on why or can explain what to do next? 显然, OpenURL
已经在iOS 10中被弃用。有没有人有任何关于为什么或可以解释下一步做什么的文档? I looked on the Apple site already and found a few things pertaining to OpenURL and this is what they say to use now: 我已经查看了Apple网站,发现了一些与OpenURL有关的内容,这就是他们现在所说的:
UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)
Does anyone have any evidence that this is the new way to use OpenURL in Swift 3.0? 有没有人有证据表明这是在Swift 3.0中使用OpenURL的新方法? In addition what values are to be used in the options:
and completionHandler:
parameters respectively? 另外, options:
中将使用哪些值options:
和completionHandler:
参数?
You can also use conditional check if you are updating you app with iOS10 compatible code: 如果您使用iOS10兼容代码更新应用程序,也可以使用条件检查:
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)")
}
}
}
Usage: 用法:
open(scheme: "tweetbot://timeline")
A quick fix: 快速修复:
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
A complete answer: 一个完整的答案:
http://useyourloaf.com/blog/openurl-deprecated-in-ios10/ http://useyourloaf.com/blog/openurl-deprecated-in-ios10/
Credits: Keith Harrison (useyourloaf.com) 致谢:Keith Harrison(useyourloaf.com)
An empty options dictionary will result in the same behaviour as openUrl . 空选项字典将导致与openUrl相同的行为。
Otherwise: 除此以外:
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| UIApplicationOpenURLOptionsSourceApplicationKey | NSString containing the bundle ID of the originating application |
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| UIApplicationOpenURLOptionsAnnotationKey | property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property |
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| UIApplicationOpenURLOptionsOpenInPlaceKey | bool NSNumber, set to YES if the file needs to be copied before use |
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
From UIApplication.h 来自UIApplication.h
// Options are specified in the section below for openURL options. An empty options dictionary will result in the same
// behavior as the older openURL call, aside from the fact that this is asynchronous and calls the completion handler rather
// than returning a result.
// The completion handler is called on the main queue.
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsSourceApplicationKey NS_SWIFT_NAME(sourceApplication) NS_AVAILABLE_IOS(9_0); // value is an NSString containing the bundle ID of the originating application
UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsAnnotationKey NS_SWIFT_NAME(annotation) NS_AVAILABLE_IOS(9_0); // value is a property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property
UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsOpenInPlaceKey NS_SWIFT_NAME(openInPlace) NS_AVAILABLE_IOS(9_0); // value is a bool NSNumber, set to YES if the file needs to be copied before use
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:). 新的UIApplication方法openURL:options:completionHandler:,它是异步执行的,并在主队列上调用指定的完成处理程序(此方法替换openURL :)。
This is under Additional Framework Changes > UIKit at: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html 这是在其他框架更改 > UIKit下: https : //developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html
You need to do some checking first before loading the url. 在加载网址之前,您需要先进行一些检查。 Please check the codes below. 请检查以下代码。
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"https://www.gmail.com"]]){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.gmail.com"] options:@{} completionHandler:^(BOOL success) {
//completion codes here
}];
}
I hope this helps. 我希望这有帮助。
If your app still support iOS 9
or lower, just keep using the old openURL
. 如果您的应用仍然支持iOS 9
或更低版本,请继续使用旧的openURL
。 You should only move to the new one if your Deployment Target is iOS 10
. 如果您的部署目标是iOS 10
则只应移至新的。
let actual: 让实际:
[String: AnyObject] = ["xxx key": "xxx value" as AnyObject, "yyy key": "yyy value" as AnyObject]
UIApplication.shared.open(URL(string: "http:google.com")!, options: actual, completionHandler: {(true) -> Swift.Void in
print("Refresh")
})
Where xxx and yyy are any string you want to print or leave them blank . 其中xxx和yyy是您要打印的任何字符串或将其留空。
you can use function to open settings: 你可以使用函数来打开设置:
func showAlert(title:String, message:String){
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertController.Style.alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(okAction)
let settingsAction = UIAlertAction(title: "Settings", style: .default, handler: { _ in
// Take the user to Settings app to possibly change permission.
guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { return }
if UIApplication.shared.canOpenURL(settingsUrl) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
// Finished opening URL
})
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(settingsUrl)
}
}
})
alert.addAction(settingsAction)
present(alert, animated: true, completion: nil)
}
Call this function like this given below 如下所示调用此函数
showAlert(title: "Unable to access the Photos", message: "To enable access, go to Settings > Privacy > Photos and turn on Photos access for this app.")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.