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
}