В файле info.plist я настроен URL Identifier
и URL Scheme
успешно. Также я могу открыть приложение, используя пользовательский URL. Проблема в том, когда приложение запускает метод в первый раз
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
У меня есть некоторые зависимые функции, основанные на вышеуказанном методе. Поэтому, когда приложение запускается в первый раз, я ничего не вижу в своем приложении.
Также я добавил код в метод
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
но я получаю URL как ноль здесь.
Однако, если мое приложение находится в фоновом режиме, и я нажимаю URL, то вышеупомянутые вызовы метода успешно, и зависимая функциональность работает нормально. Ниже приведен мой код scene(_:openURLContexts:)
метода в 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()
}
Может кто-нибудь сказать мне, почему первый раз выше метод не вызывает?
iphone
ios13
swift5
custom-scheme-url
iPhone
источник
источник
Ответы:
Может быть, это поможет вашей ситуации.
источник
У меня была такая же проблема, и метод
scene(_ scene:, continue userActivity:)
вызывался только когда приложение открыто.Когда я проверил
connectionOptions
переданный методу метод, уscene(_ scene:, willConnectTo session, options connectionOptions:)
него была активность пользователя с ожидаемым URL. Итак, я закончил вызывать первый метод вручную:источник