일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AppBarLayout
- LiveData
- Behavior
- 알림
- kotlin
- CoordinatorLayout
- onLayout
- hilt
- View
- DataBinding
- Algorithm
- notification
- activity
- onMeasure
- 코틀린
- room
- Android
- 안드로이드
- Navigation
- recyclerview
- HTTP
- sqlite
- lifecycle
- 백준
- ViewModel
- BOJ
- CustomView
- 알고리즘
- CollapsingToolbarLayout
- Coroutine
- Today
- Total
개발일지
Android in A..Z - OAuth (Kakao) 본문
1. 프로젝트 등록
developers.kakao.com/console/app
2. Gradle 설정
build.gradle(Project)
allprojects {
repositories {
google()
jcenter()
// Kakao
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}
}
build.gradle(Module)
dependencies {
implementation "com.kakao.sdk:v2-user:2.5.0" // 카카오 로그인
}
3. KeyHash 얻기
keyHash를 얻고 Log로 출력하여 복사한다.
import com.kakao.sdk.common.util.Utility
var keyHash = Utility.getKeyHash(this)
4. 앱 등록하기
플랫폼에 들어가서 3번에서 얻은 KeyHash를 통해 Android 플랫폼을 등록한다.
5. 카카오 로그인 ON으로 설정하기
제품설정 -> 카카오 로그인에서 활성화 설정을 ON으로 바꾼다.
6. 동의항목 설정하기
제품설정 -> 카카오 로그인 -> 동의항목에서 얻고싶은 정보를 체크한다.
7. Key 등록하기
네이티브 앱 키를 string.xml에 등록하여 8번과 9번에서 사용한다.
8. Redirect URI 설정하기
AndroidManifest.xml에 등록한다. 예를 들어 네이티브 앱 키가 '123456789'라면 'kakao123456789'를 입력합니다.
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth" -->
<data android:host="oauth"
android:scheme="kakao{NATIVE_APP_KEY}" />
</intent-filter>
</activity>
9. Application설정하기
Application을 상속받는 Class를 만들고 onCreate에 KakaoSdk를 초기화하는 코드를 작성한다. 그리고 AndroidManifest.xml에서 Application을 설정한다.
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, getString(R.string.kakao_api_key))
}
}
<application
android:name=".MainApplication"
10. 로그인 코드
로그인을 진행할 때 디바이스에 카카오톡이 설치된 상태면 카카오톡으로 로그인할 수 있고 설치되지 않은 상태면 브라우저로 로그인할 수 있다.
- isKaKAoTalkLoginAvailable : 카카오톡으로 로그인이 가능한지
- loginWithKakaoTalk : 카카오톡으로 로그인
- loginWithKakaoAccount : 카카오톡 계정으로 로그인 (브라우저 기반)
val callback: (OAuthToken?, Throwable?) -> Unit = callback@{ token, error ->
if (error != null) {
Log.e("PASS", "로그인 실패", error)
} else if (token != null) {
Log.d("PASS", token.toString())
}
}
if (UserApiClient.instance.isKakaoTalkLoginAvailable(this)) {
UserApiClient.instance.loginWithKakaoTalk(this, callback = callback)
} else {
UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
}
11. 추가 정보 가져오기
Login을 하여 token을 캐쉬에 저장하고 loginWithNewScopes로 필요 정보를 담은 Scope를 통해 추가 정보를 가져온다. 이때 가져온 정보는 me를 통해 확인할 수 있다.
val callback: (OAuthToken?, Throwable?) -> Unit = callback@{ _, error1 ->
if (error1 != null) {
Log.e("PASS", "로그인 실패", error1)
return@callback
}
val scopes = listOf("account_email", "birthday", "gender")
UserApiClient.instance.loginWithNewScopes(requireContext(), scopes) { _, error2 ->
if (error2 != null) {
Log.e("PASS", "사용자 추가 정보 획득 로그인 실패", error2)
return@loginWithNewScopes
}
UserApiClient.instance.me { user, error3 ->
if (error3 != null) {
Log.e("PASS", "사용자 추가 정보 획득 실패", error3)
return@me
}
with(viewModel) {
email = user?.kakaoAccount?.email
gender = user?.kakaoAccount?.gender?.name
birth = null
name = user?.kakaoAccount?.profile?.nickname
type = "Kakao"
}
findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToProfileFragment())
}
}
}
if (UserApiClient.instance.isKakaoTalkLoginAvailable(requireContext())) {
UserApiClient.instance.loginWithKakaoTalk(requireContext(), callback = callback)
} else {
UserApiClient.instance.loginWithKakaoAccount(requireContext(), callback = callback)
}
12. 로그아웃
// 로그아웃
UserApiClient.instance.logout { error ->
if (error != null) {
Log.e(TAG, "로그아웃 실패. SDK에서 토큰 삭제됨", error)
}
else {
Log.i(TAG, "로그아웃 성공. SDK에서 토큰 삭제됨")
}
}
Git (예제코드)
github.com/KangTaeJong98/Example/tree/main/Android/OAuth
developers.kakao.com/docs/latest/ko/kakaologin/android
developers.kakao.com/docs/latest/ko/getting-started/sdk-android#select-module
'Android (안드로이드) > OAuth' 카테고리의 다른 글
Android in A..Z - OAuth (Naver) (0) | 2021.05.07 |
---|---|
Android in A..Z - OAuth (People) (0) | 2021.05.04 |
Android in A..Z - OAuth (Google) (2) | 2021.05.04 |