lf2*_*215 6 google-authentication firebase swift firebase-authentication firebaseui
我试图从AppDelegate.swift启动谷歌登录,然后在登录成功后启动我的应用程序的主屏幕.
我能够
显示google登录按钮,如上所示
用户被发送到谷歌登录
用户被送回原件(步骤1)
在第3步之后.我想将用户发送到我应用的主页面.
我的代码如下.我遇到的问题authUI是没有被调用.
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, FIRAuthUIDelegate {
var window: UIWindow?
var authUI: FIRAuthUI?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
authUI = FIRAuthUI.defaultAuthUI()
authUI?.delegate = self
let providers: [FIRAuthProviderUI] = [FIRGoogleAuthUI()]
authUI?.providers = providers
// show google login button
let authViewController = authUI?.authViewController()
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = authViewController
self.window?.makeKeyAndVisible()
return true
}
func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool {
return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
func authUI(authUI: FIRAuthUI, didSignInWithUser user: FIRUser?, error: NSError?) {
// launch main view controller
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这似乎是另一个问题的重复.另一个问题的标题非常笼统,只能深入细节.无论如何,我相信克里斯的答案比那里的答案更彻底.我认为这里的问题和答案都更清晰,更尖锐,更彻底,因此如果将此标记为重复,那么将此处的人员引导到那里是错误的.
我觉得你的问题就出在这里,在- (void)signInWithProviderUI:(id<FIRAuthProviderUI>)providerUI方法.
委托方法在dismissViewControllerAnimated:completion:完成块中调用.
[self.navigationController dismissViewControllerAnimated:YES completion:^{
[self.authUI invokeResultCallbackWithUser:user error:error];
}];
Run Code Online (Sandbox Code Playgroud)
正如您从Apple文档中看到的那样,期望在模态呈现的viewController上调用此方法.您将其显示为根视图控制器.尝试用a的模态显示它UIViewController,事情应该解决.要调试此尝试并在第193行设置断点,以确保它不会被命中.如果在模态显示authController时这不起作用,我会非常惊讶.
为您的问题提出可能的解决方案(我假设您希望确保用户在使用您的应用程序之前已登录).以下是我目前在应用程序中使用的简化.
编辑:已更新为新的1.0.0 FirebaseUI语法.
class MainTabController: UITabBarController, FIRAuthUIDelegate {
let authUI: FUIAuth? = FUIAuth.defaultAuthUI()
override func viewDidLoad() {
super.viewDidLoad()
var authProviders = [FUIFacebookAuth(), FUIGoogleAuth()]
authUI.delegate = self
authUI.providers = authProviders
//I use this method for signing out when I'm developing
//try! FIRAuth.auth()?.signOut()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !isUserSignedIn() {
showLoginView()
}
}
private func isUserSignedIn() -> Bool {
guard FIRAuth.auth()?.currentUser != nil else { return false }
return true
}
private func showLoginView() {
if let authVC = FUIAuth.defaultAuthUI()?.authViewController() {
present(authVC, animated: true, completion: nil)
}
}
func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
guard let user = user else {
print(error)
return
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |