Kakao SDK 사용중 OkHttp IllegalSateExceprion(state:0) 발생건에 대해서 문의드립니다

문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.

Faq 목록 - 10. Android ( Faq 목록 입니다 ) 먼저 확인해주세요.


안녕하세요.

Android 앱에서 Kakao SDK를 사용하고 있는데, 최근 배포 버전에서 이전에는 발생하지 않았던 아래 예외가 발생하고 있어 문의드립니다.

1. 개발 환경

  • Platform: Android
  • minSdkVersion: 29 (Android 10)
  • Target SDK: Android 35
  • Android Gradle Plugin: 8.3.2
  • Kotlin: 1.8.10
  • JDK: 17
  • Kakao SDK for Android: implementation(“com.kakao.sdk:v2-share:2.20.0”)
  • OkHttp: implementation ‘com.squareup.okhttp3:okhttp:4.12.0’
    implementation ‘com.squareup.okhttp3:logging-interceptor:4.12.0’
  • Retrofit: implementation ‘com.squareup.retrofit2:retrofit:2.4.0’

2. 발생 Exception

아래와 같은 Exception이 발생하고 있습니다.

Fatal Exception: java.lang.IllegalStateException: state: 0
    at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:173)
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:110)
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
    at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.kt:221)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at com.kakao.sdk.network.AppKeyInterceptor.intercept(AppKeyInterceptor.kt:33)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at com.kakao.sdk.network.KakaoAgentInterceptor.intercept(KakaoAgentInterceptor.kt:36)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
    at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:1572)


3. 확인한 내용

Stack Trace를 보면 다음과 같이 Kakao SDK의 네트워크 interceptor가 포함되어 있습니다.

com.kakao.sdk.network.AppKeyInterceptor
com.kakao.sdk.network.KakaoAgentInterceptor

그 과정에서 OkHttp의

okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders()

에서

IllegalStateException: state: 0

이 발생하고 있습니다.

또한 Stack Trace에

okhttp3.logging.HttpLoggingInterceptor

가 포함되어 있으나, 저희 애플리케이션 소스 코드에서는 HttpLoggingInterceptor를 직접 사용하고 있지 않습니다.

이 부분에 대해서 해결에 도움이 될만한 정보등이 있으시면 알려주시면 감사하겠습니다.

안녕하세요.

확인을 위해 앱 ID 부탁드립니다.


앱ID
https://developers.kakao.com/ 의 전체 앱 목록에 표시되는 ID 값 입니다.
숫자로된 ID 입니다
ex) 123456

[@tim.l @woody.ho]

안녕하세요

카카오SDK는 내부적으로 okhttp 4.9.3을 사용하고 있는데요, 개발 중이신 프로젝트에서 okhttp 4.12.0 을 사용하면서 영향을 받아서 이슈가 발생한 것 같습니다. 참고) https://github.com/lysine-dev/okhttp/issues/8283

프로젝트에 okhttp 4.9.3 버전을 적용했을 때도 이슈가 발생하는지 확인 부탁드립니다.

앱 ID는 86cf5f0410e9b*****************입니다.

현재 일부 사용자한테서 발생이 되고 있는 상태입니다.

현재 저희 개발쪽에서는 4.12버전으로도 재현이 되지 않아서 4.9.3으로 적용이 재현유무를 알수 없는 상태입니다.

간헐적으로 이슈가 발생하는 것으로 보여서 제가 테스트했을 때도 이슈 재현에는 실패했습니다.

다만 github 이슈 내용을 확인해보면 해당 이슈는 okhttp 4.11.0부터 일부 에러 처리 방식이 변경되면서 발생한 이슈로 보여 4.9.3 버전으로 다운그레이드했을 때는 동일한 이슈는 발생하지 않을 것으로 보입니다.

해당 이슈는 okhttp 5.0.0 에서 해결된 것으로 보이나, 운영 중인 프로젝트에서 kotlin 1.8.10 버전을 사용하고 있어서 okhttp 5.0.0과의 호환성을 유지할 수 없습니다. (카카오SDK 역시도 kotlin 1.8.0 버전을 사용하고 있어서 okhttp 5.0.0 버전을 사용할 수 없습니다)

운영 중인 프로젝트에서 언제부터 okhttp 4.12.0 버전을 사용했는지는 모르지만, okhttp를 4.11.0 미만 버전으로 낮춰서 앱의 전반적인 동선에 영향이 없다면 그대로 배포해서 이슈를 우회해야할 것 같습니다.

안녕하세요, 카카오입니다.

보안 및 안정성 강화를 위해 Kakao SDK for Android와 Kakao SDK for Flutter의 최신 버전을 배포했습니다. (이하 각각 ‘Android SDK’, ‘Flutter SDK’로 표기)

해당 SDK를 사용하는 서비스에서는 가능한 빠른 시점에 최신 버전으로 업데이트할 것을 권고드립니다.

대상

  • Android SDK 2.24.0 이하 버전을 사용하는 서비스
  • Flutter SDK 2.0.0+1 이하 버전을 사용하는 서비스

조치 사항

  • Android SDK 2.25.0 이상으로 업데이트
  • Flutter SDK 2.0.1 이상으로 업데이트

==> 이 권고처럼 2.25 버전으로 업데이트 할 경우에는 4.9.3으로 사용을 해도 되는건지 아니면 설정을 변경을 해야 하는지 정보 부탁드립니다.

최신버전 카카오SDK(2.25.0)도 내부적으로 okhttp 4.9.3을 사용하고 있어서 카카오SDK 2.25.0을 적용하더라도 okhttp 4.9.3 사용하면 됩니다.