Event handler
플레이어가 앱에 알려 주는 콜백 14개의 전체 목록입니다. 앱 전체 콜백과 인스턴스별 클로저 두 가지 등록 방식, 등록하지 않았을 때 플레이어가 무엇을 하는지 함께 다룹니다.
콜백 전체
등록 방식은 두 가지입니다.
앱 전체 콜백 — LivePlayerCallback 을 구현한 객체를 SauceClient.setLivePlayerCallback 에 한 번 등록합니다(권장).
인스턴스별 클로저 — SauceLivePlayerClient 의 프로퍼티에 대입합니다. 클로저가 앱 전체 콜백보다 우선하며, 대입하지 않은 것은 앱 전체 콜백으로 갑니다.
📘 반환값이 있는 콜백 — 이름이
on…Click · onOpenLink · onShare 인 콜백은 Bool 을 돌려줍니다.true 면 앱이 처리한 것이므로 플레이어는 아무것도 하지 않고, false 면 아래 「등록하지 않았을 때」 동작을 합니다.
📌 필수 구현은
onLoginRequest() 하나입니다. 나머지는 필요한 것만 구현합니다.
| 콜백 (프로토콜) | 클로저 | 전달값 | 언제 호출되나 | 등록하지 않았을 때 |
|---|---|---|---|---|
onLoginRequest() 필수onLoginRequest(context:) |
onLoginRequest |
context.featurebroadcastIdresumeId |
게스트가 회원 기능을 시도하고 「로그인」을 선택했을 때. 플레이어는 유지됩니다 → 로그인이 필요한 순간 처리하기 |
아무 동작 없음 |
onClose(reason:)onClose() |
onCloseWithReasononClose |
.user .system.unavailable |
플레이어가 닫힐 때. 화면을 내리는 것은 앱이 합니다 → 닫기 |
— |
onProductClick(info:) -> Bool |
onProductClick |
productId urlisAppScheme placement |
상품을 눌러 구매 페이지로 이동할 때 → 5. 상품 클릭 관리 |
아무 동작 없음 |
onCart(productId:) |
onCart |
상품 ID. 비어 있을 수 있음 | 장바구니 담기 → 5. 상품 클릭 관리 |
아무 동작 없음 |
onBannerClick(info:) -> Bool |
onBannerClick |
bannerId urlisAppScheme placementtargetType(.self .blank) |
상단 배너·슬롯 배너를 눌렀을 때 | .blank 는 외부 열기,.self 는 아무 동작 없음 |
onCouponDownload(couponCode:) |
onCouponDownload |
쿠폰 코드 | download 타입 쿠폰→ A. 쿠폰 사용하기 |
아무 동작 없음 |
onCouponCustom(metaData:) |
onCouponCustom |
어드민에 등록한 데이터. 형식이 정해져 있지 않습니다 | custom 타입 쿠폰 |
아무 동작 없음 |
onCouponLinkClick(info:) -> Bool |
onCouponLinkClick |
couponId couponTypeurl |
link·newWindow 타입 쿠폰 |
외부 열기 |
onRewardClick(info:) -> Bool |
onRewardClick |
linkUrl |
리워드 보상 링크 이동 → B. 리워드 사용하기 |
아무 동작 없음 |
onShare(info:) -> Bool |
onShare |
url title |
공유 버튼 → C. 방송 링크 공유하기 |
기본 공유 시트 |
onOpenLink(info:) -> Bool |
onOpenLink |
url isAppSchemesource(.logo .consult.introHtml .noticeHtml .tel) |
브랜드 로고, 상담하기, 소개·공지 안의 링크, 전화 링크 | 외부 열기 (전화는 전화 앱) |
onTurnOnNotification(info:)onTurnOffNotification(info:) |
동일 이름 | broadcastId broadcastUrlmemberId accessTokenprogrammingStartDtprogrammingEndDt |
방송 예고 화면의 알림 신청·해제 | 아무 동작 없음 |
onError(error:) |
onError |
error.code(Int)error.message(String) |
오류가 발생했을 때 → Error codes |
로그에만 남음 |
📘 모든
info 에 broadcastId 가 들어 있습니다.
❗ 알림 신청·해제는 전용 가이드 페이지가 없습니다. 방송 예고 화면에 알림 버튼을 노출했다면
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 를 사용하세요 |
Updated about 6 hours ago
Did this page help you?
