Reputation: 97
When I open my application through myapp://param1=abc
the open url function is not called.
I've added functions didFinishLaunchingWithOptions
and willFinishLaunchingWithOptions
to make it true
, as the Apple documentation says, but it's still not called. The application opens perfectly, but not calling the function open url I can not get the param1
This is my AppDelegate
file:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
return true
}
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
return true
}
func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// Here doesn't come! :(
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
Any idea what might be going on?
Thanks!
Upvotes: 2
Views: 5834
Reputation: 191
You can find the launch URL as follows:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let url = connectionOptions.urlContexts.first {
...
}
}
Upvotes: 0
Reputation: 416
Since iOS 14 you can use deep links instead:
struct ShapifyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onOpenURL { url in
//Whatever you need to do goes here
}
}
}
}
Upvotes: 1
Reputation: 24341
The signature of openUrl
method in AppDelegate
is updated to,
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
You need to add your urlScheme
in the URL Types under Info tab in project settings, i.e.
For Swift-5 and iOS-13:
In SceneDelegate.swift
file, you need to implement the below method to handle urlSchemes
, i.e.
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
print(URLContexts)
}
Upvotes: 4
Reputation: 2230
application(_ application: UIApplication, open url
will not call at the time of app launch. you need to access the launchOptions: [UIApplication.LaunchOptionsKey: Any]
and your url with the help of [UIApplication.LaunchOptionsKey.url]
Here is the snippet that might help you
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let url = launchOptions![UIApplication.LaunchOptionsKey.url]
...
return true
}
Upvotes: 0