【问题标题】:iOS Firebase Dynamic link not handled on cold start iOS 14冷启动 iOS 14 时未处理 iOS Firebase 动态链接
【发布时间】:2020-11-01 02:21:36
【问题描述】:

在我的设备上打开动态链接时,我在 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)
            }
        }
    }
}

非常感谢任何帮助理解这个问题!

【问题讨论】:

    标签: ios swiftui firebase-dynamic-links ios14


    【解决方案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)
                }
            }
        }
    

    【讨论】:

    • 您可以在这里很好地找到更多详细信息。 medium.com/firebase-developers/…
    • 我把它放在我的内容视图中的一些视图上,但它从来没有用过,我确实在内容视图中导入了 Firebase
    • 你设置了“关联域”,然后请在闭包内打断点并检查一下。
    • 在发布问题之前两者都已经完成
    • 原因可能是你在使用 UIKIt app delegate 生命周期,尝试使用 SwiftUI app生命周期
    【解决方案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)
                    }
                }
            }
         }
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 2018-01-22
      • 2021-08-07
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2020-06-02
      相关资源
      最近更新 更多