Custom Google Sign-In button - iOS
You can add your own button instead of using Google Sign-In buttonDo follwing things
Objective C Version
1)Add your own button into storyBoard
2)drag action into viewController
- (IBAction)googlePlusButtonTouchUpInside:(id)sender { [GIDSignIn sharedInstance].delegate = self; [GIDSignIn sharedInstance].uiDelegate = self; [[GIDSignIn sharedInstance] signIn]; }
3)handle delegate methods
#pragma mark - Google SignIn Delegate
- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error { }
// Present a view that prompts the user to sign in with Google
- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController{ [self presentViewController:viewController animated:YES completion:nil];}
// Dismiss the "Sign in with Google" view
- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController { [self dismissViewControllerAnimated:YES completion:nil];}
//completed sign In
- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error {//user signed in//get user data in "user" (GIDGoogleUser object)}
Swift 4 Version
In Swift make sure you have added briding header as the library is written in objective C
1)Add your own button into storyBoard
2)drag action into viewController
@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) { GIDSignIn.sharedInstance().delegate=self GIDSignIn.sharedInstance().uiDelegate=self GIDSignIn.sharedInstance().signIn()}
3)handle delegate methods
//MARK:Google SignIn Delegate
func signInWillDispatch(_ signIn: GIDSignIn!, error: Error!) {}
// Present a view that prompts the user to sign in with Google
func signIn(_ signIn: GIDSignIn!, presentViewController viewController: UIViewController!) { self.present(viewController, animated: true, completion: nil)}
// Dismiss the "Sign in with Google" view
func signIn(_ signIn: GIDSignIn!, dismissViewController viewController: UIViewController!) { self.dismiss(animated: true, completion: nil)}
//completed sign In
public func signIn(_ signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: Error!) { if (error == nil) { // Perform any operations on signed in user here. let userId = user.userID // For client-side use only! let idToken = user.authentication.idToken // Safe to send to the server let fullName = user.profile.name let givenName = user.profile.givenName let familyName = user.profile.familyName let email = user.profile.email // ... } else { print("\(error.localized)") } }
Edit: Here is the reference/evidence for usage of custom button, Google Doc reference
In these examples, the view controller is a subclass of UIViewController. If, in your project, the class that implements GIDSignInUIDelegate is not a subclass of UIViewController, implement the signInWillDispatch:error:, signIn:presentViewController:, and signIn:dismissViewController: methods of the GIDSignInUIDelegate protocol. Also don't forget to set UI delegate GIDSignIn.sharedInstance()?.uiDelegate = self
Swift 3 Version
In Swift make sure you have added briding header as the library is written in objective C.
- Add your own button into storyBoard
drag action into viewController
@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) { GIDSignIn.sharedInstance().signIn()}
handle delegate methods
//MARK:Google SignIn Delegate func signInWillDispatch(signIn: GIDSignIn!, error: NSError!) { // myActivityIndicator.stopAnimating() }// Present a view that prompts the user to sign in with Google func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) { self.present(viewController, animated: true, completion: nil) }// Dismiss the "Sign in with Google" view func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) { self.dismiss(animated: true, completion: nil) }//completed sign In public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { if (error == nil) { // Perform any operations on signed in user here. let userId = user.userID // For client-side use only! let idToken = user.authentication.idToken // Safe to send to the server let fullName = user.profile.name let givenName = user.profile.givenName let familyName = user.profile.familyName let email = user.profile.email // ... } else { print("\(error.localizedDescription)") } }
For Swift 4: (This is working code Enjoy)
@IBAction func logimByGoogle(_ sender: Any) { GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().signIn()}//MARK:- Google Delegatefunc sign(inWillDispatch signIn: GIDSignIn!, error: Error!) {}func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) { self.present(viewController, animated: true, completion: nil)}public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { if (error == nil) { // Perform any operations on signed in user here. let userId = user.userID // For client-side use only! let idToken = user.authentication.idToken // Safe to send to the server let fullName = user.profile.name let givenName = user.profile.givenName let familyName = user.profile.familyName let email = user.profile.email // ... } else { print("\(error)") }}