Google登录与Facebook登录冲突

时间:2016-06-10 15:10:32

标签: ios xcode swift facebook-sdk-4.0 google-login

我使用Google Sign-inFacebook Login在我的应用中提供Google和Facebook登录信息。

问题是,当我同时使用它们时 - Facebook登录屏幕(基于Safari视图控制器)在用户登录后不会被解雇。

经过数小时的痛苦调试后,我发现只有在我显示Facebook登录提示之前初始化Google登录才会出现问题。

基本上,它是一行。

GGLContext.sharedInstance().configureWithError(&configureError)

如果我评论该行 - Facebook登录正常。

编辑:这就是我在AppDelegate.swift中所拥有的:

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

令人遗憾的是,这种方法根本没有被调用。 但是如果我禁用谷歌登录 - 它可以正常工作。

其他细节: 我使用的是Facebook SDK v4.12.0和Google Sign-In SDK v4.0.0

Xcode版本7.3.1(7D1014),在iOS 9.3上测试

欢迎任何想法。

6 个答案:

答案 0 :(得分:7)

我也使用谷歌和Facebook登录,它工作正常。你必须使用以下方法  func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject) -> Bool

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

       if url.absoluteString().containsString("FACEBOOK_ID") {
             return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
       }
       else {
           return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
       }
}

答案 1 :(得分:5)

好的伙计们,最终我已经弄明白了。 对我有用的诀窍是在Facebook SDK之前初始化Google登录SDK

现在我的AppDelegate看起来像这样:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // Initialize google sign-in
    var configureError: NSError?
    GGLContext.sharedInstance().configureWithError(&configureError)
    assert(configureError == nil, "Error configuring Google services: \(configureError)")

    // init FB SDK
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

  return true
  }

答案 2 :(得分:0)

如果您使用Google文档整合其身份验证系统,请不要使用此方法:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    var returnVal = false
    if #available(iOS 9.0, *) {
        returnVal = GIDSignIn.sharedInstance().handle(url,sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    } else {
        returnVal = false
    }
    return returnVal
}

这应该可以避免与iOS 9冲突,但是一旦我删除它,fb登录工作和谷歌登录也在iOS 9设备上工作。

希望这有助于任何人。

答案 3 :(得分:0)

在Swift 3(iOs 10)中,只需这样做:(它对我来说很好)

        func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

// FACEBOOK            
let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)

// GOOGLE
GIDSignIn.sharedInstance().handle(url,
                                                     sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                     annotation: options[UIApplicationOpenURLOptionsKey.annotation])
        return handled
    }

答案 4 :(得分:0)

这适用于Swift 3:我在同一页面上有Facebook和Google登录。

 @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        print( " open URL : \(url.absoluteURL.absoluteString)")

        if url.absoluteURL.absoluteString.contains("fb728991920603705") //Facebook ID from Plist
        {
            print("contain FB ID")
            return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)

        }
        else {
            let result = GIDSignIn.sharedInstance().handle(url,
                                                           //added exclamation mark
                sourceApplication: String(describing: options[UIApplicationOpenURLOptionsKey.sourceApplication]!),
                annotation: options[UIApplicationOpenURLOptionsKey.annotation])
            return result
        }
    }

答案 5 :(得分:0)

我刚刚使用最新版本的Facebook和Google pod以及 Swift 3.1 实现了此代码,效果很好!

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    if url.absoluteString.contains("facebook") {
        return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:])
    } else {
        return GIDSignIn.sharedInstance().handle(url,
                                                 sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                 annotation: [:])
    }
}