Глубокая ссылка iOS из виджета при закрытии приложения?

#ios #swift #widget #deep-linking

#iOS #swift #виджет #глубокая ссылка

Вопрос:

В моем виджете есть несколько ссылок, которые пользователь может щелкнуть, ссылки настроены следующим образом:

 Link(destination: URL(string: "widget://start")!)
 

Теперь я могу определить нажатие в делегате сцены со следующей функцией:

     func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    if let item = URLContexts.first {
        UserDefaults.standard.set(item.url.absoluteString, forKey: "URL")
        print(item.url)
        print(URLContexts)
    }
}
 

Однако это не работает, когда приложение закрыто. Я попытался поместить этот блок кода везде, делегировать сцену, делегировать приложение, но я просто не могу найти решение о том, как обнаружить нажатие, когда приложение закрыто.
Есть ли способ сделать это?

Ответ №1:

Добавьте это

   func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let _ = (scene as? UIWindowScene) else { return }
        
        DispatchQueue.main.asyncAfter(deadline: .now()   0.5) {
            if let item = connectionOptions.urlContexts.first {
                UserDefaults.standard.set(item.url.absoluteString, forKey: "URL")
                print(item.url)
                print(URLContexts)
            }
        }
    }
 

Для тех, кто использует только AppDelegate

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        if let userActDic = launchOptions?[UIApplication.LaunchOptionsKey.userActivityDictionary] as? [String: Any],
           let userActivity  = userActDic["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity {
            // Do with user activity
        }
    }
 

Комментарии:

1. есть ли решение для тех, у кого есть только AppDelegate?