我创建了一个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 但不幸的是,我无法理解它的含义,也无法对此答案发表评论。
答案 0 :(得分:2)
您从handleFirebaseDynamicLink
仅 调用application(_:continue:restorationHandler:)
方法,这就是问题所在。
应用程序(_:continue:restorationHandler:)
应用程序在收到与用户活动相关的数据时调用此方法。使用存储在NSUserActivity对象中的数据来重新创建用户的活动。这种方法是您更新应用程序的机会,以便它可以执行关联的任务。
因此,仅当您的应用为Suspended
并由于Active
而再次变为NSUserActivity
时,才调用此方法。如果要在应用程序启动时处理数据,则需要使用另一种方法,即当您的应用程序从Active
变成Not running
时调用。这是application(_:didFinishLaunchingWithOptions:)
方法。 Here,您可以阅读有关应用程序生命周期的更多信息。
应用程序(_: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
}
希望它对您有帮助。