카카오 로그인을 앱에 구현을 하였습니다.
그런데 앱 시나리오 상 사용자가 항상 카카오 로그인을 사용하는게 아니라서, KakaoAdapter 가 항상 인스턴스가 존재할 필요가 없다고 판단하여, 사용자가 실제 로그인 시도시에만 KakaoSDK.init()를 하도록 하였습니다.
그런데 다음과 같은 상황에서는 오류가 발생하더군요.
- KakaoWebViewActivity 가 전면에 노출된 상태에서 사용자가 홈키를 눌러 런쳐로 나감
- 한동안 사용안하고 있다가 메모리 부족으로 OS가 앱 프로세스를 kill.
- 다시 앱을 실행하면 KakaoWebViewActivity 화면 재생성
- 앞서 앱 프로세스 kill로 인해 KakaoAdapter가 존재하지 않음
- 따라서 KakaoWebViewActivity의 init()에서 KakaoSDK.getAdapter().getSessionConfig() 하다가 NPE 발생
application 생성될 때 무조건 KakaoSDK.init()를 하면 해결될 문제가 아니냐? 라고 말씀하실 수도 있습니다.
하지만 어차피 저런 상황에서는 KakaoWebViewActivity의 결과를 받아야 할 프래그먼트(사실 이 부분 관련해서도 문제가 있습니다만)가 증발된 상황이니, 결과를 받을수가 없는 상황이네요;;
그리고 사용하지도 않을 인스턴스가 프로세스 생명주기 내내 메모리를 차지하는게 맘에도 들지 않을 뿐더러,(심지어 null 처리도 못 시킵니다.) 프로세스 생성 때마다 SDK 초기화를 강제하는 것은 좋다고 생각되지는 않습니다.
KakaoAdapter 가 null인지 확인하여 KakaoWebViewActivity를 바로 종료시켜야 하는게 아닌가 생각됩니다.
그리고 위에도 말했지만 로그인 결과를 받는 콤포넌트가 액티비티로 강제되어 있는것도 수정이 되었으면 합니다. Session.getCurrentSession().open() 에 액티비티만 가능하네요. 다른 SNS들의 로그인 SDK들은 모두 프래그먼트를 지원하는데 반해 카카오 SDK는 아직도 액티비티를 써야 해서 많이 불편합니다.