카카오 다른계정으로 로그인 문의

현재 안드로이드 웹뷰에서 카카오톡 다른계정으로 로그인 버튼이 나오지 않아서 문의 드립니다.

현재 사용하는 카카오 sdk는 레거시 버전입니다.
implementation group: ‘com.kakao.sdk’, name: ‘usermgmt’, version: ‘1.30.7’
implementation group: ‘com.kakao.sdk’, name: ‘kakaotalk’, version: ‘1.30.7’
implementation group: ‘com.kakao.sdk’, name: ‘kakaolink’, version: ‘1.30.7’

동일하게 iOS도 레거시 sdk를 사용 중인데, iOS에서는 별다른 옵션 변경없이 아래와 같이 다른 계정으로 로그인 버튼이 생깁니다.
iOS 이미지

안드로이드에서 다른계정으로 로그인하기 버튼을 지원하지 않는 거라면, iOS와 동일한 형태로 직접 구현해서 사용하면 되는 것인지, 저희가 뭔가 설정을 잘 못한 것인지 안내 부탁드립니다.

로그인 하는 부분의 코드는 아래와 같고 AuthType.KAKAO_TALK 말고 다른 KAKAO_ACCOUNT, KAKAO_LOGIN_ALL 를 다 넣어보았지만 iOS와 같은 다이얼로그가 나오지 않았습니다.

currentActivity.runOnUiThread(new Runnable() {
        public void run() {
            Session.getCurrentSession().open(AuthType.KAKAO_TALK, currentActivity);
        }
    });
혹시 targetSdkVersion을 30 이상으로 설정하셨나요?

해당 선택화면 안나오고 항상 카카오계정으로 로그인 진행되는 상황이시죠?

30이상으로 설정한 앱이 android 11에서 실행될 경우
카카오톡 설치여부 검사를 위해 AndroidManifest.xml 에 <queries> 설정이 추가돼 있어야 합니다.

2.0.4 이상 버전에서는 해당 설정이 SDK에 추가되어 있으나

v1을 사용하고 계신다면 직접 설정을 추가하셔야 합니다.

<!-- AndroidManifest.xml -->
<queries>
<package android:name="com.kakao.talk" />
</queries>

보다 자세한 내용은 구글의 package visibility 가이드를 참고 바랍니다.

https://developer.android.com/about/versions/11/privacy/package-visibility

답변 감사합니다.

지금 알려주신 package visibility 설정을 해도 다른 계정으로 로그인 버튼이 뜨지 않습니다.

android 11뿐만이 아니라 이하인 버전에서도 동일한데요.

이럴 경우에는 어떻게 해야할까요? 혹시 저희가 지금 웹뷰 상에서 카카오 로그인을 하려고 해서 문제가 되는 건 아닌가요?

현재 저희는 코르도바를 사용해서 웹뷰로 서비스 하고 있습니다. 웹뷰 상에서 코르도바 플러그인으로 카카오 네이티브 로그인을 요청하는 상황입니다.

해당 환경에서 확인 안해봐서 정확하게 안내는 어렵지만,

Android SDK를 이용해 카카오 로그인 처리하시는게 맞다면, 카카오톡앱을 호출할 수 있는 설정인지 확인해보시는게 좋을 것 같습니다.

(선택 메뉴가 안뜨고 카카오톡앱으로 로그인 하는 것이 아니라 카카오계정페이지로 로그인 되는 것 맞으시죠?)

항상 카카오톡앱으로 로그인되는 것이 문제입니다.

iOS처럼 로그인 호출 시 카카오톡으로 로그인할 것인지, 다른 계정으로 로그인(카카오 계정 정보로 로그인)할 것인지 다이얼 로그 페이지가 뜨길 바라고 있습니다.

안드로이드에서 authType을 변경해보면서 테스트한 결과가 아래와 같습니다.

  • AuthType.KAKAO_TALK : 항상 카카오톡으로 로그인됨
  • AuthType.KAKAO_ACCOUNT : 항상 카카오 계정으로 로그인하는 웹페이지가 뜸.
  • AuthType.KAKAO_LOGIN_ALL : 반응 없음.

제가 원하는 것은 iOS 처럼 이 다이얼로그가 뜨는 것입니다.
iOS 이미지

어떤 authType을 사용해야하는 것인가요? 추가로 제가 살펴볼 부분이 있으면 알려주세요.

네, KAKAO_LOGIN_ALL이 안되는 상황이셨군요.

SDK담당자에게 문의해보겠습니다. 조금 시간이 걸릴 수 있는 점 양해 부탁드려요.

넵, 감사합니다. 답변 기다리겠습니다.

안녕하세요.

Session.getCurrentSession().open 메소드로 실행시 관련 UI는 직접 구현하셔야 한다고합니다.

1.30.7 버전으로 가이드에 나온데로, 재현 테스트 해보니 해당 화면이 잘 노출되는데요.
Session.getCurrentSession().open 메소드 사용하지 마시고 가이드내용데로 KakaoSDK.init 에서 설정 해서 사용해주세요.

Kakao Developers

public class GlobalApplication extends Application {
    private static GlobalApplication instance;

    public static GlobalApplication getGlobalApplicationContext() {
        if (instance == null) {
            throw new IllegalStateException("This Application does not inherit com.kakao.GlobalApplication");
        }

        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;

        // Kakao Sdk 초기화
        KakaoSDK.init(new KakaoSDKAdapter());
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        instance = null;
    }

    public class KakaoSDKAdapter extends KakaoAdapter {

        @Override
        public ISessionConfig getSessionConfig() {
            return new ISessionConfig() {

                // 로그인 시 인증 타입 지정
                @Override
                public AuthType[] getAuthTypes() {
                    return new AuthType[] {AuthType.KAKAO_LOGIN_ALL};
                }
                @Override
                public boolean isSecureMode() {
                    return false;
                }

                // pause와 resume시에 타이머를 설정/ CPU의 소모를 절약 할 지의 여부를 지정
                @Override
                public boolean isUsingWebviewTimer() {
                    return false;
                }


                // Kakao와 제휴 된 앱에서 사용되는 값
                @Override
                public ApprovalType getApprovalType() {
                    return ApprovalType.INDIVIDUAL;
                }

                // 로그인 웹뷰에서 email 입력 폼의 데이터를 저장할 지 여부를 지정
                @Override
                public boolean isSaveFormData() {
                    return true;
                }
            };
        }

        // Application이 가지고 있는 정보를 얻기 위한 인터페이스
        @Override
        public IApplicationConfig getApplicationConfig() {
            return new IApplicationConfig() {

                @Override
                public Context getApplicationContext() {
                    return GlobalApplication.getGlobalApplicationContext();
                }
            };
        }
    }
}

안내 감사합니다.

현재 저희 구조 상 로그인 버튼이 웹뷰에서 그려지고 Session.getCurrentSession().open 으로 로그인을 요청해야하는 상황입니다.

그럼 다른계정으로 로그인하기 버튼이 있는 다이얼로그 UI를 직접 구현해야하는게 맞겠네요?

혹시 다른 계정으로 로그인하기 버튼에 대한 디자인 가이드가 있다면 안내 부탁 드립니다.

https://github.com/shpongle2634/react-native-kakao-logins/blob/master/android/src/main/java/com/dooboolab/kakaologins/RNKakaoLoginsModule.java 이걸 참고로 다이얼로그 UI를 띄웠습니다.

지원 감사합니다.