SwiftUI .onOpenURL не вызывается каждый раз при открытии приложения из виджета с использованием ссылки (пункт назначенияIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI .onOpenURL не вызывается каждый раз при открытии приложения из виджета с использованием ссылки (пункт назначения

Сообщение Anonymous »

Я открываю свое приложение из виджета, используя собственную схему URL-адресов.
Приложение открывается каждый раз, но .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!
}

Сторона приложения (SwiftUI)

Код: Выделить всё

.onOpenURL { url in
if url.host == "calcwidget" {
print("onOpenURL called:", url)
// Handle widget deep link
}
}

Наблюдаемое поведение
Нажатие на виджет всегда открывает приложение
Но .onOpenURL:
✅ иногда вызывается
❌ иногда НЕ вызывается
Это происходит особенно, когда:
повторное открытие приложения из виджета
Приложение уже работает в фоновом/активном режиме
Нет сбоев, нет недействительных URL-адресов
Что я проверил
Схема URL-адресов зарегистрирована правильно

Код: Выделить всё

Link(destination:)Используется 
(не кнопка)
URL-адрес действителен (проверен путем регистрации)

Код: Выделить всё

.onOpenURL
прикреплен к видимому представлению SwiftUI.
Один и тот же URL-адрес иногда работает, иногда нет.
Вопрос
Почему .onOpenURL не срабатывает каждый раз при открытии приложения из виджета с помощью Link(destination:), даже если приложение открывается успешно?
Это ожидаемое поведение в SwiftUI/WidgetKit, или я что-то упускаю при обработке состояния?
Что я ищу
Объяснение того, почему .onOpenURL может не срабатывать
Влияет ли повторное открытие с одним и тем же URL-адресом на доставку
Рекомендации по надежной обработке глубоких ссылок виджета в SwiftUI

Подробнее здесь: https://stackoverflow.com/questions/798 ... using-link
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»