[Android] 카카오 로그인 구현하기 (2024 ver)
코틀린으로 카카오 로그인을 구현하는 방법을 다룬 적이 있는데, 사이드 프로젝트에 카카오 로그인을 추가하면서 확인해 보니 여러가지 바뀐 점이 있어 다시 작성한다. 3년 전에 쓴 글이라 더 이상 유용하지 않아서 다시 작성하려는 것도 있다.
해시키를 구하기까지의 과정은 이전 포스팅과 동일하다.
https://onlyfor-me-blog.tistory.com/296
app gradle에 카카오 로그인 의존성을 추가해야 한다. 아래 링크에서 확인할 수 있다.
https://developers.kakao.com/docs/latest/ko/android/getting-started#apply-sdk-select-module
오늘 기준으로 최신 의존성은 아래와 같다. 자신의 프로젝트에 맞춰서 추가한다.
dependencies {
implementation "com.kakao.sdk:v2-all:2.20.1" // 전체 모듈 설치, 2.11.0 버전부터 지원
implementation "com.kakao.sdk:v2-user:2.20.1" // 카카오 로그인 API 모듈
implementation "com.kakao.sdk:v2-share:2.20.1" // 카카오톡 공유 API 모듈
implementation "com.kakao.sdk:v2-talk:2.20.1" // 카카오톡 채널, 카카오톡 소셜, 카카오톡 메시지 API 모듈
implementation "com.kakao.sdk:v2-friend:2.20.1" // 피커 API 모듈
implementation "com.kakao.sdk:v2-navi:2.20.1" // 카카오내비 API 모듈
implementation "com.kakao.sdk:v2-cert:2.20.1" // 카카오톡 인증 서비스 API 모듈
}
그리고 settings.gradle.kts 파일에 한 줄 추가하는 부분이 있는데, 아래와 같이 수정하라고 한다.
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = java.net.URI("https://devrepo.kakao.com/nexus/content/groups/public/") }
}
}
그러나 이렇게 하니 "Could not get unknown property 'java' for object of type ~~" 에러가 발생했다.
이 에러가 발생하면 아래와 같이 등호 옆에 곧바로 url을 넣으면 된다.
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = "https://devrepo.kakao.com/nexus/content/groups/public/" }
}
}
이제 Application에 한 줄을 추가한다.
import android.app.Application
import com.kakao.sdk.common.KakaoSdk
import com.example.myapp.BuildConfig
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class App: Application() {
override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, BuildConfig.KAKAO_NATIVE_KEY) // 추가
}
}
hilt를 사용하고 local.properties에 카카오 디벨로퍼에서 확인한 네이티브 키를 추가했기 때문에 이런 형태임을 참고한다.
이제 카카오 로그인 함수를 추가한다. 곧 리팩토링할 예정이지만 일단 카카오 로그인 관련 함수들을 담아둘 클래스를 만들고 hilt를 적용했다. hilt를 사용하지 않는다면 hilt 키워드만 제거하면 된다.
import android.content.Context
import com.kakao.sdk.user.UserApiClient
import javax.inject.Inject
class KakaoAuthClient @Inject constructor() {
fun loginWithKakaoTalk(
context: Context,
onSuccess: (String) -> Unit,
onFailure: (Throwable) -> Unit,
) {
UserApiClient.instance.loginWithKakaoTalk(context) { token, error ->
if (error != null) {
onFailure(error)
} else if (token != null) {
onSuccess(token.accessToken)
}
}
}
}
남은 건 클릭 리스너 안에 위 함수를 넣어서 유저가 버튼을 탭하면 카카오 로그인을 할 수 있도록 하는 것 뿐이다.
clKakaoLogin.setOnClickListener {
kakaoAuthClient.loginWithKakaoTalk(
context = this@LoginActivity,
onSuccess = { token ->
Logger.e("## 카카오 로그인 성공. 토큰 : $token")
startActivity(Intent(this@LoginActivity, MainActivity::class.java))
finish()
},
onFailure = { error ->
Logger.e("## 카카오 로그인 실패 : $error ")
}
)
}
카카오계정으로 로그인 기능을 원한다면 loginWithKakaoAccount()를 구현하면 된다.
그 외는 카카오 공식문서와 구글링으로 충분히 해결할 수 있을 것이다.
참고한 사이트)
https://developers.kakao.com/docs/latest/ko/kakaologin/android#login-with-kakaoaccount