Приложение открывается каждый раз, но .onOpenURL не вызывается последовательно — иногда оно срабатывает, иногда нет.
Код виджета
Код: Выделить всё
Link(destination: makeBMILink(entry: entry)) {
resultView
}
.buttonStyle(.plain)
Код: Выделить всё
func makeBMILink(entry: MyWidgetEntry) -> URL {
var components = URLComponents()
components.scheme = "myapp"
components.host = "calcwidget"
components.queryItems = [
URLQueryItem(name: "weidgetType", value: CalcConvertType.BMI.rawValue),
URLQueryItem(name: "gender", value: entry.data?.bmiGender ?? ""),
URLQueryItem(name: "weight", value: entry.data?.bmiWeight ?? "0"),
URLQueryItem(name: "height", value: entry.data?.bmiHeight ?? "0"),
URLQueryItem(name: "age", value: entry.data?.bmiAge ?? "0")
]
return components.url!
}
Код: Выделить всё
.onOpenURL { url in
if url.host == "calcwidget" {
print("onOpenURL called:", url)
// Handle widget deep link
}
}
Нажатие на виджет всегда открывает приложение
Но .onOpenURL:
Это происходит особенно, когда:
повторное открытие приложения из виджета
Приложение уже работает в фоновом/активном режиме
Нет сбоев, нет недействительных URL-адресов
Что я проверил
Схема URL-адресов зарегистрирована правильно
Код: Выделить всё
Link(destination:)Используется URL-адрес действителен (проверен путем регистрации)
Код: Выделить всё
.onOpenURLОдин и тот же URL-адрес иногда работает, иногда нет.
Вопрос
Почему .onOpenURL не срабатывает каждый раз при открытии приложения из виджета с помощью Link(destination:), даже если приложение открывается успешно?
Это ожидаемое поведение в SwiftUI/WidgetKit, или я что-то упускаю при обработке состояния?
Что я ищу
Объяснение того, почему .onOpenURL может не срабатывать
Влияет ли повторное открытие с одним и тем же URL-адресом на доставку
Рекомендации по надежной обработке глубоких ссылок виджета в SwiftUI
Подробнее здесь: https://stackoverflow.com/questions/798 ... using-link
Мобильная версия