죄송합니다만, 어떤 상황인지 잘 이해하지 못하였습니다.
웹뷰를 사용하신다고 하였지만 문의주신 글은 android Kakao SDK입니다.
웹뷰 기반 서비스지만 카카오 로그인 시, JS SDK가 아닌 android Kakao SDK를 사용하여 로그인 하고 계신다는 말씀이신가요?
그리고, 카카오톡이 없는 상태에서 로그아웃 하고 다시 로그인해도 계정 ID/PW 입력없이 바로 로그인 되는 것이 문제라고 하시는 것인가요?
Kakao SDK를 사용할 경우
SDK가 카카오톡 미설치시 기본 브라우저를 통해 계정 로그인 할수 있도록 동작합니다.
서비스측 앱에서 기본 브라우저의 쿠키를 제어할 수는 없습니다.
Kakao SDK도 마찬가지며 때문에 prompts 파라미터가 제공되고 있으므로 해당 파라미터 사용 부탁드립니다.
JS SDK를 사용할 경우
서비스가 구현한 웹뷰 내에서 계정 로그인이 진행되므로 웹뷰의 쿠키를 직접 제거하시면 됩니다.
단, prompts 파라미터 사용 가능하기에 이와 같은 불필요한 로직 구현하실 필요가 없습니다.
public void loginWithKakao() {
// UserApiClient.getInstance().unlink();
UserApiClient.getInstance().loginWithKakaoAccount((Activity) context, listOf(Prompt.LOGIN), null, null, null, null, new Function2<OAuthToken, Throwable, Unit>() {
@Override
public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
if (oAuthToken != null) {
Log.e("KakaoLoginManager", "카카오 로그인 성공");
getUserInfo();
}
if (throwable != null) {
Log.e("KakaoLoginManager", "로그인 실패: " + throwable.getMessage());
callback.onFailure();
}
return null;
}
});
kotlin 기반으로 loginWithKakaoAccount() 사용시 parameter name 지정가능하지만
java기반으로 사용하여 prompt는 안내해주신대로 listOf(Prompt.LOGIN) 주었고
context랑 callback은 기존 loginWithKakao() 와 같이 사용했습니다.
다만, 휴대폰에 카카오톡앱 설치자에 경우 커스텀탭이 아닌
카카오톡 로그인이 서비스 정책에 맞는 부분이어서
loginWithKakaoAccount() 는 커스텀탭을 사용하는 부분이라
해당부분은 서비스적용에 어려울거 같네요
@JavascriptInterface
public boolean kakao_login(){ // 함수가 호출되면
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.kakao.talk");
if (launchIntent != null) {
loginWithKakao() {
} //설명드렸던 여기가 실행되고요
else {} 이면
앱이 설치되어있지 않다고해서 이때는 카카오톡 앱 로그인으로 처리하지 않고 있습니다.
이슈사항으로는 설명해주신대로 기본 브라우저에서 세션쿠키를 갖고 있어서
카카오톡 앱을 지워도
로그인이 되어지는 부분이었고요.
아까 답변드린
public void loginWithKakao() {
// UserApiClient.getInstance().unlink();
UserApiClient.getInstance().loginWithKakaoAccount((Activity) context, listOf(Prompt.LOGIN), null, null, null, null, new Function2<OAuthToken, Throwable, Unit>() {
@Override
public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
if (oAuthToken != null) {
Log.e("KakaoLoginManager", "카카오 로그인 성공");
getUserInfo();
}
if (throwable != null) {
Log.e("KakaoLoginManager", "로그인 실패: " + throwable.getMessage());
callback.onFailure();
}
return null;
}
});
에 경우는
이렇게 구현되어져 있다는게 아니라
이것도 카카오톡 앱 로그인 기능인지 테스트해봤다는 내용이었습니다.
(커스텀 탭 이용한 로그인 기능이니까 적용이 어려울거 같다는 거였구요)
실제로는 카카오톡 앱로그인인 loginWithKakaoTalk()이거로 되어있고요
그리고
getPackageManager().getLaunchIntentForPackage(“com.kakao.talk”)이거 대신에 카카오sdk제공
isKakaoTalkLoginAvailable()에 경우는 사용자가 카카오톡 설치/미설치 여부뿐만 아니라
카카오톡 앱이 설치되어있고 로그인되어있는지 로그아웃되어있는지 여부도 판별해주나요?
fun isKakaoTalkLoginAvailable(context: Context): Boolean =
AuthCodeClient.instance.isKakaoTalkLoginAvailable(context)
현재 isKakaoTalkLoginAvailable 기능이 톡 로그인 여부까지 확인하지 않습니다.
톡 설치 후 로그인하지 않은 케이스는 희소한 known issue로 굳이 고려하지 않으셔도 될것 같습니다.
(사용자가 카카오톡으로 이동하기에 로그인 및 다시 시도를 기대할 수 있음)
현재 톡이 삭제된 상태에서 계정로그인(커스텀 탭)이 바로 되는 케이스에 집중하고 계신데요
때문에 원하시는 시나리오 파악이 어렵습니다.
엣지 케이스에 대한 검증 보다 원하시는 시나리오를 설명해 주시면 비슷한 구성의 타 서비스들이 주로 구현하는 방법을 안내 드릴 수 있을것 같습니다.