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!
3 Réponses :
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.
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 }
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.
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 }
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.
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 } } } }
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