如何实施GoogleSignIn

时间:2019-03-04 13:57:45

标签: swift google-cloud-firestore google-signin

一些文档1 2说我必须使用application:openURL:options:。我的问题是-由于我已经在使用该方法,因此有关如何完全实现劫持的示例代码:

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
  -> Bool {
    return GIDSignIn.sharedInstance().handle(url,
                            sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                            annotation: [:])
}

如何确定openURL调用用于登录?

我更希望实现与FirebaseUI 3中的方法相同的方法:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

3 个答案:

答案 0 :(得分:3)

您可能已经注意到GIDSignIn.sharedInstance().handle方法返回一个bool,所以您可以这样调用它:

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
  -> Bool {
    if GIDSignIn.sharedInstance().handle(url, sourceApplication:options[.sourceApplication] as? String, annotation: [:]) {
        return true
    }

    return false
}  

如果您的应用支持其他不同类型的登录名(facebook,twitter等),此方法将更有用。
在这种情况下,您要做的就是为每种网址添加更多if条件。
希望这会有所帮助

答案 1 :(得分:3)

实际上您不必这样做,您可以像这样用||链接它们

public func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL?, sourceApplication: sourceApplication, annotation: annotation) 
   || GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication,annotation: annotation)
   || FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false

}

任何人都会命中return true,否则,如果所有false,那么结果将是false

答案 2 :(得分:2)

According to the docs如果GIDSignIn处理了此URL,则此方法返回YES。

因此,您似乎可以完全按照FUIAuth示例中的方法进行操作,即在返回值上添加'if'检查:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    let isSignInHandled = GIDSignIn.sharedInstance().handle(url,
        sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
        annotation: [:])
    if isSignInHandled {
        return true
    }
    // ... other code
}