Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sqlite
- Coroutine
- lifecycle
- CustomView
- CollapsingToolbarLayout
- View
- 안드로이드
- 백준
- onLayout
- ViewModel
- CoordinatorLayout
- hilt
- Behavior
- Navigation
- 알림
- onMeasure
- Android
- kotlin
- AppBarLayout
- HTTP
- activity
- 알고리즘
- 코틀린
- DataBinding
- Algorithm
- notification
- LiveData
- room
- recyclerview
- BOJ
Archives
- Today
- Total
개발일지
Android in A..Z - OAuth (Google) 본문
Google API를 사용해서 Google인증과 Google OAuth로 얻은 idToken값으로 People API를 사용하여 사용자의 다양한 정보를 얻을 수 있다.
OAuth를 사용하면 프로젝트 자체에서 회원관리 기능을 구현할 필요가 없고 Google의 AccessToken으로 사용자의 정보를 받아오기 때문에 기존 ID/Password방식보다 보안이 좋다. 또한 사용자 입장에서 한번의 클릭으로 쉽게 로그인할 수 있는 이점이 있다.
1. Google API 콘솔 프로젝트 구성 만들기
2. OAuth 동의화면 구성 만들기
3. OAuth 클라이언트 ID 등록하기 (앱 등록하기)
4. Gradle 설정하기
apply plugin: 'com.android.application'
...
dependencies {
implementation 'com.google.android.gms:play-services-auth:19.0.0'
}
5. Google Login 옵션 설정 및 Client 개체 설정
프로필을 얻으려면 requestProfile() 기타 Google API에 엑세스 하려면 requestScopes로 지정한다.
=> onCreate에서 실행해서 초기화한다.
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build()
val client = GoogleSignIn.getClient(this, gso)
6. 로그인 진행
Client 개체로부터 Intent를 받고 startactivityForResult로 실행한다.
fun onLogin() {
val signInIntent: Intent = client.signInIntent
startActivityForResult(signInIntent, GOOGLE_LOGIN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode) {
GOOGLE_LOGIN -> {
try {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
val account = task.result!!
Log.d("PASS", account.email ?: "")
} catch (e: ApiException) {
e.printStackTrace()
}
}
}
}
7. 로그아웃
fun onLogout() {
when(viewModel.type) {
MainActivityViewModel.GOOGLE -> {
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.build()
val client = GoogleSignIn.getClient(requireActivity(), gso)
client.signOut().addOnCompleteListener {
findNavController().navigateUp()
}
}
}
}
* 이미 로그인된 사용자 정보 받기
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
Git (예제코드)
github.com/KangTaeJong98/Example/tree/main/Android/OAuth
developers.google.com/identity/sign-in/android/start-integrating
'Android (안드로이드) > OAuth' 카테고리의 다른 글
Android in A..Z - OAuth (Naver) (0) | 2021.05.07 |
---|---|
Android in A..Z - OAuth (Kakao) (0) | 2021.05.05 |
Android in A..Z - OAuth (People) (0) | 2021.05.04 |
Comments