这是在AppDelegate中实现的
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
我有 App Link,其中包含一些在 Facebook 上共享的参数。如果我的应用程序最小化,单击 Facebook 上的链接会打开我的应用程序并调用函数
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
就像它应该发生的那样。
问题 是如果我的应用程序被终止(不是最小化)点击 Facebook 上的链接打开我的应用程序但函数没有被调用所以我无法处理输入参数。
我在 Facebook 文档中找到了一些关于处理冷启动的信息,但该信息已过时。
我是否遗漏了一些需要实现的东西,或者这是 Facebook 的错误?
最佳答案
这件事让我困惑了一段时间......
当您打开一个应用程序链接并且该应用程序当前未运行时,该应用程序将启动并首先调用 application:didFinishLaunchingWithOptions
。如果您在此方法中返回 true
,那么它将随后调用 application:openURL:sourceApplication:annotation:
并传入适当的参数。但是,如果 application:didFinishLaunchingWithOptions
返回 false
,则永远不会调用 application:openURL:sourceApplication:annotation:
。
如果你使用的是FBSDK,那么你会调用
return FBSDKApplicationDelegate.sharedInstance().application(application,
didFinishLaunchingWithOptions: launchOptions)
在 application:didFinishLaunchingWithOptions
的末尾。如果您查看他们的文档,它会声明它会返回
YES if the url was intended for the Facebook SDK, NO if not.
因此,由于您的应用链接不适用于 FBSDK,因此它返回 false
。但是,键 UIApplicationLaunchOptionsURLKey
和 UIApplicationLaunchOptionsSourceApplicationKey
在您的 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 方法,但这对我有用。
关于ios - 为 Facebook iOS SDK V4.1 处理 App Links 的冷启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235867/