iOS Firebase Dynamic link 冷启动时未处理 iOS 14

iOS Firebase Dynamic link not handled on cold start iOS 14

在我的设备上打开动态 links 时,我在 SceneDelegate 中处理动态 links 的函数运行正常,而应用程序在后台 运行 但当应用程序处于 运行 时完全关闭。当我在应用程序关闭时单击动态 link 时,应用程序打开但动态 link 未被处理。我的场景委托函数如下所示:

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

我遇到了同样的问题,但我使用了@Yodagama 提出的解决方案并且效果很好。在我的例子中,我正在加载一个 firebase 动态 link。我面临的唯一问题是,如果用户没有安装该应用程序,link 首先将您重定向到苹果商店下载它,一旦您拥有它,您必须再次打开 link为了执行功能。

我把我的代码放在这里,希望它能帮助别人:

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