处理 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
。但是,键 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 方法,但这对我有用。
这是在 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
。但是,键 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 方法,但这对我有用。