Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何实现GoogleSignIn_Swift_Google Cloud Firestore_Google Signin - Fatal编程技术网

Swift 如何实现GoogleSignIn

Swift 如何实现GoogleSignIn,swift,google-cloud-firestore,google-signin,Swift,Google Cloud Firestore,Google Signin,一些文档说我必须使用应用程序:openURL:options:。我的问题是——因为我已经在使用该方法,而如何实现该方法的示例代码完全劫持了它: func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { return GIDSignIn.sharedInstance().handle(url,

一些文档说我必须使用
应用程序: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调用是针对signin的

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


正如您可能已经注意到的那样,
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等),这种方法更有用
在这种情况下,您所要做的就是为每种URL添加更多的
if
条件。
希望这有帮助

如果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
}

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

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

}

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

应该是一个注释为什么你这么认为?
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

}