2

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!

PGDev
  • 23,751
  • 6
  • 34
  • 88

4 Answers4

4

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.

enter image description here


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)
}
PGDev
  • 23,751
  • 6
  • 34
  • 88
1

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
                }
        }
    }
}
chikko
  • 416
  • 5
  • 9
  • So many thanks to you that this is the only correct answer for me that resolved why my application method is not being called. Days wasted. – Peach Jul 16 '22 at 21:49
0

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
    }
Maulik Pandya
  • 2,200
  • 17
  • 26
0

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 {
     ...
  }
}
davidbaraff
  • 181
  • 1
  • 6