web-dev-qa-db-fra.com

Bouton de connexion Google personnalisé - iOS

Je souhaite personnaliser le bouton Google Sign-In comme ci-dessous: -
 enter image description here
J'ai essayé les liens ci-dessous, mais aucun d'entre eux n'a vraiment beaucoup aidé: - Comment personnaliser le bouton de connexion de Google?
https://developers.google.com/identity/sign-in/ios/

Quelqu'un pourrait-il s'il vous plaît guider ce que je devrais faire? Je ne peux pas utiliser le bouton de connexion Google+ car " Google+ Sign-In est obsolète ".

É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

26
Piyush Dubey

Vous pouvez ajouter votre propre bouton au lieu d'utiliser le bouton Google Sign-In.

Version Objective C

1) Ajoutez votre propre bouton dans StoryBoard 

2) faites glisser l'action dans viewController

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

3) gérer les méthodes de délégué

# marque pragma - Délégué Google SignIn

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

  }

// Présenter une vue qui invite l'utilisateur à se connecter avec Google

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

// Supprime la vue "Connectez-vous avec Google"

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

}

// connexion terminée

- (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 que vous avez ajouté un en-tête de liaison car la bibliothèque est écrite en Objective C

1) Ajoutez votre propre bouton dans StoryBoard

2) faites glisser l'action dans viewController

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

3) gérer les méthodes de délégué

// MARK: Délégué Google SignIn

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

// Présenter une vue qui invite l'utilisateur à se connecter avec Google

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

// Supprime la vue "Connectez-vous avec Google"

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

// connexion terminée

   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 la référence/preuve d'utilisation du bouton personnalisé, Référence Google Doc

5.Si vous souhaitez personnaliser le bouton, procédez comme suit: Dans le fichier .h de votre contrôleur de vue, déclarez le bouton de connexion en tant que propriété.

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

Connectez le bouton à la propriété signInButton que vous venez de déclarer . Personnalisez le bouton en définissant les propriétés du GIDSignInButton objet. Ensuite, vous pouvez implémenter et gérer le bouton de déconnexion.

87
Rohit KP

Swift 3 Version

Dans Swift, assurez-vous d'avoir ajouté un en-tête de liaison car la bibliothèque est écrite dans Objective C.

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

    @IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
          GIDSignIn.sharedInstance().signIn()
    } 
    
  3. gérer les méthodes de délégué

    //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)")
            }
        }
    
7
ShrikantWalekar

Pour Swift 4: (C'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)")
    }
}
6
Rohit Sisodia

Tous vont bien avec la réponse de @Rohit KP (https://stackoverflow.com/a/34368678/2905967)

Mais peu d’ajout lors de l’affectation des délégués.

Veuillez appeler votre action comme ceci:

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

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

3
Manab Kumar Mal

Vous pouvez ajouter votre propre bouton au lieu d'utiliser le bouton Google Sign-In.

1) Ajoutez ce code dans le fichier AppDelegate.m

2) Ajoutez votre propre bouton dans storyBoard et donnez le nom de la classe GPPSignInButton et définissez UIImageView sur ce bouton.

3) faites glisser l'action dans viewController

Fichier AppDelegate.m

- (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
Birendra

Pour Swift 4.2

faire un bouton Google personnalisé:

1-ajouter votre bouton au storyboard 

2-créez @IBaction pour votre bouton

3-suivez les instructions sur https://developers.google.com/identity/sign-in/ios/sign-in Mais remplacez cette étape 

"2 .Dans le contrôleur de vue, substituez la méthode viewDidLoad pour définir le délégué de l'interface utilisateur de l'objet GIDSignIn et (éventuellement) pour vous connecter silencieusement lorsque cela est possible"

avec 

-> insérer ce code dans l'action du bouton 

    GIDSignIn.sharedInstance().uiDelegate=self
    GIDSignIn.sharedInstance().signIn()

maintenant, vous pouvez personnaliser votre bouton, en espérant que cette réponse vous aidera. 

0
Bent El-Eslam

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

  1. Créer une référence pour votre bouton de connexion Google

    @IBOutlet faible signInButton var: GIDSignInButton!

  2. définir son style 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 de connexion Google dans le récit principal et créez une référence d'action pour celui-ci. À l'intérieur, cliquez sur le bouton de connexion de Google par programmation.

    @IBAction func googleSignIn(_ sender: Any) {
    signInButton.sendActions(for: .touchUpInside)
    }
0
Jarin Rocks