[Android] Kakao(카카오) SDK를 이용하여 로그인 구현하기 - 로그인

2022. 5. 27. 23:58·Android/Libraries
반응형

안녕하세요 이번에는 카카오 SDK를 이용해 로그인을 구현해보고자 합니다. 

 

일단 먼저 Kakao Developers에 접속합니다.

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

시작하기를 눌러 로그인을 합니다.

로그인을 하고 나면

Kakao Developers

애플리케이션 추가하기가 보일건데 눌러줍니다.

 

Kakao Developers

일단 개발용으로 사용할 것이기 때문에 내가 원하는 앱 이름, 사업자명을 적어주세요.

저는 둘 다 Jdroid를 적어 주었습니다.

 

이제 내 애플리케이션이 생겼습니다.

왼쪽 메뉴에 앱 설정 -> 플랫폼을 눌러줍니다. 저희는 안드로이드니까 Android 플랫폼 등록을 눌러줍니다.

패키지명을 적어 주어야 하는데 Android Studio에서 생성한 내 프로젝트의 패키지명을 적어주면 됩니다. 패키지명이 잘 못 입력되거나 상이할 경우 제대로 동작되지 않습니다.

그리고 마켓 URL은 없음, 키 해쉬는 일단 비워두고 저장합니다.

 

다음은 로그인 시 가져올 정보를 설정해 주겠습니다.

제품 설정 -> 카카오 로그인 -> 동의 항목으로 들어갑니다.

예제에서는 닉네임, 이메일, 연령대 3가지만 사용하겠습니다. 각 항목의 설정 버튼을 눌러 활성화 해줍니다.

Kakao Developers

이제 Android Studio에서 필요한 설정을 해주겠습니다.

먼저 Gradle Scripts -> Build.gradle(Module: app)으로 들어갑니다.

 

dependencies {
	...
    
    // Kakao Login
    implementation 'com.kakao.sdk:v2-user:2.10.0'
}

kakao sdk를 추가해주겠습니다.

다음 Gradle Scripts -> settings.gradle로 들어갑니다.

dependencyResolutionManagement {
		...
        
        maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/'}
    }
}

kakao sdk repository를 추가해준 후 Sync Now를 눌러주세요

 

Sync가 완료되었다면 이제 AndroidManifest로 들어가주세요

	<application
    	...>
    	...
        <activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:host="oauth"
                    android:scheme="kakao네이티브 앱 키" />
            </intent-filter>
        </activity>
    </application>

AndroidManifest에 넣어줍니다.

Kakao Developers

네이티브 앱 키는 Kakao Developers에 적혀있는 네이티브 앱 키를 적어주시면 됩니다.

 

 

 

만약에 네이티브 앱 키가 abcdefg라면 kakaoabcdefg로 적어주시면 됩니다!

 

이제 아까 등록할 때 비워뒀던 해쉬 키를 받아와서 적어줄건데요 방법은 여러가지가 있지만 KakaoSdk에서 편하게 받아올 수 있기 때문에 KakaoSdk를 통해 받아 오겠습니다.

MainActivity로 이동합니다.

 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        
		Log.d(TAG, "keyhash : ${Utility.getKeyHash(this)}")
    }

이거 한 줄만 적어주고 앱을 실행하여주고 로그를 확인합니다.

Logcat

혹시 모르실 분들을 위해 로그는 AndroidStudio 하단에 Logcat에서 보실 수 있습니다.

 

Logcat에서 TAG를 적어주시면 쉽게 찾으실 수 있습니다.

아까처럼 플랫폼에서 Android부분을 보시면 수정버튼이 있습니다. 수정을 눌러준 후 방금 획득한 Keyhash값을 입력하고 저장해줍니다.

 

이제 로그인을 구현해보겠습니다.

카카오 로그인은 카카오톡을 통해 로그인, 카카오 이메일을 통해 로그인 두 가지 방법이 있는데, 카카오톡이 있으면 카카오톡 로그인, 없으면 카카오 이메일 로그인방식으로 구현하겠습니다.

KakaoSdk.init(this, NATIVE_APP_KEY)

NATIVE_APP_KEY부분은 아까 사용하였던 네이티브 앱 키를 넣어주면 됩니다.

그리고나서

// 이메일 로그인 콜백
private val mCallback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
    if (error != null) {
        Log.e(TAG, "로그인 실패 $error")
    } else if (token != null) {
        Log.e(TAG, "로그인 성공 ${token.accessToken}")
    }
}

