달달한 스토리

728x90
반응형

 

출처 핀터레스트

너무 오랜만에 글을 써서 어색하다.

 

요 며칠 동안 코딩 테스트, 스마트 스토어 준비, 회사 앱 개발, 마블 정주행 등등..

 

아무쪼록 빈틈없는 바쁜 날들을 보내고 있다.

 

오늘은 카카오톡 로그인 기능을 구현하고, 디버그와 릴리즈 해시 키를 등록하였음에도 불구하고,

 

KakaoTalk is installed but not connected to Kakao account.

 

같은 오류가 뜨는 이유를 알아보자.

 

위에 영어 뜻은 카카오톡은 설치되엇지만, 카카오 계정이 연결되지 않았다는 뜻이다.

 

말 뜻 그대로, 카카오톡은 설치했지만, 카카오톡 로그인을 하지 않았다는 뜻이다.

 

이에 대한 예외 처리를 해주면 된다.

 

다음 코드를 보자.

 

public void signInKakao(Context context) {
        this.context = context;
        if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(context)) {
            UserApiClient.getInstance().loginWithKakaoTalk(context, callback);
            Log.d("kakao", "sooyeol1");
            //만약 카톡이 깔렸는데 로그인을 하지 않는 경우에 예외처리를 하지 못함
        }else{
            loginWithKakaoAccount();
            Log.d("kakao", "sooyeol2");
        }
    }

    //혹시 카톡이 설치되었지만 카톡 로그인이 안되있을 가능성이 있기 때문에
    //따로 메서드로 빼주어 예외처리를 한다.
    private void loginWithKakaoAccount() {
        UserApiClient.getInstance().loginWithKakaoAccount(context, callback);
    }

나 같은 경우는 signInKakao() 메서드를 실행하게 되면,

 

isKakaoTalkLoginAvailable이라는 메서드

 

카카오톡이 설치되어 있는지 아닌지에 여부에 따라,

 

loginWithKakaoTalk() 메서드를 실행할지

 

loginWithKakoAccount()로 실행할지 분리해준다.

 

이 두 메서드에 차이점은.. 실행해보면 안다.

 

카톡 설치 여부에 따른 처리라 두번째는 웹뷰로 넘어가게 된다.(카톡을 설치하지 않았기 때문에)

 

loginWithKakaoAccount() 메서드를 따로 빼둔 이유는

 

아래 코드에서 알 수 있다.

 

Function2<OAuthToken, Throwable, Unit> callback = (oAuthToken, throwable) -> {
        if(oAuthToken!= null) {
            //카카오 로그인 성공
            runKakaoLogin();
        }
        if(throwable != null) {
            //카카오 로그인 실패
            //302 에러일 경우 loginWithKakaoAccount메서드 실행
            if(throwable.toString().contains("statusCode=302")) {
                //카카오톡은 설치 되어 있지만, 카카오톡 로그인이 되었을 경우 에러가 뜬다. (statusCode=302)
                //여기서 loginWithKakaoAccounr 메서드를 실행한다.
                loginWithKakaoAccount();
            }
        }
        return null;
    };

저 두녀석 중 하나가 실행되면, 이 콜백 메서드가 실행이 된다.

 

성공하면 runKakaoLogin()라는(본인이 만든 메서드) 메서드를 실행하여,

 

다음 단계로 넘어간다.

 

여기서, 아까 위에서 나온 예외인 

 

KakaoTalk is installed but not connected to Kakao account.

 

이 에러가 뜨면, 저 throwable변수에 string으로 찍히게 된다.

 

이때 statusCode=302 ....어쩌고 저쩌고 에러가 뜨게 되는데,

 

카카오톡은 설치 되어 있지만 로그인이 안되었을 때 나오는 에러이다.

 

이때, throwable을 스트링으로 찍어서 statusCode=302가 스트링에

 

포함되어 있는지 확인하고,

 

loginWithkakaoAccount() 메서드를 실행해주는 루트로 가면 된다.

 

이렇게 처리해주면, 자연스러운 예외 처리 성공이다!

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading