Bouton de connexion Google personnalisé - iOS

je veux personnaliser le bouton de connexion Google comme ci-dessous:-

enter image description here

j'ai essayé les liens ci-dessous, mais aucun d'eux n'a vraiment aidé beaucoup:- comment personnaliser le bouton google sign in?

https://developers.google.com/identity/sign-in/ios/

Quelqu'un pourrait-il me guider? Je ne peux pas utiliser Bouton d'ouverture de session Google+ parce que" Google+ est déprécié ".

édité: - j'ai essayé le code fourni sur le lien ci-dessous:-

https://developers.google.com/identity/sign-in/ios/sign-in#add_the_sign-in_button

25
demandé sur Rohit KP 2015-12-19 10:54:02

6 réponses

vous pouvez ajouter votre propre bouton au lieu d'utiliser le bouton de connexion Google Ne follwing choses

Objectif C Version

1)Ajoutez votre propre bouton dans storyBoard

2)faites glisser l'action en viewController

- (IBAction)googlePlusButtonTouchUpInside:(id)sender {
     [GIDSignIn sharedInstance].delegate = self;
     [GIDSignIn sharedInstance].uiDelegate = self;
     [[GIDSignIn sharedInstance] signIn];
  }

3)poignée délégué méthodes

#pragma mark-Google SignIn Delegate

- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error {

  }

// Présenter une vue qui invite L'utilisateur à s'identifier avec Google

- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController
{
    [self presentViewController:viewController animated:YES completion:nil];
}

/ / rejeter le "Se connecter avec Google" view

- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController {
    [self dismissViewControllerAnimated:YES completion:nil];

}

/ / signal complété

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
//user signed in
//get user data in "user" (GIDGoogleUser object)
}

Swift 4 Version

dans Swift assurez-vous d'avoir ajouté l'en-tête briding car la Bibliothèque est écrite dans l'objectif C

1)Ajoutez votre propre bouton dans storyBoard

2)action de traînée dans viewController

@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
      GIDSignIn.sharedInstance().delegate=self
      GIDSignIn.sharedInstance().uiDelegate=self
      GIDSignIn.sharedInstance().signIn()
} 

3)poignée délégué méthodes

/ / marque: Google SignIn Delegate

func signInWillDispatch(_ signIn: GIDSignIn!, error: Error!) {
}

// présenter une vue qui invite L'utilisateur à s'identifier avec Google

func signIn(_ signIn: GIDSignIn!,
    presentViewController viewController: UIViewController!) {
  self.present(viewController, animated: true, completion: nil)
}

/ / rejeter le "Se connecter avec Google" view

func signIn(_ signIn: GIDSignIn!,
    dismissViewController viewController: UIViewController!) {
  self.dismiss(animated: true, completion: nil)
}

/ / signal complété

   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: voici le référence / preuve de l'utilisation du bouton personnalisé, référence Google Doc

5.Si vous voulez personnaliser le bouton, faites ce qui suit: dans votre contrôleur de vue .h fichier, déclarer le bouton de connexion comme une propriété.

@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;

connectez le bouton à la propriété signInButton que vous venez de déclarer. Personnaliser le bouton en réglant les propriétés du bouton Gidsignin objet. Ensuite, vous pouvez mettre en œuvre et gérer le signe bouton.

76
répondu Rohit KP 2017-12-24 09:03:58

Swift 3 Version

dans Swift assurez-vous d'avoir ajouté l'en-tête briding car la Bibliothèque est écrite dans l'objectif C.

  1. ajoutez votre propre bouton dans storyBoard
  2. faites glisser l'action en viewController

    @IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
          GIDSignIn.sharedInstance().signIn()
    } 
    
  3. poignée délégué méthodes

    //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)")
            }
        }
    
6
répondu ShrikantWalekar 2016-12-09 11:21:46

pour Swift 4: (Ceci est le code de travail Enjoy)

@IBAction func logimByGoogle(_ sender: Any) {
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().signIn()
}
//MARK:- Google Delegate
func 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)")
    }
}
4
répondu Rohit Sisodia 2017-12-24 07:47:16

