首页 > 解决方案 > Firebase 动态链接在应用启动时不起作用

问题描述

我创建了一个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 但不幸的是,我不明白这是什么意思,我无法评论这个答案。

标签: iosswiftfirebasefirebase-dynamic-links

解决方案


你只从这里调用你的handleFirebaseDynamicLink方法就是问题所在。application(_:continue:restorationHandler:)

来自苹果文档

应用程序(_:继续:恢复处理程序:)

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

因此,仅当您的Suspended应用Active因为NSUserActivity. 如果要在应用程序启动时处理数据,则需要使用另一种方法,即在您的应用程序ActiveNot running. 这就是application(_:didFinishLaunchingWithOptions:)方法。在这里,您可以阅读有关应用程序生命周期的更多信息。

来自苹果文档

应用程序(_: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
}

希望它可以帮助你。


推荐阅读