문의 시 사용하시는 SDK 버전 정보를 알려주세요.
카카오톡을 통한 로그인에서는 성공적으로 로그인이 돼서 콜백까지 호출이 되는데
카카오계정 로그인에서는 계정이용 동의를 체크하고 넘어가면 같은 콜백이 호출되지 않아 질문드립니다.
(카카오톡 어플에서 카카오 계정 로그인 알람은 오는 상태입니다.)
또한 카카오톡으로 로그인하고 이메일 정보를 수집하려고 할때도 앱에서 오류가 발생하는 상황입니다.
현재 카카오 디벨로퍼스 카카오 로그인 설정-> 동의 항목에서 프로필 정보(필수동의) 카카오 계정(이용 중 동의)로 설정한 상태입니다.
문제 해결을 위해 답변 부탁드립니다. 감사합니다
안녕하세요
말씀해주신 부분만으로는 저희가 정확하게 판단하기가 어렵습니다. 가능하시다면 카카오톡 로그인과 카카오 계정 로그인을 어떻게 사용하고 계신지 코드 첨부 부탁드리겠습니다.
그리고 이메일 정보를 이용 중 동의로 설정하신 경우라면 해당 정보가 필요한 경우에 UserApiClient.loginWithNewScopes() 함수를 호출해서 제공 동의를 받으셔야 이메일 정보를 수집할 수 있다는 점 참고바랍니다. (https://developers.kakao.com/docs/latest/ko/kakaologin/common#user-consent)
감사합니다
코드 첨부합니다!
카카오톡 로그인은 정상으로 진행됩니다!
kakao_login_button.setOnClickListener {
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.d(TAG, "token ${token} error ${error}")
when {
error.toString() == AccessDenied.toString() -> {
Toast.makeText(this, "접근이 거부 됨(동의 취소)", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidClient.toString() -> {
Toast.makeText(this, "유효하지 않은 앱", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidGrant.toString() -> {
Toast.makeText(this, "인증 수단이 유효하지 않아 인증할 수 없는 상태", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidRequest.toString() -> {
Toast.makeText(this, "요청 파라미터 오류", Toast.LENGTH_SHORT).show()
}
error.toString() == InvalidScope.toString() -> {
Toast.makeText(this, "유효하지 않은 scope ID", Toast.LENGTH_SHORT).show()
}
error.toString() == Misconfigured.toString() -> {
Toast.makeText(
this,
"설정이 올바르지 않음(android key hash)",
Toast.LENGTH_SHORT
).show()
}
error.toString() == ServerError.toString() -> {
Toast.makeText(this, "서버 내부 에러", Toast.LENGTH_SHORT).show()
}
error.toString() == Unauthorized.toString() -> {
Toast.makeText(this, "앱이 요청 권한이 없음", Toast.LENGTH_SHORT).show()
}
else -> { // Unknown
Log.e(TAG, "로그인 실패", error)
Log.d(TAG, "onCreate: ${error}")
Toast.makeText(this, "기타 에러", Toast.LENGTH_SHORT).show()
}
}
}
else if (token != null) {
Log.d(TAG, "token ${token} error ${error}")
Log.i(TAG, "로그인 성공 ${token.accessToken}")
Toast.makeText(this, "로그인에 성공하였습니다.", Toast.LENGTH_SHORT).show()
//로그인 정보 서버에 등록
try {
mSocket = IO.socket("---") //
thread() {
mSocket.connect()
}
} catch (e: URISyntaxException) {
Log.d(TAG, "failed")
}
registerMenberToServer()
val intent = Intent(this, SelectP2pOrServerActivity::class.java)
startActivity(intent)
}
}
//카카오 어카운트가 실행이 되지 않는다. 해결해야 할듯
if (UserApiClient.instance.isKakaoTalkLoginAvailable(this)) {
UserApiClient.instance.loginWithKakaoTalk(this, callback = callback)
}else{
UserApiClient.instance.loginWithKakaoAccount(this, callback = callback)
}
}
구현하신 코드를 보면 카카오톡이 설치되어 있는 경우에는 무조건 카카오톡으로 로그인하게 되어있는데요.
본문에서 말씀하신 카카오 계정 로그인에서 콜백이 호출되지 않는다는 것은 '카카오톡이 설치되지 않은 경우에 카카오 계정으로 로그인하면 콜백이 호출되지 않음’을 의미하는 것이 맞나요?
네 맞습니다! 카카오 메일 받아오기, 친구목록 불러오기 등 이용중 동의로 추가적인 권한을 부여해야 하는 기능들이 동작하지 않는거 같습니다. 앱 내에서는 단계적으로 정상적으로 정보 동의까지는 창이 뜨고, 동의하고 계속하기를 클릭하지만 그 이후로는 api의 값을 받아오지 못하는거 같습니다.
해결했습니다. 해당 엑티비티의 인텐트 필터만 제가 사용하고자 하는 엑티비티에 넣었었습니다.
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth“ -->
<data
android:host="oauth"
android:scheme="" />
</intent-filter>
</activity>
1개의 좋아요