Firebase 접속, Authentication접속
sign-in method 탬에서 제공업체 구글을 선택해준다.
여기서 프로젝트의 공개용 이름은 차후에 구글 권한을 요청할 때에 사용자에게 "앱이름" 이 사용자 권한을 요청합니다. 라는 의미를 표시할떄 사용되는 이름이다.
이름을 설정해주고 저장을 누른다.
구글 로그인을 사용하려면 podfile에 추가적으로 추가해야하는 podfile이 있다.
해당 프로젝트의 podfile을 열어준 후 아래를 입력해주고, 해당 프로젝트의 터미널에서 pod install을 해준다.
pod 'GoogleSignIn'
m1 맥북이며, 에러가 발생한다면
pod install 대신
$ sudo arch -x86_64 gem install ffi
$ arch -x86_64 pod install
이렇게 해주면 pod들이 업데이트 된다.
이 후, 구글 로그인을 사용하려면 맟춤 URL 스키마를 구성해주어야한다.
Xcode에 가서 프로젝트를 선택하고,
타겟에서 Info -> URL Types -> +버튼
반전된 클라이언트 아이디의 URL 스키마를 추가해주면 되는데, 이 말은
스키마 값은 Firebase를 설치할 때 추가했던 GoogleService-Info.plist를 열어보면 내부에 이미 REVERSED_CLIENT_ID값이 있다.
값을 복사 한 후, URL Types에 URL Schemes에 넣어준다.
다른 필드는 비어있어도 좋다. 이 값은 앱 서비스마다 모두 다른 값을 가지고, 구글은 권한을 위임한 서비스를 구분하게 된다.
이렇게 되면 사전작업은 모두 끝난다.
이 후 AppDelegate파일에 import GoogleSignIn해주고, google로 로그인 버튼이 있는 파일에도 import 해주며,
또한 AppDelegate에서 didFinishLaunchingWithOptions에서 FirebaseApp객체를 구성한다
FirebaseApp.configure()
또한 AppDelegate에서 함수 하나를 정의해 주는데, 이 메서드는 GIDSignIn 인스턴스의handleURL 메서드를 호출하여 인증 프로세스가 끝날 때 어플리케이션이 수신하는 URL을 적절히 처리해 준다
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
return GIDSignIn.sharedInstance.handle(url)
}
google로 로그인 버튼의 속성을 바꿔준다.
@IBOutlet weak var googleLoginButton: GIDSignInButton!
GIDSignInButton타입은 UIButton타입을 상속 하면서, 구글 로그인을 실행시켜주는 GoogleSignInSDK의 개체이다.
액션 탭
GIDSignInButton은 자동적으로 GIDSignIn을 호출하지 않는다. 그래서 파일 내에 googleLoginButtonAction IBAction메서드 내에 구현을 해주어야 한다.
guard let clientID = FirebaseApp.app()?.options.clientID else { return }
//구글 SignIn 객체를 만든다
let config = GIDConfiguration(clientID: clientID)
//구글로그인을 시작한다.
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
if let error = error {
print("ERROR", error.localizedDescription)
return
}
guard let authentication = user?.authentication,
let idToken = authentication.idToken else { return }
let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential) { _, _ in
self.showMainViewController()
}
}
앱의 프레젠테이션 뷰 컨트롤러 및 클라이언트 ID를 구글 로그인의 로그인 메서드에 전달한 후 반환되는 GOogle인증 토큰으로 부터 Firebase사용자 인증 정보를 만든다.