요즘 많은 앱에서 sns 로그인 기능을 사용하고 있습니다. 그 중 카카오 로그인은 거의 필수적으로 들어가는 요소 중 하나입니다. 저도 기존 카카오에서 제공하는 SDK v1을 사용하다가 최근 안드로이드 12 업데이트가 진행됨에 따라 문제가 발생하여 카카오 로그인 SDK v2로 대체했습니다.
오늘은 간단하게 카카오 로그인 SDK v2 사용하는법을 알아보도록 하겠습니다.
* SDK 설치방법은 카카오 개발자 문서에 상세하게 설명되어있으므로 참고하시면 되겠습니다.
https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
<소스코드>
class KakaoLogin {
private final val TAG = "KakaoLogin"
var user: User? = null // 로그인한 사용자정보
var listener: KakaoLoginListener? = null // 콜백결과 넘겨줄 리스너
interface KakaoLoginListener{
fun onKakaoLoginResult(user: User?)
}
companion object {
@JvmStatic
val instance by lazy { KakaoLogin() }
}
/**
* Api결과에 대한 콜백
*/
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if(error != null) {
println("xxx KakaoLogin(): 카카오로그인 실패")
if(listener != null) listener!!.onKakaoLoginResult(null)
} else if(token != null) {
println("xxx KakaoLogin(): 카카오로그인 성공")
requestUser()
} else {
println("xxx KakaoLogin(): 예외사항")
}
}
/**
* 로그인
* loginWithKakaoTalk: 카톡으로 로그인
* loginWithKakaoAccount: 카톡계정으로 로그인(웹)
*/
fun login(context: Context) {
println("xxx KakaoLogin: login()")
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
UserApiClient.instance.loginWithKakaoTalk(context, callback = callback)
} else {
UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
}
}
/**
* 로그아웃
*/
fun logout() {
UserApiClient.instance.logout { error -> }
}
/**
* 연결끊기
*/
fun disconnect() {
UserApiClient.instance.unlink { error ->
if (error != null) {
println("xxx KakaoLogin(): 카카오 연결 끊기 실패")
}
else {
println("xxx 카카오 연결 끊기 성공. SDK에서 토큰 삭제 됨")
}
}
}
/**
* 사용자 정보 요청
* 필수사항: 이메일
*/
fun requestUser() {
UserApiClient.instance.me { user, error ->
if (error != null) {
Log.e(TAG, "xxx 사용자 정보 요청 실패")
} else if (user != null) {
Log.i(TAG, "xxx 사용자 정보 요청 성공" +
"\n회원번호: ${user.id}" +
"\n이메일: ${user.kakaoAccount?.email}" +
"\n닉네임: ${user.kakaoAccount?.profile?.nickname}"
)
this.user = user
if(listener != null) listener!!.onKakaoLoginResult(user)
}
}
}
}
// 카카오 로그인을 구현할 액티비티 내
// KakaoLogin.KakaoLoginListener를 상속받아 구현
KakaoLogin.instance.listener = this
KakaoLogin.instance.login(this)
먼저 login()에서는 카카오 로그인 기능을 구현했습니다.
카카오 로그인은 (1)휴대폰에 깔려있는 카카오톡으로 로그인하는 방법과 (2)웹을 띄워서 로그인하는 방법으로 나뉘어집니다. 카카오 로그인에 대한 결과 값은 callback 변수를 통해 받을 수 있습니다.
로그인 외에도 로그아웃, 연결끊기, 사용자 정보 요청기능은 각각 logout(), disconnect(), requestUser()를 통해 구현하였습니다.
KakaoLogin 클래스에서 받은 데이터들은
KakaoLoginListener를 이용해서 사용할 액티비티 내에 전달하여 사용했습니다.
* 제가 작성한 것 외에도 더 많은 기능들을 카카오에서 제공하는데 카카오 개발자 문서를 참고하시면 되겠습니다.
https://developers.kakao.com/docs/latest/ko/kakaologin/android
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
'Android' 카테고리의 다른 글
[안드로이드 / Kotlin] Retrofit2 (0) | 2022.01.15 |
---|---|
[안드로이드 / Kotlin] 생체 인식 인증 사용하기 (0) | 2022.01.07 |
[안드로이드 / Kotlin] Int형을 Byte Array로 나타내기 (0) | 2022.01.03 |
[안드로이드 / Kotlin] 블루투스 상태 체크 (0) | 2021.12.11 |
[안드로이드 / Kotlin] 기기 해상도 가져오기 (0) | 2021.12.03 |