Facebook 和 Google 登录 - 冲突 (Xcode)

Posted

技术标签:

【中文标题】Facebook 和 Google 登录 - 冲突 (Xcode)【英文标题】:Facebook And Google Login - conflict (Xcode) 【发布时间】:2016-04-25 18:01:15 【问题描述】:

不幸的是,我在这里阅读了一些类似的问题,但对我并没有太大帮助。

我有一个使用 Swift 的 Xcode 项目,目前,我已经集成了 Twitter 和 Facebook 登录。我也想要谷歌登录。到目前为止,我已经按照这些步骤进行操作,但我遇到了 2 个问题:

    didFinishLaunchingWithOptions(在 AppDelegate.swift 中)。我已经将 Facebook 作为返回类型,但在 Google 的文档中它说它需要 return true。怎么做?代码如下:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    
    
    // Google Login
    var configureError: NSError?
    GGLContext.sharedInstance().configureWithError(&configureError)
    assert(configureError == nil, "Error configuring Google services: \(configureError)")
    
    //return true -> Expected by Google
    
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    

2) openURL func - 这个也期待与 Google 相关的回报,但它目前返回 Facebook(基于他们的文档):

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

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


    // Required By Google?!
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)


所以,我需要帮助来处理这些问题。先感谢您!

【问题讨论】:

【参考方案1】:

解决办法是

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

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

【讨论】:

【参考方案2】:

didFinishLaunchingWithOptions 中取一个布尔变量,然后返回该变量,如

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


   // Google Login
   var configureError: NSError?
   GGLContext.sharedInstance().configureWithError(&configureError)
   assert(configureError == nil, "Error configuring Google services: \(configureError)")

   let b = FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

   return b 

对于其他问题,你可以这样处理

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
            || GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)

【讨论】:

感谢它的工作。请解释一下 let b = FBSDK... 赋值的目的???【参考方案3】:

对我来说这个很有效

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        // Override point for customization after application launch.
        FIRApp.configure()

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

        GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID            
        return true
    

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 
        return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication,annotation: annotation)
            || GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
    

希望能帮助别人。花了3个多小时。

【讨论】:

以上是关于Facebook 和 Google 登录 - 冲突 (Xcode)的主要内容,如果未能解决你的问题,请参考以下文章

iOS:同时使用 Facebook 和 Google,Google Plus 登录

Facebook 和 Google+ 登录

Backand- 使用 facebook 和 google 登录错误

使用 facebook connect 登录 IOS 应用程序时出现冲突错误

自定义 Google Plus 登录按钮和 Facebook 登录按钮

为啥在 google play store 上发布后 google 和 facebook 登录不起作用