Подтвердить что ты не робот

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

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

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

Отредактировано: - Я пробовал код, указанный ниже: -
https://developers.google.com/identity/sign-in/ios/sign-in#add_the_sign-in_button

4b9b3361

Ответ 1

Вы можете добавить собственную кнопку вместо кнопки входа в Google.

Цель C Версия

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

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

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

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

#pragma mark - Google SignIn Delegate

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

  }

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

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

//Отключить представление "Войти через Google"

- (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, поскольку библиотека написана в цели C

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

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

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

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

//MARK: делегат входа в Google

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

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

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

//Отключить представление "Войти через Google"

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

Изменение: Вот ссылка/свидетельство использования пользовательской кнопки, ссылка на Документ Google

В этих примерах контроллер представления является подклассом UIViewController. Если в вашем проекте класс, реализующий GIDSignInUIDelegate, не является подклассом UIViewController, реализуйте signInWillDispatch: error :, signIn: presentViewController: и signIn: dismissViewController: методы протокола GIDSignInUIDelegate. Также не забудьте установить делегат пользовательского интерфейса GIDSignIn.sharedInstance()?. uiDelegate = self

Ответ 2

версия Swift 3

В Swift убедитесь, что вы добавили нежный заголовок, поскольку библиотека записана в объекте C.

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

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

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

Ответ 3

Для 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)")
    }
}

Ответ 4

Все в порядке с ответом @Rohit KP (/questions/313479/custom-google-sign-in-button-ios/1516946#1516946)

Но Маленькое добавление при назначении делегатов.

Назовите свое действие следующим образом:

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

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

Ответ 5

Вы можете добавить свою собственную кнопку вместо того, чтобы использовать кнопку входа в систему Google. Сделайте что-то непонятное.

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

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

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

Файл 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);
                        }
                    }];

        }
    }
}

Ответ 6

Для Swift 4.2

сделать пользовательскую кнопку Google:

1-добавить кнопку на раскадровку

2-создайте @IBaction для вашей кнопки

3-следуйте инструкциям на https://developers.google.com/identity/sign-in/ios/sign-in, но замените этот шаг

"2. В контроллере представления переопределите метод viewDidLoad для установки делегата пользовательского интерфейса объекта GIDSignIn и (при необходимости) для входа в систему без вывода сообщений, когда это возможно"

с

→ вставить этот код в действие кнопки

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

теперь вы можете с радостью настроить свою кнопку, надеюсь, этот ответ поможет вам.

Ответ 7

Попробуйте это быстро, это очень просто и работает как чемпион.

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

    @IBOutlet слабая переменная 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)
    }

Ответ 8

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