app - swift open url in browser ios
OpenURL en iOS10 (7)
El nuevo método UIApplication openURL: options: completionHandler :, que se ejecuta de forma asincrónica y llama al controlador de finalización especificado en la cola principal (este método reemplaza a openURL :).
Esto se encuentra en Cambios adicionales del marco > UIKit en: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html
Entonces, aparentemente, OpenURL
se ha depreciado en iOS 10. ¿Alguien tiene alguna documentación sobre por qué o puede explicar qué hacer a continuación? Ya miré en el sitio de Apple y encontré algunas cosas relacionadas con OpenURL y esto es lo que dicen usar ahora:
UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)
¿Alguien tiene alguna evidencia de que esta sea la nueva forma de usar OpenURL en Swift 3.0? Además, ¿qué valores se van a utilizar en las options:
y completionHandler:
parámetros respectivamente?
Primero debe verificar antes de cargar la url. Por favor revisa los códigos a continuación.
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
}];
}
Espero que esto ayude.
Si su aplicación todavía es compatible con iOS 9
o inferior, simplemente siga usando el viejo openURL
. Solo debe pasar al nuevo si su objetivo de implementación es iOS 10
.
También puede usar la verificación condicional si está actualizando su aplicación con el código compatible con 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)")
}
}
}
Uso:
open(scheme: "tweetbot://timeline")
Un diccionario de opciones vacío dará como resultado el mismo comportamiento que openUrl .
De otra manera:
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| 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 |
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
Desde 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
deja real:
[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")
})
Donde xxx e yyy son cadenas que desea imprimir o dejarlas en blanco.
Una solución rápida:
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
Una respuesta completa:
Créditos: Keith Harrison (useyourloaf.com)