Tous sont d'accord avec la réponse de @Rohit KP (https://stackoverflow.com/a/34368678/2905967)

mais peu ajouter lors de l'attribution des délégués.

s'il vous Plaît appelez votre action comme ceci:

- (IBAction)btnGooglePlusPressed:(id)sender
{
    [GIDSignIn sharedInstance].delegate=self;
    [GIDSignIn sharedInstance].uiDelegate=self;
    [[GIDSignIn sharedInstance] signIn];
}

et ajouter ces délégués GIDSignInDelegate,GIDSignInUIDelegate

3
répondu Manab Kumar Mal 2017-05-23 11:46:25

vous pouvez ajouter votre propre bouton au lieu d'utiliser le bouton D'ouverture de session Google Do follwing things""

1) ajouter ce code dans AppDelegate.m fichier

2)Ajoutez votre propre bouton dans storyBoard et donnez le nom de classe comme GPPSignInButton et mettez UIImageView sur ce bouton.

3)faites glisser l'action en viewController

AppDelegate.m fichier

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    GPPSignIn *SignIn = [GPPSignIn sharedInstance];

    [GPPSignIn sharedInstance].clientID = @"532796865439-juut4g2toqdfc13mgqu5v9g5cliguvmg.apps.googleusercontent.com";

    SignIn.scopes = @[kGTLAuthScopePlusLogin];
    return YES;
} 

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]) {

        return YES;
    }

    return wasHandled;
}




ViewController.m file

@property (strong, nonatomic) IBOutlet GPPSignInButton *btn;

- (void)viewDidLoad {
    [super viewDidLoad];

   [GPPSignIn sharedInstance].delegate = self;
    [[GPPSignIn sharedInstance] trySilentAuthentication];

    AppDelegate *appDelegate = (AppDelegate *)
    [[UIApplication sharedApplication] delegate];
  }



-(void) finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error
{
    GPPSignIn *signIn = [GPPSignIn sharedInstance];
    signIn.shouldFetchGoogleUserEmail = YES;
    signIn.delegate = self;

    if (error == nil) {
        if(auth.canAuthorize){
            GTLServicePlus *service = [[GTLServicePlus alloc] init];
            [service setRetryEnabled:YES];
            [service setAuthorizer:auth];

            GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"];


            // 1. Create a |GTLServicePlus| instance to send a request to Google+.
            GTLServicePlus* plusService = [[GTLServicePlus alloc] init] ;
            plusService.retryEnabled = YES;

            // 2. Set a valid |GTMOAuth2Authentication| object as the authorizer.
            [plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];

            // 3. Use the "v1" version of the Google+ API.*
            plusService.apiVersion = @"v1";
            [plusService executeQuery:query
                    completionHandler:^(GTLServiceTicket *ticket,
                                        GTLPlusPerson *person,
                                        NSError *error) {
                        if (error) {
                            //Handle Error
                        } else {
                            NSLog(@"\nEmail= %@", [GPPSignIn sharedInstance].authentication.userEmail);
                            NSLog(@"\nGoogleID=%@", person.identifier);
                            NSLog(@"\nUser Name=%@", [person.name.givenName stringByAppendingFormat:@" %@", person.name.familyName]);
                            NSLog(@"\nGender=%@", person.gender);
                        }
                    }];

        }
    }
}
1
répondu Birendra 2015-12-19 09:21:50

essayez ceci pour swift, c'est très simple et fonctionne comme un champion.

  1. créer une référence pour votre Google Sign In button

    @IBOutlet weak var signInButton: GIDSignInButton!

  2. style défini dans viewDidLoad

    override func viewDidLoad() {
    super.viewDidLoad()
    //Do any additional setup after loading the view.
      signInButton.style = GIDSignInButtonStyle.iconOnly
    

3.Placez votre bouton personnalisé au-dessus du bouton google sign in dans le panneau principal de l'histoire et créer une action de référence. À l'intérieur de celui-ci, cliquez sur le bouton google dans la programmation.

    @IBAction func googleSignIn(_ sender: Any) {
    signInButton.sendActions(for: .touchUpInside)
    }
0
répondu Jarin Rocks 2018-06-13 06:45:15