0

这是在 AppDelegate 中实现的

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

我有一些在 Facebook 上共享的参数的 App Link。如果我的应用程序被最小化,点击 Facebook 上的链接会打开我的应用程序并调用函数

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

就像它应该发生的那样。

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

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

我错过了要实现的东西还是 Facebook 错误?

4

1 回答 1

3

有一段时间我为这件事头晕目眩……

当您打开应用程序链接且应用程序当前未运行时,应用程序将启动并首先调用application:didFinishLaunchingWithOptions. 如果您true在此方法中返回,那么它将调用application:openURL:sourceApplication:annotation:并传入适当的参数。但是,如果application:didFinishLaunchingWithOptions返回false,则application:openURL:sourceApplication:annotation:永远不会调用。

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

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

在你的末尾application:didFinishLaunchingWithOptions。如果您查看他们的文档,它会声明它返回

如果该 url 用于 Facebook SDK,则为 YES,否则为 NO。

因此,因为您的 applink 不适用于 FBSDK,所以它返回false. 但是,UIApplicationLaunchOptionsURLKeyUIApplicationLaunchOptionsSourceApplicationKeylaunchOptions. 在你的application:didFinishLaunchingWithOptions,如果你打电话

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

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

于 2015-08-07T02:06:03.290 回答