iOS
...
Users
Google 계정으로 iOS 애플리케이션에 사용자 로그인 구현 방법
12 분
구글로 로그인하기 소개 요즘 애플리케이션은 여러 가지 로그인 방법을 제공하는 것이 일반적입니다 따라서 사용자에게는 이미 가지고 있는 계정, 예를 들어 구글 계정이나 애플 id로 로그인하는 것이 더 쉽습니다 또한, 소셜 네트워크(예 페이스북)는 개발자가 소셜 네트워크 자격 증명을 사용하여 로그인 옵션을 통합할 수 있도록 sdk를 제공합니다 이 가이드는 먼저 구글에서 제공하는 로그인 기능을 통합하는 것으로 시작합니다 사용자가 구글 자격 증명으로 성공적으로 로그인하면, 우리는 구글에서 반환된 계정 정보를 사용하여 해당 구글 계정과 연결된 새로운 사용자를 로그인시킵니다 이 저장소 , 우리는 구현 중인 다양한 로그인 방법을 테스트할 수 있는 간단한 xcode 템플릿을 제공합니다 이 프로젝트는 이전 가이드 https //www back4app com/docs/ios/parse swift sdk/users/user log in , 에서 이미 소개되었습니다 프로젝트에 대한 자세한 내용은 다시 방문할 수 있습니다 전제 조건 이 빠른 시작을 완료하려면 다음이 필요합니다 xcode back4app에서 생성된 앱 다음 new parse app 튜토리얼 을 따라 back4app 에서 parse 앱을 만드는 방법을 배우세요 참고 다음 parse sdk (swift) 설치 튜토리얼 을 따라 back4app 에 연결된 xcode 프로젝트를 만드세요 목표 google의 sdk와 함께 사용자 로그인 기능을 통합하는 것입니다 parseswift 1 google의 sdk 설정 xcode 프로젝트가 연결된 후, 로그인 흐름을 구현할 수 있도록 google의 sdk를 추가합니다 이 예제에서는 swift package manager (spm)을 사용하여 google sign in 종속성을 추가합니다 xcode 프로젝트에서 파일 > 패키지 추가… 로 이동하고 검색창에 https //github com/google/googlesignin ios 를 입력하세요 결과에 googlesignin ios 옵션이 나타나면 add package 버튼을 클릭하세요 다음으로, 대시보드 로 가서 새 프로젝트를 생성 하세요 프로젝트가 생성되면, 다음 단계는 oauth 클라이언트 id를 생성하는 것입니다 google 클라우드 콘솔 에서 새 프로젝트를 선택하고 자격 증명 페이지로 이동하세요 이는 왼쪽 메뉴에서 찾을 수 있습니다 이 과정에서 google로 로그인할 때 나타나는 oauth 동의 화면을 설정하고 해당 요구 사항을 채워야 할 수도 있습니다 이 단계의 결론을 내리기 위해, oauth 클라이언트 id 생성 중에 생성된 url을 앱의 url 스킴에 추가해야 합니다 프로젝트 구성으로 이동하여 주요 앱 대상을 선택합니다 그런 다음 info 섹션으로 가서 google 프로젝트에서 해당 url 스킴을 추가합니다 2 parseswift와 함께 google 로그인 사용하기 googlesignin 이 성공적으로 xcode 프로젝트에 통합되었으므로, google로 로그인 기능을 구현합니다 프로젝트 예제 , logincontroller 가 다양한 로그인 옵션을 처리하고 표시하는 역할을 합니다 그런 다음 이 컨트롤러에서 signinwithapplebutton 동작을 설정합니다 1 // logincontroller swift file 2 import googlesignin 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithgooglebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "googleicon"), for normal) 11 button imageview? contentmode = scaleaspectfit 12 return button 13 }() 14 15 override func viewdidload() { 16 super viewdidload() 17 // 18 // layout configuration 19 // 20 21 signinwithgooglebutton addtarget(self, action #selector(handlesigninwithgoogle), for touchupinside) 22 } 23 } 24 25 // mark sign in with google section 26 extension logincontroller { 27 @objc fileprivate func handlesigninwithgoogle() { 28 // todo here we will implement the sign in procedure 29 } 30 } google의 로그인 양식을 표시하기 위해, googlesignin googlesignin sdk는 이를 설정하고 다음의 signin(with\ presenting\ callback) signin(with\ presenting\ callback) 메서드를 통해 표시할 수 있도록 합니다 gidsignin gidsignin 클래스에서 추가로, 우리는 gidconfiguration gidconfiguration 객체를 이전 단계에서 생성한 client id 를 사용하여 인스턴스화한 후, 표시할 뷰 컨트롤러와 콜백 클로저를 전달해야 합니다 콜백 클로저에서 google은 사용자 자격 증명( gidgoogleuser gidgoogleuser 객체에 포함됨) 또는 인증이 실패한 경우 오류를 반환합니다 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 5 6 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 7 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } 12 13 // after google returns a successful sign in, we get the users id and idtoken 14 guard let googleuser = googleuser, 15 let userid = googleuser userid, 16 let idtoken = googleuser authentication idtoken 17 else { fatalerror("this should never happen!?") } 18 19 // todo sign in the user in your back4app application 20 } 21 } 22 } 그런 다음 이러한 자격 증명을 사용하여 back4app 플랫폼에서 사용자를 로그인합니다 사용자를 나타내는 객체는 다음 구조체입니다(자세한 내용은 이전 가이드 https //www back4app com/docs/ios/parse swift sdk/users/user log in 를 참조하세요) 1 import parseswift 2 3 struct user parseuser { 4 5 6 var username string? 7 var email string? 8 var emailverified bool? 9 var password string? 10 11 var age int? 12 } 따라서 google에서 반환된 자격 증명에는 idtoken idtoken 과 사용자의 id id 가 포함되어 있으며, 이는 로그인 프로세스를 완료하는 데 사용됩니다 더 정확하게는, 우리는 parsegoogle\<user> parsegoogle\<user> 객체를 인스턴스화하고 login(id\ idtoken\ completion) login(id\ idtoken\ completion) 메서드를 호출합니다 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 gidsignin sharedinstance signout() // this should be called when the user logs out from your app for login testing purposes, we are calling it each time the user taps on the 'signinwithgooglebutton' button 5 6 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 7 8 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 9 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 10 if let error = error { 11 self? showmessage(title "error", message error localizeddescription) 12 return 13 } 14 15 // after google returns a successful sign in, we get the users id and idtoken 16 guard let googleuser = googleuser, 17 let userid = googleuser userid, 18 let idtoken = googleuser authentication idtoken 19 else { fatalerror("this should never happen!?") } 20 21 // with the user information returned by google, you need to sign in the user on your back4app application 22 user google login(id userid, idtoken idtoken) { result in 23 // returns the user object asociated to the gidgoogleuser object returned by google 24 switch result { 25 case success(let user) 26 // after the login succeeded, we send the user to the home screen 27 // additionally, you can complete the user information with the data provided by google 28 let homecontroller = homecontroller() 29 homecontroller user = user 30 31 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 32 case failure(let error) 33 // handle the error if the login process failed 34 self? showmessage(title "failed to sign in", message error message) 35 } 36 } 37 } 38 } 39 } 3 사용자 로그인 및 세션 생성 확인 google 로그인이 제대로 작동했는지 확인하려면, back4app 애플리케이션 대시보드를 확인하고 새로운 사용자 사용자 , google authdata authdata 매개변수를 확인할 수 있습니다 대시보드에서 유효한 세션이 생성되었는지 확인할 수도 있으며, 해당 사용자 사용자 객체에 대한 포인터가 포함되어 있습니다 4 기존 사용자와 google 계정 연결하기 ios 앱이 back4app 플랫폼의 기존 사용자와 google 계정을 연결해야 하는 경우, parsegoogle\<user> parsegoogle\<user> 객체는 link(id\ completion ) link(id\ completion ) 메서드를 구현하며, 여기서 연결할 google 계정의 id id 를 전달합니다 1 let googleuserid string // the id of the google account to link to 2 3 user google link(id googleuserid) { \[weak self] result in 4 switch result { 5 case success(let user) 6 // linking succeeded, user object now is linked to the corresponding google account 7 case failure(let error) 8 // linking failed, handle the error 9 } 10 } 5 로그아웃 로그아웃 과정은 user signout() user signout() 메서드를 호출하는 표준 방법과 다르지 않습니다(이전 가이드에서 자세히 설명됨) 그러나 사용자가 google 계정으로 로그인할 때 일관성을 위해 현재 google 사용자도 로그아웃해야 합니다 이는 다음 메서드를 user signout() user signout() 을 호출하여 수행할 수 있습니다 현재 사용자가 연결된 google 계정이 있는지 확인하려면 user current? authdata user current? authdata 사전을 확인하여 확인할 수 있습니다 6 앱 실행하기 이 저장소 로 가서 예제 프로젝트를 다운로드할 수 있습니다 프로젝트를 실행하기 전에 개발자 계정과 연결된 프로비저닝 프로필을 설정했는지 확인하세요 결론 이 가이드의 끝에서, google로 로그인하거나 기존 back4app 사용자를 ios에서 연결하는 방법을 배웠습니다 다음 가이드에서는 다른 로그인 방법에 대해 계속 진행할 것입니다