0
votes

openURL n'est pas appelé lorsque je lance l'application à partir de l'URL du schéma (projet Swift)

Lorsque j'ouvre mon application via myapp://param1=abc la fonction open url n'est pas appelée.

J'ai ajouté les fonctions didFinishLaunchingWithOptions et willFinishLaunchingWithOptions pour que cela soit true , comme le dit la documentation Apple, mais cela n'est toujours pas appelé. L'application s'ouvre parfaitement, mais n'appelant pas la fonction open url je ne peux pas obtenir le param1

Ceci est mon fichier AppDelegate :

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.
    }
}

Une idée de ce qui pourrait se passer?

Merci!


5 commentaires

Vous devrez vérifier le dictionnaire launchOptions dans didFinishLaunchingWithOptions ().


Avez-vous ajouté l'urlScheme dans info.plist?


Le dictionnaire @Jitendra launchOption dans didFinishLaunchingWithOptions () est nul.


@PGDev J'ai ajouté urlScheme dans info.plist


Est-ce que cela répond à votre question? La méthode 'application: openURL: options:' n'est pas appelée


3 Réponses :


2
votes

La signature de openUrl procédé AppDelegate est mis à jour,

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    print(URLContexts)
}

Vous devez ajouter votre urlScheme dans les types d'URL sous l'onglet Info dans les paramètres du projet, c.-à-d.

entrez la description de l'image ici


Pour Swift-5 et iOS-13:

Dans le fichier SceneDelegate.swift , vous devez implémenter la méthode ci-dessous pour gérer les urlSchemes , c'est-à-dire

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


9 commentaires

J'avais déjà ajouté mon urlSchema. L'URL ouvre bien l'application mais n'appelle pas la fonction pour obtenir les paramètres


Avez-vous essayé de mettre le point d'arrêt là-bas? Parce que ça marche bien de mon côté.


Si cela ne fonctionne toujours pas, essayez de mettre en œuvre la même chose dans un tout nouveau projet et voyez si cela fonctionne.


J'ai créé un nouveau projet et tout ce que j'ai fait a été d'ajouter la fonction openURL et j'ai ajouté les types d'url et cela ne fonctionne pas.


Ouvrez myapp: // de safari et voyez si cela fonctionne.


Lorsque vous ouvrez myapp: // à partir de safari, l'application s'ouvre mais la fonction d'URL ouverte n'est pas appelée


Quelle version iOS et Swift utilisez-vous?


ios13 et swift 5


Mise à jour de la réponse pour Swift-5 et iOS-13.



0
votes

application(_ application: UIApplication, open url ne sera pas appelée au moment du lancement de l'application. vous devez accéder à launchOptions: [UIApplication.LaunchOptionsKey: Any] et à votre URL à l'aide de [UIApplication.LaunchOptionsKey.url]

Voici l'extrait qui pourrait vous aider

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        let url = launchOptions![UIApplication.LaunchOptionsKey.url]
        ...

        return true
    }


2 commentaires

launchOptions est toujours nul


Une mise à jour pour ceci? Je vois le même problème; Le gestionnaire d'url ouvert n'est pas appelé au moment du lancement de l'application et les options launchOptions sont nulles.



0
votes

Depuis iOS 14, vous pouvez utiliser des liens profonds à la place:

struct ShapifyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    //Whatever you need to do goes here
                }
        }
    }
}


0 commentaires