#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?