[안드로이드 / 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
  • 인기 글

  • 태그

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

  • 최근 글

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

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.