[kotlin] 카카오톡 로그인 시도없이 취소로 처리(예: 뒤로가기)

implementation “com.kakao.sdk:v2-all:2.12.1”
앱 id : 839720

공식문서에 기재된 안드로이드용 카카오톡(혹은 카카오계정) 로그인 예시 코드 중에서 ‘reason’ 구간이 왜 자꾸 빨간 글씨로 나오는 지 모르겠습니다. import가 전혀 안됩니다. 어떻게 해야하나요??

// 로그인 조합 예제

	// 카카오계정으로 로그인 공통 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(this)) {
		UserApiClient.instance.loginWithKakaoTalk(this) { token, error ->
			if (error != null) {
				Log.e(TAG, "카카오톡으로 로그인 실패", error)

				// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
				// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
				if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
					return@loginWithKakaoTalk
				}

				// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
				UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
			} else if (token != null) {
				Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
			}
		}
	} else {
		UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
	}

스크린샷 2023-01-26 오전 12.12.45

안녕하세요

Kotlin 언어 특성상 error is ClientError 이후에는 error가 ClientError 타입으로 캐스팅되어 error.reason에 접근이 가능해야하는데 에러를 봤을 때는 ClientError가 제대로 import되지 않은 것으로 보입니다.

import com.kakao.sdk.common.model.ClientError 를 직접 추가하거나
if (error is com.kakao.sdk.common.model.ClientError && error.reason == ClientError.Cancelled)와 같이 수정했을 때도 동일하게 에러가 발생하는지 확인 부탁드리겠습니다.

1개의 좋아요

정말 감사합니다.

import com.kakao.sdk.common.model.ClientError 를 추가해보았더니 빨간색에서 보라색으로 바꼈습니다.

제가 import 할 때는 ‘import com.android.volley.ClientError’ 가 생성되던데 원하는 import가 안될 때는 어디서 참고해야 찾을 수 있나요??

일반적으로 동일한 이름의 클래스를 사용하게 되면 Android Studio에서 자동으로 import를 시키지 못하기 때문에 원하는 클래스를 선택해서 import 해야합니다.

import 관련 에러가 발생했을 때는 코드 최상단에 import 목록을 확인해서 import 하려는 클래스와 동일한 이름을 가진 다른 클래스가 import 되지는 않았는지 확인해보시고 동일한 이름의 클래스가 있다면 해당 클래스의 import를 삭제하신 후 import 에러가 발생하는 코드 부분으로 이동해서 필요한 클래스를 import 하시기를 권장합니다.