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 动态链接时导航不起作用