갤럭시노트7에서 앱을 구동하자마자 illegalstateexception이 발생하고 있습니다.
이 exception에 대하여 catch 후 kakaoSDK.init을 직접 해주면 로그인버튼을 누른 뒤에 illegalstateexception이 발생합니다.
구글 콘솔이 지원하는 비정상 종료를 확인하였을때,
java.lang.IllegalStateException:
at .Activity$SessionCallback$requestMe$1.onSuccess (Activity.kt:100)
at .Activity$SessionCallback$requestMe$1.onSuccess (Activity.kt:72)
at com.kakao.network.callback.ResponseCallback.onSuccessForUiThread (ResponseCallback.java:72)
at com.kakao.network.tasks.KakaoResultTask$1$1.run (KakaoResultTask.java:78)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:7050)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:964)
Manifest 상에서 android:name
에 GlobalApplication
을 추가해주었고, GlobalApplication.kt
에 대한 내용 수정은 하지 않았습니다.
<application
...
android:name="~.Kakao.GlobalApplication"
...
>
아래는 오류가 발생하는 부분 코드입니다.
...
private var callback: SessionCallback = SessionCallback()
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
Session.getCurrentSession().addCallback(callback)
Thread.sleep(1000)
if(!Session.getCurrentSession().checkAndImplicitOpen())
{
val nextIntent = Intent(this, FirstActivity::class.java)
startActivity(nextIntent)
finish()
}
}
...
fun callNextIntent(tnickname: String, tprofileImg: String, tthumnale: String, tkakaoId: Long){
try {
val nextIntent = Intent(this, MainActivity::class.java)
nextIntent.putExtra("닉네임", tnickname)
nextIntent.putExtra("프로필", tprofileImg)
nextIntent.putExtra("썸네일", tthumnale)
nextIntent.putExtra("아이디", tkakaoId)
startActivity(nextIntent)
finish()
}catch(e: Exception)
{
Log.e(TAG, "callNextIntent:: [$e]")
}
}
...
class SessionCallback : ISessionCallback {
private val tTAG: String = "SessionCallback"
// private lateinit var firstActivity: FirstActivity
// private var isActivityCalled: Int = -1
override fun onSessionOpenFailed(exception: KakaoException?) {
Log.e(tTAG, "Session Call back :: onSessionOpenFailed: ${exception?.message}")
}
override fun onSessionOpened() {
requestMe()
}
private fun requestMe() { //Activity.kt : 72
UserManagement.getInstance().me(object : MeV2ResponseCallback() {
override fun onFailure(errorResult: ErrorResult?) {
var result = errorResult!!.errorCode
if (result == ApiErrorCode.CLIENT_ERROR_CODE) {
Log.e(tTAG, "네트워크 연결 불안정, 접속 실패")
} else {
Log.e(tTAG, "알 수 없는 오류 발생으로 로그인 실패")
}
}
override fun onSessionClosed(errorResult: ErrorResult?) {
Log.e(tTAG, "Session Call back :: onSessionClosed ${errorResult?.errorMessage}")
}
override fun onSuccess(result: MeV2Response?) {
try
{
checkNotNull(result){ println("session response null") }
val unickname = result!!.getNickname()
val uprofileImg = result.getProfileImagePath()
val uthumnale = result.getThumbnailImagePath()
val ukakaoId = result.getId()
callNextIntent(unickname, uprofileImg, uthumnale, ukakaoId) // Activity.kt : 100
}catch(e: IllegalStateException)
{
KakaoSDK.init(KakaoSDKAdapter())
Toast.makeText(this@SplashActivity, "다시 시도해주세요. $e", Toast.LENGTH_SHORT).show()
}
}
})
}
}
갤럭시 노트7 (안드로이드 버전 9.0)을 제외한 다른 기기에선 정상작동 합니다.
KakaoSDK.init은 GlobalApplication 내부에서 진행하고 있습니다.
도저히 이유를 모르겠습니다;ㅠㅠ callNextIntent는 단순히 Intent에 정보를 넘겨주는 역활만 합니다. 해당 function 내부에서는 오류가 잡히지 않구요.
developer.kakao.com에서 내 정보에 등록된 앱에 대한 kakao 유저 관리를 가보면, kakaoID에 대한 Long값은 정상적으로 등록되어 있으나, profileImg, 썸네일 이미지등은 공백으로 되어있습니다.
illegalstateException에 대한 catch를 하여 KakaoSDK.init을 실행 해준 뒤로는 로그인버튼 을 눌렀을 때 해당 에러가 구현되며, illegalstateexception을 캐치하지 않았을 경우에는 앱을 실행하자마자 해당 에러가 발생하는걸 확인했습니다.
갤럭시 노트7을 보유하지않아 직접 해결할 수가 없어서 혹시 비슷한 경험을 하신 분이 계신지, 혹은 해결법을 알고 계신분이 있나 싶어 도움을 요청하고자 글을 작성하게 되었습니다.