GuidesAPI GuideChangelog
Log In
Guides

2. 플레이어 실행하기

라이브 ID 하나로 플레이어를 띄웁니다. UIKit 앱은 앱이 준 UIViewController 안에 자식으로 넣고, SwiftUI 앱은 .sauceLivePlayer 로 전체 화면에 띄웁니다.

2. 플레이어 실행하기 — 소스라이브 플레이어 iOS SDK
⏱ 예상 소요 시간: 5~10분
📋 사전 조건: 1. SDK 설치하기 — 초기화 완료
컨테이너 화면에 띄워보기

UIKit 화면에서는 새 화면을 띄우지 않습니다. 컨테이너 화면(UIViewController)을 넘기면 플레이어가 그 안에 자식으로 들어갑니다.
SwiftUI 앱은 아래 SwiftUI 앱에서 띄우기를 씁니다. SwiftUI 화면(UIHostingController)을 컨테이너로 넘기면 그 안에 붙이지 않고 별도 창에 전체 화면으로 띄웁니다.
콜백은 Event handler 의 SauceClient.setLivePlayerCallback 으로 앱 전체에 한 번 등록합니다.

Swift
SauceClient.startLivePlayer(broadcastID: "라이브 ID", token: nil, from: self)

플레이어별로 다른 콜백을 주거나 closePlayer() 로 직접 닫으려면 아래처럼 인스턴스를 만듭니다.

Swift
import SauceSDK

class LivePlayerVC: UIViewController {

    private var player: SauceLivePlayerClient?

    override func viewDidLoad() {
        super.viewDidLoad()

        let player = SauceLivePlayerClient.getInstance(
            broadcastID: "라이브 ID",
            token: nil,          // 게스트 모드 — 회원 연동은 다음 단계에서
            viewController: self
        )

        // ⚠️ 콜백을 먼저 등록한 뒤 startPlayer() 를 호출합니다
        player.onClose = { [weak self] in
            self?.dismiss(animated: true)
        }

        player.startPlayer()
        self.player = player
    }
}
⚠️ 콜백을 startPlayer() 보다 먼저 등록하세요 — 순서가 바뀌면 실행 직후에 발생한 이벤트를 놓칠 수 있습니다.
❗ 콜백을 등록하지 않으면 상품을 눌러도 아무 일도 일어나지 않습니다. 상품 클릭·장바구니·쿠폰·로그인은 앱이 콜백으로 받아 처리합니다. 화면 확인만 할 때는 이대로 두어도 되지만, 실제 연동은 3. 사용자 인증하기와 5. 상품 클릭 관리의 콜백까지 등록하세요.
⚠️ 인스턴스를 프로퍼티로 보관하세요 — 지역 변수에만 두면 화면이 유지되는 동안 해제될 수 있습니다. closePlayer() 로 직접 닫을 때도 이 참조가 필요합니다.
SwiftUI 앱에서 띄우기

띄울 화면에 .sauceLivePlayer 를 붙이고, isPresented 를 true 로 바꾸면 플레이어가 전체 화면으로 뜹니다.
시청자가 닫으면 SDK 가 isPresented 를 false 로 되돌립니다. 앱이 false 로 바꾸면 플레이어를 닫습니다.

Swift
import SwiftUI
import SauceSDK

struct LiveButton: View {
    @State private var showPlayer = false

    var body: some View {
        Button("라이브 보기") { showPlayer = true }
            .sauceLivePlayer(isPresented: $showPlayer, broadcastID: "라이브 ID", token: nil)
            .onSauceProductClick { info in
                // 앱의 상품 화면으로 이동
                return true
            }
    }
}

콜백은 .onSauce… modifier 로 받습니다. 같은 화면 계층 어디에 붙여도 됩니다. 각 modifier 는 인스턴스 클로저와 같은 콜백입니다(예: onSauceProductClick 은 onProductClick).

