Bouton de connexion Google personnalisé - iOS
je veux personnaliser le bouton de connexion Google comme ci-dessous:-
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
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.
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.
- ajoutez votre propre bouton dans storyBoard
-
faites glisser l'action en viewController
@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) { GIDSignIn.sharedInstance().signIn() }
-
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)") } }
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)")
}
}
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
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);
}
}];
}
}
}
essayez ceci pour swift, c'est très simple et fonctionne comme un champion.
-
créer une référence pour votre Google Sign In button
@IBOutlet weak var signInButton: GIDSignInButton!
-
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)
}