处理 Facebook App Links 的冷启动 iOS SDK V4.1

Handling cold start for App Links for Facebook iOS SDK V4.1

这是在 AppDelegate 中实现的

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

我的应用程序 Link 带有一些在 Facebook 上共享的参数。如果我的应用程序最小化,单击 Facebook 上的 link 会打开我的应用程序并调用函数

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool

就像它应该发生的那样。

问题 是如果我的应用程序终止(未最小化)单击 Facebook 上的 link 会打开我的应用程序但未调用函数,因此我无法处理输入参数.

我在 Facebook 文档中找到了一些关于处理冷启动的信息,但该信息已过时。

我是不是漏掉了什么要实现的东西,还是 Facebook 的错误?

这件事让我困惑了一段时间...

当您打开一个应用程序 link 而该应用程序当前未 运行 时,该应用程序将启动并首先调用 application:didFinishLaunchingWithOptions。如果您在此方法中 return true ,那么它将随后调用 application:openURL:sourceApplication:annotation: 并传入适当的参数。但是,如果 application:didFinishLaunchingWithOptions returns false,则永远不会调用 application:openURL:sourceApplication:annotation:

如果您使用的是 FBSDK,那么您将调用

return FBSDKApplicationDelegate.sharedInstance().application(application,
didFinishLaunchingWithOptions: launchOptions)

在你的 application:didFinishLaunchingWithOptions 结束时。如果您查看他们的文档,它会声明 returns

YES if the url was intended for the Facebook SDK, NO if not.

因此,由于您的应用link 不适用于 FBSDK,因此它 returning false。但是,键 UIApplicationLaunchOptionsURLKeyUIApplicationLaunchOptionsSourceApplicationKey 在您的 launchOptions 中可用。在你的 application:didFinishLaunchingWithOptions 中,如果你调用

if let url = launchOptions?[UIApplicationLaunchOptionsURLKey] as? NSURL,
  sourceApplication = launchOptions?[UIApplicationLaunchOptionsSourceApplicationKey] as? String {      
   self.application(application, openURL: url, sourceApplication: sourceApplication, annotation: nil) 
}

那你就可以绕过它了。我不确定您是否应该手动调用 AppDelegate 方法,但这对我有用。