谷歌和Facebook在AppDelegate登录网址处理程序?

时间:2017-05-04 00:59:29

标签: ios swift facebook-login google-login

所以我已将Google登录集成到我的应用中,并在AppDelegate.swift中具有以下功能:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    // handled to go back to application after google log in
    let handled = GIDSignIn.sharedInstance().handle(url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:])

    return handled
}

现在我正在尝试添加Facebook登录,我应该将以下内容添加到同一个功能中:

let handled = FBSDKApplicationDelegate.sharedInstance().handle(application(app, open: url, options: [UIApplicationOpenURLOptionsKey.sourceApplication], annotations: options[:])

如何处理需要返回的两个不同的handled变量?

1 个答案:

答案 0 :(得分:1)

这就是我发现管理这两种情况的方式

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

    let canHandleURL = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
    let canHandleGoogleUrl =  GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation)
    if canHandleURL {
        return true
    } else if canHandleGoogleUrl {
        return true
    } else {
        return false
    }
}

根据@JAL建议,您可以优化此代码,添加以下行:

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

    return FBSDKApplicationDelegate.sharedInstance().application(applic‌​ation, openURL: url, sourceApplication: sourceApplication, annotation: annotation) || GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation)

}