modifier받는 것
onSauceClose플레이어가 닫힘. 원인이 함께 옵니다. isPresented 는 이미 false 로 바뀐 뒤입니다
onSauceLoginRequest로그인 요청. 로그인 뒤 SauceClient.updateAccessToken 으로 회원 전환합니다
onSauceProductClick상품 클릭. 앱이 처리했으면 true 를 돌려줍니다
onSauceRewardClick리워드 보상 이동. 반환 규칙은 상품 클릭과 같습니다
onSauceBannerClick배너 클릭. true 면 SDK 가 열지 않습니다
onSauceCouponLinkClick쿠폰 링크. true 면 SDK 가 열지 않습니다
onSauceShare공유 버튼. true 면 SDK 가 공유 시트를 띄우지 않습니다
onSauceOpenLink로고 · 상담 · 전화 등 링크. true 면 SDK 가 열지 않습니다
onSauceCouponDownload쿠폰 발급 요청
onSauceCouponCustom어드민에 등록한 쿠폰 문자열
onSauceCart장바구니 담기
onSauceTurnOnNotification방송 알림 신청
onSauceTurnOffNotification방송 알림 해제
⚠️ modifier 로 받을 수 없는 콜백이 있습니다. appKey 검증 실패(onSdkAuthFailed)와 onProductLayerClick 은 SauceClient.setLivePlayerCallback 으로 앱 전체에 등록합니다. modifier 를 붙이지 않은 콜백도 이 객체가 받습니다. onSauceError 는 선언만 있고 호출되지 않습니다.
실행 순서

호출 두 개로 끝나지만, 내부에서는 아래 순서로 진행됩니다.
화면이 뜨지 않을 때 어디까지 진행됐는지 가늠하는 데 도움이 됩니다.

  • 1
    getInstance 가 SDK 초기화 상태를 확인합니다. 초기화하지 않았으면 여기서 앱이 종료됩니다. appKey 가 거부된 상태면 startPlayer() 가 화면을 띄우지 않고 onSdkAuthFailed 를 다시 알립니다.
  • 2
    startPlayer 가 플레이어를 컨테이너의 자식 화면으로 추가하고 컨테이너 크기를 그대로 채웁니다.
  • 3
    토큰을 확인합니다. nil 이면 게스트 계정을 자동 발급받습니다.
  • 4
    방송 정보를 받아 영상·채팅·상품 목록을 구성합니다. 이 단계에서 실패하면 시청자 화면에 오류가 표시되고 콘솔에 로그가 남습니다.
닫기

시청자가 플레이어의 닫기 버튼을 누르면 onClose 가 호출됩니다.
화면을 내리는 것은 앱이 해야 합니다. SDK 는 자기 자신만 정리합니다.

상황설명
시청자가 닫기 버튼을 누름onClose 가 호출됩니다.
앱이 dismiss 또는 popViewController 로 화면을 내립니다
앱이 직접 닫아야 함player.closePlayer() 를 호출합니다.
플레이어가 정리되고 컨테이너에서 제거됩니다
방송을 열 수 없어 닫힘onClose(reason: .unavailable) 이 호출됩니다.
비밀번호 입력 취소, 취소된 방송 등이 해당합니다
📘 화면 전환 방식은 앱이 정합니다. 컨테이너를 모달로 띄울지, 내비게이션으로 밀어 넣을지, 탭 안에 둘지에 따라 닫는 방법도 달라집니다.
플레이어가 안 뜰 때

순서대로 확인하세요. 대부분 앞의 두 가지입니다.
appKey 문제는 onSdkAuthFailed 로 코드가 옵니다 — Error codes.

증상확인할 것
화면이 비어 있다onSdkAuthFailed 가 호출됐는지 확인합니다. appKey 인증이 실패했을 수 있습니다 → 확인 방법
방송이 없다고 나온다apiHost 를 확인합니다. .stage 로 두면 테스트 서버에 붙으므로 실제 방송은 보이지 않습니다
진행 중인 방송이 안 보인다라이브 ID 가 맞는지, 그 방송이 지금 송출 중인지 확인합니다
앱이 종료된다initInstance 보다 먼저 getInstance 를 불렀습니다. SauceClient.isInitialized 로 먼저 확인하세요
라이브 ID 확인하기

라이브 ID 는 소스 어드민에서 확인합니다.
라이브를 편성한 뒤 라이브 송출 정보 확인에서 값을 복사해 broadcastId 에 그대로 전달하세요.

어드민 송출정보에서 라이브 ID 확인
▲ 어드민 분석 > 라이브 > 상세 > 송출정보에서 라이브 ID를 확인·복사
📘 VOD 재생 — 종료된 방송을 다시 재생하려면 같은 broadcastId 자리에 VOD ID 를 전달합니다. 호출 방법은 동일합니다.


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

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

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