#ios #swiftui #firebase-dynamic-links #ios14
#iOS #swiftui #firebase-dynamic-links #ios14
Вопрос:
При открытии динамических ссылок на моем устройстве моя функция в SceneDelegate, которая обрабатывает динамические ссылки, работает нормально, пока приложение работает в фоновом режиме, но не тогда, когда приложение полностью отключено. Когда я нажимаю динамическую ссылку, когда приложение выключено, приложение открывается, но динамическая ссылка не обрабатывается. Моя функция делегирования сцены выглядит следующим образом:
Функция удаления сцены
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard let _ = (scene as? UIWindowScene) else { return }
if let incomingURL = userActivity.webpageURL {
print("Incoming URL is (incomingURL)")
_ = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamicLink, error) in
guard error == nil else{
print("Found an error! (error!.localizedDescription)")
return
}
if let dynamicLink = dynamicLink {
self.handleIncomingDynamicLink(dynamicLink)
}
}
}
}
любая помощь в понимании этой проблемы очень ценится!
Ответ №1:
Поскольку ваша цель — iOS 14, вы можете использовать новейшие API, поэтому вы можете использовать .onOpenURL()
модификатор в любом представлении.
.onOpenURL { url in
_ = DynamicLinks.dynamicLinks().handleUniversalLink(url) { (dynamicLink, error) in
guard error == nil else{
print("Found an error! (error!.localizedDescription)")
return
}
if let dynamicLink = dynamicLink {
self.handleIncomingDynamicLink(dynamicLink)
}
}
}
Комментарии:
1. вы можете найти более подробную информацию здесь. medium.com/firebase-developers /…
2. Я поместил это в некоторые представления внутри моего представления содержимого, и это никогда не работает, у меня также есть Firebase, импортированный в представление содержимого
3. вы установили «Связанные домены», а затем, пожалуйста, установите точку останова внутри замыкания и выполните проверку.
4. Оба уже были выполнены до публикации вопроса
5. причина может быть в том, что вы используете жизненный цикл делегирования приложений UIKit, попробуйте использовать жизненный цикл приложения SwiftUI
Ответ №2:
У меня была такая же проблема, но я использовал решение, предложенное @Yodagama, и оно работает абсолютно нормально. В моем случае я загружаю динамическую ссылку firebase. Единственная проблема, с которой я сталкиваюсь, заключается в том, что если у пользователя не установлено приложение, ссылка сначала перенаправляет вас в Apple Store для ее загрузки, и как только она у вас есть, вам нужно снова открыть ссылку, чтобы выполнить эту функцию.
Я помещаю свой код здесь, надеюсь, это кому-нибудь поможет:
import SwiftUI
import Firebase
@main
struct Universal_Link_SwiftUI2_0App: App {
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
ContentView().onOpenURL { url in
_ = DynamicLinks.dynamicLinks().handleUniversalLink(url) { (dynamicLink, error) in
guard error == nil else{
print("Found an error! (error!.localizedDescription)")
return
}
if let dynamicLink = dynamicLink {
self.handleIncomingDynamicLink(dynamicLink)
}
}
}
}
}