Пользовательская кнопка входа в Google-iOS

Я хочу настроить кнопку входа в Google, как показано ниже: -
enter image description here
Я пробовал ниже ссылки, но ни один из них не очень помог:- как настроить кнопку входа в google?
https://developers.google.com/identity/sign-in/ios/

может кто-нибудь, пожалуйста, руководство, что я должен делать? Я не могу использовать кнопку входа в Google+, потому что"Google + вход в систему устарел".

редактировать: я попытался код, приведенный ниже link:-
https://developers.google.com/identity/sign-in/ios/sign-in#add_the_sign-in_button

6 ответов


вы можете добавить свою собственную кнопку вместо использования кнопки входа в Google Сделайте следующие вещи

Объективная Версия C

1) Добавьте свою собственную кнопку в раскадровку

2)перетащите действие в viewController

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

3) обрабатывать методы делегирования

#pragma mark-делегат Google SignIn

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

  }

/ / представить представление, предлагающее пользователю выполнить вход с помощью В Google

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

// отклонить" войти с помощью Google " view

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

}

/ / завершен вход

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

Swift 4 Версия

в Swift убедитесь, что вы добавили заголовок briding, поскольку библиотека написана в objective C

1) Добавьте свою собственную кнопку в раскадровку

2)перетащите действие в viewController

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

3) обрабатывать методы делегирования

/ / отметка: Google SignIn Делегат

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

// представьте представление, предлагающее пользователю войти в Google

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

// отклонить" войти с помощью Google " view

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

/ / завершен вход

   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: вот ссылка / доказательство использования пользовательской кнопки,ссылка на Google Doc

5.Если вы хотите настроить кнопку, выполните следующие действия: в контроллере представления .H-файл, объявить кнопка входа как свойство.

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

подключите кнопку к только что объявленному свойству signInButton. Настройте кнопку, задав свойства кнопки GIDSignInButton объект. Затем вы можете реализовать и обработать кнопку выхода из системы.


Swift 3 Версия

в Swift убедитесь, что вы добавили заголовок briding, поскольку библиотека написана в objective C.

  1. Добавьте свою собственную кнопку в раскадровку
  2. перетащите действие в viewController

    @IBAction func googlePlusButtonTouchUpInside(sender: AnyObject) {
          GIDSignIn.sharedInstance().signIn()
    } 
    
  3. обрабатывать методы делегирования

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

для Swift 4: (это рабочий код 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)")
    }
}

все в порядке с ответом @Rohit KP (https://stackoverflow.com/a/34368678/2905967)

но мало добавления при назначении делегатов.

пожалуйста, назовите свое действие так:

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

и добавьте этих делегатов GIDSignInDelegate,GIDSignInUIDelegate


вы можете добавить свою собственную кнопку вместо использования кнопки входа в Google Do follwing things

1) Добавьте этот код в AppDelegate.файл м

2) Добавьте свою собственную кнопку в раскадровку и дайте имя класса как GPPSignInButton и установите UIImageView на этой кнопке.

3) перетащите действие в viewController

AppDelegate.файл м

- (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);
                        }
                    }];

        }
    }
}

попробуйте это для swift, его очень просто и работает как чемпион.

  1. создать ссылку для вашего Google войти кнопка

    @IBOutlet слабый var signInButton: GIDSignInButton!

  2. установить стиль для него в viewDidLoad

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

3.Поместите свою пользовательскую кнопку над кнопкой входа в google в главной сюжетной доске и создайте ссылку на действие для нее. Внутри него нажмите Google войти кнопка программно.

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