open app ios swift xcode openurl

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")

Source


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:

Source

Créditos: Keith Harrison (useyourloaf.com)