디벨로퍼스 앱 ID : 1007304
sdk 버전 : v2-all:2.18.0
안녕하세요 로그인 관련하여서 질문드립니다.
카카오톡으로 로그인의 경우는 토큰 받기에 성공하였으나,
카카오계정으로 로그인의 경우는 계속 실패합니다.
카카오계정으로 로그인 실패
ClientError(reason=Cancelled, msg=user cancelled.)
이메일로 로그인하기를 할 경우 계속 실패를 하는데 해당 에러는 어떤 문제 어떤 문제때문에 일어나는 것인지 가이드 부탁드립니다.
감사합니다.
안녕하세요
구현하신 로그인 코드와 이슈 재현 영상 첨부 부탁드리겠습니다
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = SignInPageActivityBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.kakaoSignUp.setOnClickListener() {
kakaoHandle()
}
KakaoSdk.init(this, BuildConfig.NATIVE_KEY)
}
companion object{
const val TAG = "kakaoLoginAuth"
}
fun kakaoHandle() {
// 로그인 조합 예제
// 카카오계정으로 로그인 공통 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 = this@KakaoSignUpActivity)) {
UserApiClient.instance.loginWithKakaoTalk(context = this@KakaoSignUpActivity) { token, error ->
if (error != null) {
Log.e(TAG, "카카오톡으로 로그인 실패", error)
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
return@loginWithKakaoTalk
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
UserApiClient.instance.loginWithKakaoAccount(context = this@KakaoSignUpActivity, callback = callback)
} else if (token != null) {
Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
}
}
} else {
UserApiClient.instance.loginWithKakaoAccount(context = this@KakaoSignUpActivity, callback = callback)
}
}
}
재현 영상은 업로드 못하여서 구글링크 첨부드립니다.
https://drive.google.com/file/d/15A7E5dqseLkjWDhen3M-W58nRTV39KIK/view?usp=sharing
AndroidManifest 파일에 추가 설정이 되어있지 않은 것으로 보여요. 가이드 참고하셔서 설정이 되어있는지 확인 부탁드립니다.
안녕하세요! 해당 문제를 해결하여서 계정로그인 시 에러는 안나고 있는데, callback 요청이 들어가면 아무런 반응을 안하는데 어떤 곳을 잘못 한걸까요?
카카오 로그인 구현 화면
fun kakaoHandle() {
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.e(TAG, "카카오계정으로 로그인 실패", error)
} else if (token != null) {
Log.i(TAG, "카카오계정으로 로그인 성공 ${token.accessToken}")
}
}
// 로그인 조합 예제
// 카카오계정으로 로그인 공통 callback 구성
// 카카오톡으로 로그인 할 수 없어 카카오계정으로 로그인할 경우 사용됨
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(context = this@KakaoSignUpActivity)) {
UserApiClient.instance.loginWithKakaoTalk(context = this@KakaoSignUpActivity) { token, error ->
if (error != null) {
Log.e(TAG, "카카오톡으로 로그인 실패", error)
Toast.makeText(this, "카카오톡으로 로그인 실패!", Toast.LENGTH_SHORT).show()
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
Log.e(TAG, "카카오톡으로 로그인 실패", error)
return@loginWithKakaoTalk
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
UserApiClient.instance.loginWithKakaoAccount(context = this@KakaoSignUpActivity, callback = callback)
} else if (token != null) {
Log.d(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
Toast.makeText(this, "카카오톡으로 로그인 성공!", Toast.LENGTH_LONG).show()
}
}
} else {
UserApiClient.instance.loginWithKakaoAccount(context = this@KakaoSignUpActivity, callback = callback)
Log.d(TAG, "계정로그인")
}
}
UserApiClient.instance.loginWithKakaoAccount(context = this@KakaoSignUpActivity, callback = callback)
Log.d(TAG, “계정로그인”) 이 부분을 통과 하는 것까지 확인하였습니다.
manifest부분입니다.
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="앱키"/>
<activity
android:name="com.example.alldayfit.settings.login.KakaoSignUpActivity"
android:launchMode="singleTask"
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>
앱키라고 되어 있는 부분들은 정상적으로 들어가있습니다!
카카오 계정 로그인을 정상적으로 실행하기 위해서는 com.kakao.sdk.auth.AuthCodeHandlerActivity
클래스에다 intent-filter를 등록해줘야하는데, 현재는 com.example.alldayfit.settings.login.KakaoSignUpActivity
클래스에 intent-filter가 등록되어서 정상적으로 동작하지 못하는 것으로 보여요.
가이드 확인하셔서 intent-filter를 등록하시면 정상적으로 동작할 것 같아요