콘텐츠로 이동

StreamChat 통합 사용 가이드

URL만 넣으면 플랫폼을 자동 감지합니다.

StreamChat chat = new StreamChatBuilder()
.add("https://chzzk.naver.com/live/924a636224c9203259af46ad7d8b70ca")
.add("https://ci.me/@lyn")
.add("https://play.sooplive.co.kr/tjrdbs999/292536969")
.add("https://www.youtube.com/watch?v=Qv6o6WACJ60")
.add("https://toon.at/widget/alertbox/abc123")
.withListener(listener)
.build();
chat.connectAll();

URL 대신 플랫폼 ID를 직접 지정할 수도 있습니다.

new StreamChatBuilder()
.add("924a636224c9203259af46ad7d8b70ca", DonationPlatform.CHZZK)
.add("tjrdbs999", DonationPlatform.SOOP)
.add("@lyn", DonationPlatform.CIME)
.add("alertbox_key", DonationPlatform.TOONATION)
.add("@jtbc_news", DonationPlatform.YOUTUBE)
.withListener(listener)
.build();
플랫폼URL 형식
치지직https://chzzk.naver.com/live/{channelId}, https://chzzk.naver.com/{channelId}, https://m.chzzk.naver.com/...
씨미 (CiMe)https://ci.me/@{slug}/live, https://ci.me/@{slug}, @slug
숲 (SOOP)https://play.sooplive.co.kr/{userId}/..., https://www.sooplive.co.kr/station/{userId}
유튜브 (YouTube)https://www.youtube.com/watch?v={videoId}, https://www.youtube.com/@{username}, @username
투네이션https://toon.at/widget/alertbox/{key}
new StreamChatBuilder()
.add("https://...")
.withSoopCredentials("아이디", "비밀번호") // SOOP 로그인 (선택)
.withYouTubePollInterval(3000) // YouTube 폴링 간격 (선택, 기본값 5000ms)
.withAutoReconnect(true) // 자동 재연결 (기본값 false)
.withDebugMode() // 디버그 로그 출력
.withListener(listener)
.build();

모든 플랫폼의 후원이 Donation record로 통합됩니다.

donation.platform() // CHZZK, CIME, SOOP, TOONATION, YOUTUBE
donation.type() // CHAT, VIDEO, MISSION, PARTY, SUBSCRIPTION, SUBSCRIPTION_GIFT
donation.status() // SUCCESS, PENDING, APPROVED, REJECTED, EXPIRED, ...
donation.nickname() // 후원자 닉네임
donation.message() // 후원 메시지
donation.anonymous() // 익명 여부
donation.amount() // 금액 (int)
donation.currencyCode() // CHEESE, BEAM, BALLOON, KRW, USD, ...
donation.amountInKRW() // 원화 환산 금액
donation.formattedAmount() // "1000치즈 (1000원)", "₩5,000" 등
donation.raw() // 플랫폼별 원본 객체
타입설명
CHAT일반 채팅 후원 (치즈, 별풍선 등)
VIDEO영상 후원
MISSION미션 후원
PARTY파티 후원
SUBSCRIPTION구독
SUBSCRIPTION_GIFT구독 선물
상태설명
SUCCESS후원 완료
PENDING대기 중
APPROVED승인됨
REJECTED거절됨
EXPIRED만료됨

  • OkHttp ManagedWebSocket 기반 WebSocket 관리 (closing 플래그, 지수 백오프 재시도)
  • idle timeout 감지 — 메시지 없이 유휴 상태가 지속되면 자동 감지 및 재연결
  • NonRetryableException — 구독자 전용, 성인 인증 등 비복구성 에러는 재시도 없이 즉시 중단
플랫폼감지 방식
치지직30초 폴링으로 방송 상태 확인
씨미 (CiMe)LIVE_ENDED WebSocket 이벤트
숲 (SOOP)svc_SETBJSTAT=0 패킷
유튜브 (YouTube)invalidationContinuationData 부재 + getBroadcastInfo() 검증
투네이션alertbox 기반 (방송 독립), idle timeout 60초
  • JWT 토큰 만료 5분 전부터 자동 갱신 시도 (최대 3회)
  • 새 연결 먼저 열고 구 연결 닫기 (메시지 유실 방지)
  • 메시지 ID 기반 중복 제거
  • 5개 플랫폼의 후원을 단일 Donation record로 통합
  • DonationType: CHAT, VIDEO, MISSION, PARTY, SUBSCRIPTION, SUBSCRIPTION_GIFT
  • DonationStatus: SUCCESS, PENDING, APPROVED, REJECTED, EXPIRED 등
  • CurrencyUtils: 치즈·빔·별풍선·원·USD 등 통화 변환 및 원화 환산