Search code examples
iosswiftdeep-linkingurl-scheme

Deep link URL Scheme doesn't call any function in iOS App Delegate


im implementing deep link is iOS. I have configured the URL Scheme in Project-Setting->Info->Url type URL Schemes : carwash role:Viewer

when I type carwash://something the browser asks for opening the application but nothing get called in Application that I handle that what action should occur .

apple documentation says you should override application(open url) in AppDelegate but deep link dosent call it and the application opens in last state

application:openURL:options:' is not being called

this is my code and dose not work

func application(_ app: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    fatalError()
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if let url = launchOptions?[UIApplication.LaunchOptionsKey.url] as? URL {
        /// some
        fatalError()
    }
    GMSServices.provideAPIKey("")

    return true
}

Solution

  • In iOS 13, UIApplication application(_:open:options:) doesn't get called (at least in my case maybe).

    You should override the SceneDelegate functions below instead:

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        if let url = URLContexts.first?.url{
            print(url) 
        }
    }
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // detect the URLContext in the `options:` and deal with it.
    }
    

    If the user taps the link when your app isn't running, scene(_: openURLContexts:) won't be called but scene(_:willConnectTo:options:) will be.