Firebase Dynamic Link无法在应用启动时运行

时间:2018-09-19 06:45:17

标签: ios swift firebase firebase-dynamic-links

我创建了一个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 个答案:

答案 0 :(得分:2)

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

来自Apple Documentation

  

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

     

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

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

来自Apple Documentation

  

应用程序(_:didFinishLaunchingWithOptions:)

     

使用此方法完成应用的初始化并进行最后的调整。在状态恢复发生之后但在您的应用程序窗口和其他UI出现之前,将调用此方法。

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

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
}

希望它对您有帮助。