Je souhaite personnaliser le bouton Google Sign-In comme ci-dessous: -
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
Vous pouvez ajouter votre propre bouton au lieu d'utiliser le bouton Google Sign-In.
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)
}
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.
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.
faites glisser l'action dans viewController
@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
GIDSignIn.sharedInstance().signIn()
}
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)")
}
}
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)")
}
}
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
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);
}
}];
}
}
}
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.
Essayez ceci pour Swift, c'est très simple et fonctionne comme un champion.
Créer une référence pour votre bouton de connexion Google
@IBOutlet faible signInButton var: GIDSignInButton!
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)
}