冷启动 iOS 14 时未处理 iOS Firebase 动态链接

Posted

技术标签:

【中文标题】冷启动 iOS 14 时未处理 iOS Firebase 动态链接【英文标题】:iOS Firebase Dynamic link not handled on cold start iOS 14 【发布时间】: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)
            
        
    

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

【问题讨论】:

【参考方案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)
                
            
        
     
   

【讨论】:

以上是关于冷启动 iOS 14 时未处理 iOS Firebase 动态链接的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 动态链接无法从冷启动 - Xcode 11,iOS 13

如何实现 iOS App 的冷启动优化

Xamarin.iOS 应用程序未运行时未处理 Amazon SNS 推送通知

iOS 性能监控方案设计

iOS 性能监控方案设计

iOS 性能监控方案设计