wake-up-neo.com

Benutzerdefinierte Google-Anmeldeschaltfläche - iOS

Ich möchte die Google-Anmeldeschaltfläche wie folgt anpassen: -
 enter image description here
Ich habe folgende Links ausprobiert, aber keiner von ihnen hat wirklich viel geholfen: - Wie kann ich die Google-Anmeldeschaltfläche anpassen?
https://developers.google.com/identity/sign-in/ios/

Könnte jemand bitte anleiten, was ich tun soll? Ich kann die Google+ Anmeldeschaltfläche nicht verwenden, da " Google+ Anmeldung ist veraltet ".

Editiert: - Ich habe den folgenden Code ausprobiert: -
https://developers.google.com/identity/sign-in/ios/sign-in#add_the_sign-in_button

26
Piyush Dubey

Sie können Ihre eigene Schaltfläche hinzufügen, anstatt die Google-Anmeldeschaltfläche zu verwenden

Ziel C-Version

1) Fügen Sie Ihren eigenen Button in storyBoard ein 

2) ziehen Sie die Aktion in den viewController

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

3) Handle Delegat-Methoden

#pragma mark - Google SignIn-Delegierter

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

  }

// Präsentieren Sie eine Ansicht, die den Benutzer dazu auffordert, sich bei Google anzumelden

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

// Die Ansicht "Mit Google anmelden" abweisen

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

}

// abgeschlossene Anmeldung

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

Swift 4 Version

Vergewissern Sie sich in Swift, dass Sie einen Briding-Header hinzugefügt haben, während die Bibliothek in Objective C geschrieben wird

1) Fügen Sie Ihren eigenen Button in storyBoard ein

2) ziehen Sie die Aktion in den viewController

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

3) Handle Delegat-Methoden

// MARK: Google SignIn-Delegierter

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

// Präsentieren Sie eine Ansicht, die den Benutzer dazu auffordert, sich bei Google anzumelden

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

// Die Ansicht "Mit Google anmelden" abweisen

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

// abgeschlossene Anmeldung

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

Bearbeiten: Hier finden Sie die Referenz/Beweise für die Verwendung der benutzerdefinierten Schaltfläche, Google Doc-Referenz

5.Wenn Sie die Schaltfläche anpassen möchten, gehen Sie wie folgt vor: Definieren Sie in der .h-Datei Ihres View-Controllers die Anmeldeschaltfläche als Eigenschaft.

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

Verbinden Sie die Schaltfläche mit der soeben deklarierten Eigenschaft signInButton . Passen Sie die Schaltfläche an, indem Sie die Eigenschaften von GIDSignInButton .__ festlegen. Objekt. Als Nächstes können Sie die Schaltfläche zum Abmelden implementieren und bearbeiten.

87
Rohit KP

Swift 3 Version

Vergewissern Sie sich in Swift, dass Sie einen Briding-Header hinzugefügt haben, da die Bibliothek in Objective C geschrieben ist.

  1. Füge deinen eigenen Button zum Storyboard hinzu
  2. ziehen Sie die Aktion in den viewController

    @IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
          GIDSignIn.sharedInstance().signIn()
    } 
    
  3. delegiermethoden handhaben

    //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

Für Swift 4: (Dies ist der Arbeitscode 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

Alle sind zufrieden mit der Antwort von @Rohit KP (https://stackoverflow.com/a/34368678/2905967)

Aber bei der Zuweisung der Delegierten wenig hinzuzufügen.

Bitte nennen Sie Ihre Aktion so:

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

und fügen Sie diese Delegierten hinzu GIDSignInDelegate,GIDSignInUIDelegate

3
Manab Kumar Mal

Sie können Ihre eigene Schaltfläche hinzufügen, anstatt die Google-Anmeldeschaltfläche zu verwenden

1) Fügen Sie diesen Code in die AppDelegate.m-Datei ein

2) Fügen Sie in storyBoard eine eigene Schaltfläche hinzu, geben Sie den Klassennamen GPPSignInButton an und setzen Sie UIImageView auf diese Schaltfläche.

3) Ziehen Sie die Aktion in den viewController

AppDelegate.m-Datei

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

Für Swift 4.2

so erstellen Sie eine benutzerdefinierte Google-Schaltfläche:

1-Füge deinen Button zum Storyboard hinzu 

2 Erstellen Sie @IBaction für Ihre Schaltfläche

Befolgen Sie die Anweisungen unter https://developers.google.com/identity/sign-in/ios/sign-in , Aber folgen Sie diesen Anweisungen 

"2. Überschreiben Sie im View-Controller die viewDidLoad-Methode, um den UI-Delegaten des GIDSignIn-Objekts festzulegen, und (optional), um sich lautlos anzumelden."

mit 

-> Fügen Sie diesen Code in die Schaltflächenaktion ein 

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

jetzt können Sie Ihren Button glücklich anpassen. Hoffen Sie, dass Ihnen diese Antwort hilft. 

0
Bent El-Eslam

Versuchen Sie dies für Swift, es ist sehr einfach und funktioniert wie ein Champion.

  1. Erstellen Sie eine Referenz für Ihre Google-Anmeldeschaltfläche

    @IBOutlet schwach var signInButton: GIDSignInButton!

  2. legen Sie den Stil in viewDidLoad fest

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

3. Platzieren Sie Ihre benutzerdefinierte Schaltfläche über der Google-Anmeldeschaltfläche in der Hauptübersicht und erstellen Sie eine Aktionsreferenz. Klicken Sie darin programmgesteuert auf die Google-Anmeldeschaltfläche.

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

Swift-5

@IBAction func btngoogle(_ sender: UIButton) {
    GIDSignIn.sharedInstance().signIn()
}


//MARK:Google SignIn Delegate
func sign(inWillDispatch signIn: GIDSignIn!, error: Error!) {
    // 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)")
    }
}
0
Shakeel Ahmed