No arquivo info.plist eu configurei URL Identifier
e com URL Scheme
sucesso. Também sou capaz de abrir o aplicativo usando URL personalizado. O problema é quando o aplicativo inicia pela primeira vez o método
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
Eu tenho algumas funcionalidades dependentes baseadas no método acima. Portanto, quando o aplicativo é iniciado pela primeira vez, não consigo ver nada no meu aplicativo.
Também adicionei código no método
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
mas eu recebo url como nulo aqui.
No entanto, se meu aplicativo estiver no modo de segundo plano e eu clicar na URL, o método acima chama com êxito e a funcionalidade dependente está funcionando bem. A seguir é o meu código no scene(_:openURLContexts:)
método 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()
}
Alguém pode me dizer por que o primeiro método acima não chama?
iphone
ios13
swift5
custom-scheme-url
Iphone
fonte
fonte
Respostas:
Talvez isso ajude a sua situação.
fonte
Eu tive o mesmo problema, e o método
scene(_ scene:, continue userActivity:)
só foi chamado quando o aplicativo está aberto.Quando eu verifiquei o
connectionOptions
passado para o método,scene(_ scene:, willConnectTo session, options connectionOptions:)
ele tinha uma atividade do usuário com o URL esperado. Então, acabei chamando o primeiro método manualmente:fonte