Пользовательская кнопка входа в систему 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
Ответы
Ответ 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
Попробуйте это быстро, это очень просто и работает как чемпион.
-
Создайте ссылку для своей кнопки входа в Google
@IBOutlet слабая переменная signInButton: GIDSignInButton!
-
установить стиль для него в 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)")
}
}