[안드로이드 / Kotlin] 카카오 로그인 SDK v2 사용하기

2022. 1. 7. 13:59·Android
반응형

요즘 많은 앱에서 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
'Android' 카테고리의 다른 글
  • [안드로이드 / Kotlin] Retrofit2
  • [안드로이드 / Kotlin] 생체 인식 인증 사용하기
  • [안드로이드 / Kotlin] Int형을 Byte Array로 나타내기
  • [안드로이드 / Kotlin] 블루투스 상태 체크
서주냥
서주냥
간단한 것도 기록하는 습관을 가지자
  • 서주냥
    DroidLog
    서주냥
  • 전체
    오늘
    어제
    • 전체보기 (58)
      • 알고리즘 (12)
        • 백준 (4)
        • 프로그래머스 (5)
        • 개념 (3)
      • Android (43)
        • Compose (1)
      • Java (2)
      • Kotlin (1)
  • 링크

    • GitHub
  • 인기 글

  • 태그

    코틀린
    Hilt
    debounce
    클린 아키텍처
    Coroutine Flow
    이진 탐색
    다이나믹 프로그래밍
    Coroutine
    moshi
    SnackBar
    뷰모델
    안드로이드
    FusedLocationProviderClient
    투 포인터
    최단 경로
    자바
    viewpager2
    BLE
    코루틴
    Clean Architecture
    프로그래머스
    벨만 포드
    알고리즘
    reified
    textunit
    ConstraintLayout
    백준
    viewmodel
    블루투스
    RecyclerView
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
서주냥
[안드로이드 / Kotlin] 카카오 로그인 SDK v2 사용하기
상단으로

티스토리툴바