간혹 Session.getCurrentSession()이 IllegalStateException을 throw하네요

안녕하세요.

카카오 로그인 SDK를 사용 중입니다. 문제가 있어서 도움을 요청합니다.

Application.java에서 KakaoSDK.init(new KakaoAdapter() { … });을 호출했습니다.

로그인 Activity의 onCreate()에서 Session.getCurrentSession()을 호출하고 있습니다.

모두 개발가이드대로 진행했고 잘 동작합니다.

그런데 구글플레이 비정상종료 로그를 보면 가끔 getCurrentSession() 호출 시에 IllegalStateException(“Session is not initialized. Call KakaoSDK#init first.”)를 throw합니다. 가끔 있는 일이라 직접 재현해보진 못했어요.

SDK버전은 implementation group: ‘com.kakao.sdk’, name: ‘usermgmt’, version: ‘1.14.0’ 입니다.

감사합니다.

image

로그인 액티비티가 호출되는 경로가 어떤어떤 경로가 있을까요? Application의 onCreate()이 항상 불린다는 전제 하에 개발 가이드가 작성되었는데… 그게 지켜지지 않는 경우가 있나보네요 ㅠ.ㅠ 우선 로그인 액티비티의 onCreate에서 try catch 블락 안에서 Session.getCurrentSession()을 호출해보고 IllegalStateException을 catch 하여 KakaoSDK.init()을 호출해보면 어떨까요?

다른 경로로 IllegalStateException이 발생할수도 있지만, 빈도가 아주 낮을 것 같아서… 위 비정상종료 로그의 발생 빈도가 어떻게 되나요?

쉬운 해결방법이네요 :slight_smile: 감사합니다.

로그인 액티비티를 호출하는 경로는

  • 앱실행>스플래시화면>로그인화면
  • 로그아웃>로인화면
    두 경로 뿐입니다.

그런데 Application의 onCreate() 이전에 액티비티의 onCreate()가 호출될 수가 없는 것으로 알고 있습니다. 이부분에 대한 강케빈님의 생각을 듣고 싶습니다.

발생 빈도는 1/10000 수준으로 매우 낮습니다.

감사합니다.

저도 그렇게 알고 있고, 저 이전에 SDK를 개발하셨던 분도 그렇게 알고 계시기 때문에 이런 식으로 설계가 된 것인데… 왜 IllegalStateException이 발생하는지는 저도 전혀 모르겠어요… 빈도도 정말 낮기 때문에 디버깅도 어렵고 제가 서비스 애플리케이션들의 클라이언트 로그를 자유롭게 볼 수 있는 것도 아니어서 더더욱 파악이 힘드네요 ㅠㅠ 혹시 팁이 될만한 부분이나 제보해주실 내용이 있으시면 언제든지 댓글이나 글 남겨주시면 감사하겠습니다…!