iOS Facebook和谷歌同时登录?

时间:2015-12-07 01:56:13

标签: ios facebook-login google-login

我试图在同一个应用中实施google +和facebook登录。我按照Parse和Google的指示,首先成功实现了Facebook登录。然后我开始按照谷歌的说明。完成后,我现在在AppDelegate.swift文件中有这两个函数:

对于谷歌:

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

对于facebook:

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

我是否需要将这两个代码块合并为1,如某些帖子中所示,例如

Google SignIn SFSafariViewController/WebView redirects to Google.com after accepting permissions

或者他们可以在2个不同的街区中保持这样的状态? 感谢

3 个答案:

答案 0 :(得分:8)

你需要结合它们。最简单的方法是使用||在退货声明中。试试这个:

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

        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: nil)  ||
            GIDSignIn.sharedInstance().handleURL(url,
            sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
            annotation: options[UIApplicationOpenURLOptionsAnnotationKey] as? String)
}

答案 1 :(得分:0)

您可以很好地使用Google Identity Toolkit(现在重新打包为Firebase)来实现这一目标并允许其他IDP的扩展

答案 2 :(得分:0)

您也可以尝试

func application(_ application: UIApplication,
                 open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if GIDSignIn.sharedInstance().handle(url) {
        return true
    } else if ApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) {
        return true
    }
    
    return false
}

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
    if GIDSignIn.sharedInstance().handle(url) {
        return true
    } else if ApplicationDelegate.shared.application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplication.OpenURLOptionsKey.annotation]
        ) {
        return true
    }
    return false
}
相关问题