2016-04-25 129 views
1

我读过一些类似的问题,不幸的是,这并没有真正帮助我很多。Facebook和谷歌登录 - 冲突(Xcode)

我有一个使用Swift的Xcode项目,目前我已经整合了Twitter & Facebook登录。我也想要Google登录。我遵循的步骤,到目前为止,但我已经达到2个问题:

  1. 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 - 这其中还预计,谷歌相关的回报,但它目前返回的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(_ 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个小时。

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) 
} 
+0

感谢它的工作。你能解释让b = FBSDK ......任务的目的吗? –

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]) 
}