web-dev-qa-db-ja.com

カスタムGoogleサインインボタン-iOS

以下のようにGoogleサインインボタンをカスタマイズしたい:-
enter image description here
以下のリンクを試しましたが、どれもあまり役に立ちませんでした:- 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

32
Piyush Dubey

Googleサインインボタンを使用する代わりに、独自のボタンを追加できます。

Objective 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バージョン

In SwiftライブラリはObjective Cで記述されているため、必ずブライディングヘッダーを追加してください。

1)storyBoardに独自のボタンを追加する

2)アクションをviewControllerにドラッグ

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

3)デリゲートメソッドを処理する

// MARK:Google SignIn Delegate

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 Doc reference

これらの例では、View ControllerはUIViewControllerのサブクラスです。プロジェクトで、GIDSignInUIDelegateを実装するクラスがUIViewControllerのサブクラスではない場合、GIDSignInUIDelegateプロトコルのsignInWillDispatch:error:、signIn:presentViewController :、およびsignIn:dismissViewController:メソッドを実装します。また、UIデリゲートGIDSignIn.sharedInstance()?. uiDelegate = selfを設定することを忘れないでください

92
Rohit Pradhan

Swift 3バージョン

In SwiftライブラリはObjective Cで記述されているため、ブライディングヘッダーを追加したことを確認してください。

  1. StoryBoardに独自のボタンを追加する
  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)")
            }
        }
    
8
ShrikantWalekar

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

@ 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

3
Manab Kumar Mal

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

        }
    }
}
1
Birendra

Swift 4.2

カスタムGoogleボタンを作成するには:

1-ストーリーボードにボタンを追加

2-ボタンの@IBactionを作成する

3 https://developers.google.com/identity/sign-in/ios/sign-in の手順に従いますが、この手順を置き換えます

「2。ViewControllerで、viewDidLoadメソッドをオーバーライドしてGIDSignInオブジェクトのUIデリゲートを設定し、(オプションで)可能な場合はサイレントでサインインします。」

->ボタンアクションにこのコードを挿入

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

今、あなたはあなたのボタンを喜んでカスタマイズできます。この答えがあなたを助けることを願っています。

1
Bent El-Eslam

これをSwiftで試してみてください。非常にシンプルで、チャンピオンのように機能します。

  1. Googleサインインボタンの参照を作成する

    @IBOutlet weak var signInButton:GIDSignInButton!

  2. viewDidLoadでスタイルを設定します

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

3.メインストーリーボードのGoogleサインインボタンの上にカスタムボタンを配置し、そのアクションリファレンスを作成します。その中にプログラムでグーグルサインインボタンをクリックします。

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

スイフト-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