In der Datei info.plist habe ich konfiguriert URL Identifier
und URL Scheme
erfolgreich. Außerdem kann ich die App über eine benutzerdefinierte URL öffnen. Das Problem ist, wenn die App die Methode zum ersten Mal startet
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
Ich habe einige abhängige Funktionen basierend auf der obigen Methode. Wenn die App zum ersten Mal gestartet wird, kann ich nichts in meiner App sehen.
Außerdem habe ich Code in Methode hinzugefügt
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
aber ich bekomme hier keine URL.
Wenn sich meine App jedoch im Hintergrundmodus befindet und ich auf URL drücke, werden die oben genannten Methoden erfolgreich aufgerufen und die abhängigen Funktionen funktionieren einwandfrei. Es folgt mein Code zur scene(_:openURLContexts:)
Methode in sceneDelegate
.
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){
let url = URLContexts.first?.url
let urlString: String = url!.absoluteString
if let urlComponents = URLComponents(string: urlString),let queryItems = urlComponents.queryItems {
queryParams = queryItems
} else {
print("invalid url")
}
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
//self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let rootVC = storyboard.instantiateViewController(identifier: "LocationViewIdentifier") as? UIViewController else {
print("ViewController not found")
return
}
let rootNC = UINavigationController(rootViewController: rootVC)
self.window?.rootViewController = rootNC
self.window?.makeKeyAndVisible()
}
Kann mir jemand sagen, warum das erste Mal oben keine Methode aufruft?
quelle
Antworten:
Vielleicht hilft das Ihrer Situation.
quelle
Ich hatte das gleiche Problem und die Methode
scene(_ scene:, continue userActivity:)
wurde nur aufgerufen, wenn die App geöffnet ist.Als ich die
connectionOptions
an die Methode übergebene überprüftescene(_ scene:, willConnectTo session, options connectionOptions:)
, hatte sie eine Benutzeraktivität mit der erwarteten URL. Also habe ich die erste Methode manuell aufgerufen:quelle