我必须根据我在 App Delegate 中来自哪个社交网络来调用这两个函数

I have to call this two functions depending on which social network I come from in App Delegate

我正在创建一个使用社交网络登录的应用程序。我的问题是 google 调用 func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) ->Bool 而 Facebook 调用 func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool.

问题在于,在 AppDelegate 中具有这两个功能,Facebook 不会将我带回应用程序,但 Google 会。我认为这两个功能之间存在冲突。

我试图设置一个标志变量,但我无法在任何函数之外设置一个 if/else 语句。

我能做什么?

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

        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

func application(application: UIApplication,
                 openURL url: NSURL, options: [String: AnyObject]) -> Bool {

        return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

}

每个第三方 handleURL 功能 return 都是 Bool 让您知道该特定库是否实际处理了有问题的 URL。您可以将检查合并到一个单独的委托方法中,如果其中一个 return 为真,则 return 为真。我修改了您的代码以向您展示它的外观。请注意,我在较新的函数中调用了 iOS 8 已弃用的函数,因为我假设您也试图支持 iOS 8。如果不是这种情况,您可以完全摆脱那个,并将其主体移动到 iOS 9 函数中。

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 
{
        if FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
        {
            return true
        }
        else if GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
        {
            return true
        }
        else
        {
            // put more logic here as you need to but for now just return false if you didn't handle the URL
            return false
        }
}

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool 
{
        return self.application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]!)
}

编辑: 作为旁注,您的 Facebook 功能未被调用的原因是因为在 iOS 9+ 系统上,如果它检测到您已经实现了较新的功能,它永远不会调用旧的功能。如果您完全删除较新的,您会注意到旧的仍然会被调用(并且您的 Facebook 处理会起作用)。