astromme astromme - 2 months ago 8
Swift Question

How to use FirebaseUI for Google authentication on iOS in Swift?

I'm following https://firebase.google.com/docs/auth/ and want to use FirebaseUI (https://github.com/firebase/FirebaseUI-iOS/tree/master/FirebaseUI) for authentication.

The UI shows successfully and I'm able to click "sign in with google" and then complete the web sign in flow. The app re-opens with the auth url, but the authUI function never fires. What's wrong?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()

let authUI = FIRAuthUI.authUI()!;
NSLog("setting up delegate");
authUI.delegate = self;

let googleAuthUI = FIRGoogleAuthUI.init(clientID:FIRApp.defaultApp()!.options.clientID);

authUI.signInProviders = [googleAuthUI!];


mSplitViewController = self.window!.rootViewController as! UISplitViewController


self.window!.rootViewController = authUI.authViewController();

return true
}

func authUI(authUI: FIRAuthUI, didSignInWithUser user: FIRUser?, error:NSError?) {
// Implement this method to handle signed in user or error if any.
NSLog("logged in");

self.window!.rootViewController = mSplitViewController
let navigationController = mSplitViewController!.viewControllers[mSplitViewController!.viewControllers.count-1] as! UINavigationController

navigationController.topViewController!.navigationItem.leftBarButtonItem = mSplitViewController!.displayModeButtonItem()
mSplitViewController!.delegate = self

let masterNavigationController = mSplitViewController!
.viewControllers[0] as! UINavigationController
let controller = masterNavigationController.topViewController as! MasterViewController
controller.managedObjectContext = self.managedObjectContext
}


func application(application: UIApplication,
openURL url: NSURL, options: [String: AnyObject]) -> Bool {
NSLog("opened with url \(url)");
FIRAuthUI.authUI()!.delegate = self;
return FIRAuthUI.authUI()!.handleOpenURL(url, sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String);
}

Answer

I haven't tried this solution but this StackOverflow problem was linked to the FirebaseUI repo's issues section and someone there responded;

Obj-C: "There's a bug that prevents [[FIRAuthUI authUI] authViewController] from being used as the root view controller of your app. The workaround is to use a placeholder view controller as your app's root view controller, then present [[FIRAuthUI authUI] authViewController] on top of it."

for Swift users: There's a bug that prevents FIRAuthUI.authUI().authViewController() from being used as the root view controller of your app. The workaround is to use a placeholder view controller as your app's root view controller, then present FIRAuthUI.authUI().authViewController() on top of it.

Link: https://github.com/firebase/FirebaseUI-iOS/issues/65

Comments