Firebase 动态链接在应用启动时不起作用

Posted

技术标签:

【中文标题】Firebase 动态链接在应用启动时不起作用【英文标题】:Firebase Dynamic Link not working on the app launch 【发布时间】:2018-09-19 06:45:16 【问题描述】:

我创建了一个dynamic link,单击它会打开应用程序。该链接还包含打开特定页面的键。这是我的代码:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool 
    return self.handleFirebaseDynamicLink(userActivity: userActivity)

这在应用程序在后台运行时有效。但是我还需要动态链接来检查URL并在第一次启动时打开指定的页面。我该怎么做才能解决这个问题?

我在这里找到了一个可接受的答案:Firebase Dynamic Link not working if app is CLOSED 但不幸的是,我无法理解这意味着什么,我无法评论这个答案。

【问题讨论】:

【参考方案1】:

application(_:continue:restorationHandler:) 调用您的 handleFirebaseDynamicLink 方法,这就是问题所在。

来自Apple Documentation:

应用程序(_:continue:restorationHandler:)

应用程序在收到与用户活动相关的数据时调用此方法。使用存储在 NSUserActivity 对象中的数据来重新创建用户的活动。此方法是您更新应用程序以执行相关任务的机会。

因此,仅当您的应用程序为 Suspended 并且由于 NSUserActivity 而再次变为 Active 时,才会调用此方法。如果要在应用程序启动时处理数据,则需要使用另一种方法,即当您的应用程序从Not running 变为Active 时调用。这是application(_:didFinishLaunchingWithOptions:) 方法。 Here您可以阅读有关应用生命周期的更多信息。

来自Apple Documentation:

应用程序(_:didFinishLaunchingWithOptions:)

使用此方法完成应用的初始化并进行任何最终调整。此方法在状态恢复后但在您的应用的窗口和其他 UI 呈现之前调用。

这就是您提供的答案中所说的。您需要做的就是在AppDelegate 使用此方法处理初始数据。您可以使用以下代码从launchOptions 中提取您的NSUserActivity

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    let activityKey = NSString(string: "UIApplicationLaunchOptionsUserActivityKey")
    if let userActivityDict = launchOptions?[.userActivityDictionary] as? [NSObject : AnyObject],
       let userActivity = userActivityDict[key] as? NSUserActivity 
        return self.handleFirebaseDynamicLink(userActivity: userActivity)
    
    return true

希望对你有所帮助。

【讨论】:

以上是关于Firebase 动态链接在应用启动时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当动态链接具有自定义子域时,Firebase 动态链接在 iOS 上不起作用

当应用程序已在运行且使用 Firebase 动态链接时导航不起作用

Firebase 动态链接在 iOS 上不起作用

Firebase 动态链接,不起作用

Firebase 动态链接在 safari swift 中不起作用

Swift Firebase 动态链接:shortenURL 不起作用