GuidesAPI GuideChangelog
Log In
Guides

Event handler

플레이어가 앱에 알려 주는 콜백 14개의 전체 목록입니다. 앱 전체 콜백과 인스턴스별 클로저 두 가지 등록 방식, 등록하지 않았을 때 플레이어가 무엇을 하는지 함께 다룹니다.

Event handler — 소스라이브 플레이어 iOS SDK
📡 콜백 14개 · 필수 1개
콜백 전체

등록 방식은 두 가지입니다.
앱 전체 콜백LivePlayerCallback 을 구현한 객체를 SauceClient.setLivePlayerCallback 에 한 번 등록합니다(권장).
인스턴스별 클로저SauceLivePlayerClient 의 프로퍼티에 대입합니다. 클로저가 앱 전체 콜백보다 우선하며, 대입하지 않은 것은 앱 전체 콜백으로 갑니다.

📘 반환값이 있는 콜백 — 이름이 on…Click · onOpenLink · onShare 인 콜백은 Bool 을 돌려줍니다.
true 면 앱이 처리한 것이므로 플레이어는 아무것도 하지 않고, false 면 아래 「등록하지 않았을 때」 동작을 합니다.
📌 필수 구현은 onLoginRequest() 하나입니다. 나머지는 필요한 것만 구현합니다.
콜백 (프로토콜)클로저전달값언제 호출되나등록하지 않았을 때
onLoginRequest() 필수
onLoginRequest(context:)
onLoginRequest context.feature
broadcastId
resumeId
게스트가 회원 기능을 시도하고 「로그인」을 선택했을 때. 플레이어는 유지됩니다
로그인이 필요한 순간 처리하기
아무 동작 없음
onClose(reason:)
onClose()
onCloseWithReason
onClose
.user .system
.unavailable
플레이어가 닫힐 때. 화면을 내리는 것은 앱이 합니다
닫기
onProductClick(info:) -> Bool onProductClick productId url
isAppScheme placement
상품을 눌러 구매 페이지로 이동할 때
5. 상품 클릭 관리
아무 동작 없음
onCart(productId:) onCart 상품 ID. 비어 있을 수 있음 장바구니 담기
5. 상품 클릭 관리
아무 동작 없음
onBannerClick(info:) -> Bool onBannerClick bannerId url
isAppScheme placement
targetType(.self .blank)
상단 배너·슬롯 배너를 눌렀을 때 .blank 는 외부 열기,
.self 는 아무 동작 없음
onCouponDownload(couponCode:) onCouponDownload 쿠폰 코드 download 타입 쿠폰
A. 쿠폰 사용하기
아무 동작 없음
onCouponCustom(metaData:) onCouponCustom 어드민에 등록한 데이터. 형식이 정해져 있지 않습니다 custom 타입 쿠폰 아무 동작 없음
onCouponLinkClick(info:) -> Bool onCouponLinkClick couponId couponType
url
link·newWindow 타입 쿠폰 외부 열기
onRewardClick(info:) -> Bool onRewardClick linkUrl 리워드 보상 링크 이동
B. 리워드 사용하기
아무 동작 없음
onShare(info:) -> Bool onShare url title 공유 버튼
C. 방송 링크 공유하기
기본 공유 시트
onOpenLink(info:) -> Bool onOpenLink url isAppScheme
source(.logo .consult
.introHtml .noticeHtml .tel)
브랜드 로고, 상담하기, 소개·공지 안의 링크, 전화 링크 외부 열기 (전화는 전화 앱)
onTurnOnNotification(info:)
onTurnOffNotification(info:)
동일 이름 broadcastId broadcastUrl
memberId accessToken
programmingStartDt
programmingEndDt
방송 예고 화면의 알림 신청·해제 아무 동작 없음
onError(error:) onError error.code(Int)
error.message(String)
오류가 발생했을 때
Error codes
로그에만 남음
📘 모든 infobroadcastId 가 들어 있습니다.
알림 신청·해제는 전용 가이드 페이지가 없습니다. 방송 예고 화면에 알림 버튼을 노출했다면 onTurnOnNotification·onTurnOffNotification 을 등록하고 자사 푸시 시스템에 반영하세요. 등록하지 않으면 시청자가 눌러도 아무 일도 일어나지 않습니다.
⚠️ onCouponEvent · onSlotBannerClick · onLogin 은 이전 이름입니다. 컴파일은 되지만 경고가 나며 다음 버전에서 제거됩니다.
등록 방법

앱 전체 콜백은 초기화 직후에, 인스턴스별 클로저는 startPlayer() 전에 등록합니다.

Swift
// 앱 전체
final class SauceCallbacks: LivePlayerCallback {
    func onLoginRequest() { /* 필수 */ }
    func onProductClick(info: ProductClickInfo) -> Bool { /* … */ return true }
    func onClose(reason: PlayerCloseReason) { /* 화면 내리기 */ }
    func onError(error: SdkError) { print("\(error.code): \(error.message)") }
}
SauceClient.setLivePlayerCallback(SauceCallbacks())

// 인스턴스별
let player = SauceLivePlayerClient.getInstance(
    broadcastID: "라이브 ID", token: nil, viewController: self
)
player.onCloseWithReason = { [weak self] _ in self?.dismiss(animated: true) }
player.startPlayer()
📘 등록하지 않은 콜백은 위 표의 「등록하지 않았을 때」 동작을 합니다. 단 게스트 시청을 허용한다면 onLoginRequest 는 반드시 구현하세요. 없으면 시청자가 로그인을 눌러도 아무 일이 일어나지 않습니다.
콜백으로 오지 않는 것

아래는 콜백 자체가 없습니다. 플레이어가 자체 처리하거나 앱이 개입할 수 없습니다.

이벤트현재 동작
채팅 메시지플레이어가 자체 처리. 송·수신 모두 불가
쿠폰 apiDownload플레이어가 자체 처리 → A. 쿠폰 사용하기
PIP 상태 변경SDK 내부에서만 처리됩니다. 앱이 상태를 조회하려면 PIPKit.isPIP 를 사용하세요


Did this page help you?
🏠 소스라이브 🎬 소스클립 🔗 소스링크 📢 소스애드
🧩 API 가이드
🆕 최근 업데이트
💬 도움이 더 필요하신가요?
메일로 문의 카카오톡 채널로 문의
담당자에게 문의하기

궁금한 점이나 불편했던 점을 남겨주시면 담당자가 확인 후 답변드릴게요.

가이드 챗봇 BETA
* AI를 활용해 답변해서 사실과 다를 수도 있어요. 더 궁금한 사항은 '담당자에게 문의하기'를 이용해주세요.
💡 궁금한 솔루션(예: 라이브, 링크 등)을 함께 적어주시면 더 정확한 답변을 받을 수 있어요.