W pliku info.plist skonfigurowałem URL Identifier
i URL Scheme
udało mi się. Mogę również otworzyć aplikację przy użyciu niestandardowego adresu URL. Problem polega na tym, że aplikacja uruchamia się po raz pierwszy
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
Mam pewne funkcje zależne od powyższej metody. Więc kiedy aplikacja uruchamia się po raz pierwszy, nie widzę niczego w mojej aplikacji.
Również dodałem kod w metodzie
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
ale dostaję adres URL jako zero tutaj.
Jeśli jednak moja aplikacja działa w tle i trafię w adres URL, powyższe metody wywołują pomyślnie i zależna funkcjonalność działa poprawnie. Poniżej znajduje się mój kod dotyczący scene(_:openURLContexts:)
metody w 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()
}
Czy ktoś może mi powiedzieć, dlaczego po raz pierwszy powyżej metody nie wywołuje?
iphone
ios13
swift5
custom-scheme-url
iPhone
źródło
źródło
Odpowiedzi:
Może to pomoże twojej sytuacji.
źródło
Miałem ten sam problem, a metoda
scene(_ scene:, continue userActivity:)
została wywołana tylko wtedy, gdy aplikacja jest otwarta.Kiedy sprawdziłem
connectionOptions
przekazaną metodęscene(_ scene:, willConnectTo session, options connectionOptions:)
, miała aktywność użytkownika z oczekiwanym adresem URL. Ostatecznie ręcznie wywołałem pierwszą metodę:źródło