Ich möchte die Google-Anmeldeschaltfläche wie folgt anpassen: -
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
Sie können Ihre eigene Schaltfläche hinzufügen, anstatt die Google-Anmeldeschaltfläche zu verwenden
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)
}
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.
Swift 3 Version
Vergewissern Sie sich in Swift, dass Sie einen Briding-Header hinzugefügt haben, da die Bibliothek in Objective C geschrieben ist.
ziehen Sie die Aktion in den viewController
@IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
GIDSignIn.sharedInstance().signIn()
}
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)")
}
}
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)")
}
}
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
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);
}
}];
}
}
}
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.
Versuchen Sie dies für Swift, es ist sehr einfach und funktioniert wie ein Champion.
Erstellen Sie eine Referenz für Ihre Google-Anmeldeschaltfläche
@IBOutlet schwach var signInButton: GIDSignInButton!
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)
}
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)")
}
}