Динамическая ссылка на Firebase iOS не обрабатывается при холодном запуске iOS 14

#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)
                }
            }
        }
     }
   }