// 카카오톡 설치 확인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(this)) {
	// 카카오톡 로그인
    UserApiClient.instance.loginWithKakaoTalk(this) { token, error ->
    	// 로그인 실패 부분
        if (error != null) {
            Log.e(TAG, "로그인 실패 $error")
            // 사용자가 취소
            if (error is ClientError && error.reason == ClientErrorCause.Cancelled ) {
                return@loginWithKakaoTalk
            }
            // 다른 오류
            else {
                UserApiClient.instance.loginWithKakaoAccount(this, callback = mCallback) // 카카오 이메일 로그인
            }
        } 
        // 로그인 성공 부분
        else if (token != null) {
            Log.e(TAG, "로그인 성공 ${token.accessToken}")
        }
    }
} else {
    UserApiClient.instance.loginWithKakaoAccount(this, callback = mCallback) // 카카오 이메일 로그인
}

 카카오톡 설치를 확인하고 설치되어 있으면 카카오톡 로그인, 설치가 안되어 있다면 카카오 이메일 로그인으로 넘어가게 됩니다.

 여기서 로그인이 실패하게 된다면 if문을 타고 사용자가 취소했을 때는 그대로 return하여 login이 취소되고, 사용자가 취소한게 아니라면 이메일 로그인으로 넘어가게 됩니다.

 mCallback은 이메일 로그인의 callback인데, 두 군데에서 로그인이 사용되기 때문에 따로 callback을 변수로 만들어 코드를 간결하게 만들었습니다.

 로그인이 성공한다면 accessToken, refreshToken 등이 발급이 되게됩니다.

if (AuthApiClient.instance.hasToken()) {
    UserApiClient.instance.accessTokenInfo { _, error ->
        if (error != null) {
            if (error is KakaoSdkError && error.isInvalidTokenError() == true) {
                //로그인 필요
            }
            else {
                //기타 에러
            }
        }
        else {
            //토큰 유효성 체크 성공(필요 시 토큰 갱신됨)
        }
    }
}
else {
    //로그인 필요
}

 Token이 만료되어 갱신이 필요하거나 로그인이 필요한 상태 등은 위의 방법으로 체크가 가능합니다.

로그인 필요 부분은 로그인 로직으로 넘어가면 되고, 로그인이 된 상태라면 내가 원하는 동작을 할 수 있겠죠?

그러면 사용자의 닉네임, 이메일, 연령대를 가져와 보도록 하겠습니다.

UserApiClient.instance.me { user, error ->
    if (error != null) {
        Log.e(TAG, "사용자 정보 요청 실패 $error")
    } else if (user != null) {
        Log.e(TAG, "사용자 정보 요청 성공 : $user")
        binding.txtNickName.text = user.kakaoAccount?.profile?.nickname
        binding.txtAge.text = user.kakaoAccount?.ageRange.toString()
        binding.txtEmail.text = user.kakaoAccount?.email
    }
}

저는 3개의 TextView를 만들어 각각에 닉네임, 이메일, 연령대를 가져와 설정해 주었습니다.

 

제가 간단하게 만든 예제를 보여드리면서 마무리하겠습니다.

 

GitHub - won-droid/function

Contribute to won-droid/function development by creating an account on GitHub.

github.com

 

글에 문제가 있거나 궁금하신 점 있으시면 댓글이나, 방명록 남겨주세요!

반응형

'Android > Libraries' 카테고리의 다른 글

[Android] 안드로이드 Permission(권한) 예제 - 연락처/주소록 만들기 (권한 획득, 연락처 불러오기)  (0) 2022.07.24
[Android] Parcelable 생성 Parcelize로 편하게 생성하기(with Serializable)  (0) 2022.07.24
[Android] 안드로이드 Permission(권한) 종류 및 권한 획득 예제(지문인증 / 생체 인증)  (0) 2022.07.11
[Android] 안드로이드12 대응 SplashScreen(스플래시 스크린) 만들기  (1) 2022.07.09
[Android] Glide를 사용하여 ImageView에 사진 불러오기  (0) 2022.07.03
'Android/Libraries' 카테고리의 다른 글
  • [Android] Parcelable 생성 Parcelize로 편하게 생성하기(with Serializable)
  • [Android] 안드로이드 Permission(권한) 종류 및 권한 획득 예제(지문인증 / 생체 인증)
  • [Android] 안드로이드12 대응 SplashScreen(스플래시 스크린) 만들기
  • [Android] Glide를 사용하여 ImageView에 사진 불러오기
W_JIN
W_JIN
안드로이드 개발을 공부하는 3년차 개발자입니다.
  • W_JIN
    W.JIN
    W_JIN
  • 전체
    오늘
    어제
    • 전체 (24)
      • Android (23)
        • Design (10)
        • Libraries (8)
        • Others (5)
      • Flutter (0)
        • Design (0)
        • Libraries (0)
        • Others (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    frame
    iCon
    레이아웃
    아이콘
    색상
    Android
    설정
    constraint
    linear
    뷰
    textview
    안드로이드
    android studio
    사용 방법
    안드로이드 스튜디오
    방법
    COLOR
    layout
    연락처
    사용법
    contacts
    contact
    fonts
    사용방법
    parcelize
    Grid
    다운로드
    권한
    종류
    permission
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
W_JIN
[Android] Kakao(카카오) SDK를 이용하여 로그인 구현하기 - 로그인
상단으로

티스토리툴바