구글 로그인
구글 공식문서 보면 전부 진행 가능합니다.
- SDK 파일
git clone <https://github.com/google/GoogleSignIn-iOS>
에서 SPM 파일을 다운받으면 되고 CocoaPods 의 경우에는
pod 'GoogleSignIn'
을 입력하고 pod install 을 입력합니다.
다음으로 OAuth를 입력해야 합니다.
- Google 개발자 콘솔에서 앱 등록:
- **Google 개발자 콘솔**에 로그인하고, 새로운 프로젝트를 만듭니다.
- 프로젝트가 만들어지면, 좌측 메뉴에서 "API 및 서비스" -> "사용자 인증 정보" -> "OAuth 동의 화면"을 클릭하고, "앱 등록"을 합니다.
- 등록한 앱에 대한 정보를 입력하고, 저장합니다.
다음으로 OAuth 클라이언트 ID 및 맞춤 URL 스킴 추가
발급된 CLIENTID는 두개가 있을텐데 스카마용으로 com.~~~~으로 작성된것은 url type에 작성하고 info.plist 에는 똑바로 적혀있는 id를 작성해줍니다.
- 구글 로그인 추가
구글 로그인 기능을 추가하기 위해 Appdelegate에 코드를 추가해줍니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool {
func application(_ app: UIApplication,open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
GIDSignIn.sharedInstance.restorePreviousSignIn{
user, error in
if error != nil || user == nil {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}
return true
}
return false
}
- 원하는 view를 추가하여 Google Login 버튼을 만들어 줍니다.
- 사용자 정보를 검색하고 액세스를 승인하기 위해서 GIDGoogleUser 객체를 추가해 줍니다.
//viewController
let signInConfig = GIDConfiguration(clientID: "클라이언트 id")
@IBAction func signIn(sender: Any) {
GIDSignIn.sharedInstance.signIn(with: signInConfig,presenting: self) { (user: GIDGoogleUser?, error: Error?) in
guard error == nil else { return }
guard let user = user else { return }
//
// user.refreshTokensIfNeeded { (user: GIDGoogleUser?, error: Error?) in
// guard error == nil else { return }
// guard let user = user else { return }
let idToken = user.authentication.idToken
let emailAddress = user.profile?.email
self.sendIDTokenToServer(idToken: idToken) { data in
print(data )
}
}
저같은 경우에는 login 버튼을 눌럿을 경우 Sign이 가능하게 만들었습니다.
- 서버로 idToken 내리기
Post 방식으로 idToken을 추가해주고 정상적으로 받앗는지 확인합니다.
func sendIDTokenToServer(idToken: String?, completion: @escaping (GoogleSignUpModel?) -> ()) {
// 1
let url = URL(string: "보낼 서버 주소url")! // 서버 URL
//2
var request = URLRequest(url: url)
request.httpMethod = "POST"
//3
let token = ["token": idToken]
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
// 4 json encoding 하기
do {
let jsonData = try JSONSerialization.data(withJSONObject: token, options: [.prettyPrinted])
// 5 바디에 담기
request.httpBody = jsonData
} catch {
print(error)
}
//요청 6
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
completion(nil)
}
//7 되면 말하기
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
print("Error: HTTP status code \\(httpStatus.statusCode)")
return
}
if let jsonData = data {
do {
let decode = JSONDecoder()
let responseData = try decode.decode(GoogleSignUpModel.self, from: jsonData)
completion(responseData)
} catch {
completion(nil)
}
}
}
task.resume() //보내고
}
urlSession으로 주고받는 과정을 번호 순서로 담았으니 참고바랍니다.
'IOS - Swift' 카테고리의 다른 글
[Swift/에러해결] [NSNUll pointsize] Sizunrecognized selector sent to instance (0) | 2023.03.29 |
---|---|
[iOS/Xcode] CocoaPods 설치 오류(gem) (0) | 2023.03.03 |
[iOS/Swift] 애플로그인 (0) | 2023.02.27 |
[iOS/Swift] presentedViewController / presentingViewController (0) | 2023.01.29 |
[WWDC2022] What’s new in UIKit (0) | 2023.01.29 |