문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.
Faq 목록 - 10. Android ( Faq 목록 입니다 ) 먼저 확인해주세요.
카카오 로그인 api 안드로이드 용 개발 문서 참조 후.
로그인 동작을 확인하려던 중 다음과 같은 시스템 에러가 발생했습니다.
개발 문서 대로 빠짐없이 파일 적용해 주었고요.
발생한 시스템 에러입니다.
kotlin.UninitializedPropertyAccessException: lateinit property hosts has not been initialized
at com.kakao.sdk.common.KakaoSdk.getHosts(KakaoSdk.kt:43)
at com.kakao.sdk.auth.network.ApiFactoryKt$kapiWithOAuth$2.invoke(ApiFactory.kt:30)
at com.kakao.sdk.auth.network.ApiFactoryKt$kapiWithOAuth$2.invoke(ApiFactory.kt:28)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.kakao.sdk.auth.network.ApiFactoryKt.getKapiWithOAuth(ApiFactory.kt:28)
at com.kakao.sdk.user.UserApiClient.<init>(UserApiClient.kt:46)
at com.kakao.sdk.user.UserApiClient$Companion$instance$2.invoke(UserApiClient.kt:443)
at com.kakao.sdk.user.UserApiClient$Companion$instance$2.invoke(UserApiClient.kt:443)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.kakao.sdk.user.UserApiClient$Companion.getInstance(UserApiClient.kt:443)
at com.kakao.sdk.user.UserApiClient.getInstance(Unknown Source:2)
at kr.co.avad.marineinfo.WebAppInterface.kakaoLogin(WebAppInterface.java:152)
at android.os.MessageQueue.nativePollOnce(Native Method)
사용한 코드
※ 참고로 sdk init 코드상에 적용된 상태입니다.
‘UserApiClient.instance.isKakaoTalkLoginAvailable(context)’ ← 이 부분에서 에러 로그가 찍힘.
// 로그인 조합 예제
// 카카오계정으로 로그인 공통 callback 구성
// 카카오톡으로 로그인 할 수 없어 카카오계정으로 로그인할 경우 사용됨
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.e(TAG, "카카오계정으로 로그인 실패", error)
} else if (token != null) {
Log.i(TAG, "카카오계정으로 로그인 성공 ${token.accessToken}")
}
}
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
UserApiClient.instance.loginWithKakaoTalk(context) { token, error ->
if (error != null) {
Log.e(TAG, "카카오톡으로 로그인 실패", error)
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
return@loginWithKakaoTalk
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
} else if (token != null) {
Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
}
}
} else {
UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
}
내용 확인해주시고, 답변 부탁드려요~
추가로 sdk 버전은 이겁니다.
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-cert:2.20.1" // 카카오톡 인증 서비스 API 모듈