- 인쇄
API: Etc
- 인쇄
mute
현재 재생 중인 영상을 음소거 합니다.
func mute()Sample code
ShopLive.mute()unmute
현재 재생 중인 영상을 음소거를 해제합니다.
func unmute()Sample code
ShopLive.unmute()getCampaigns
accessKey 에 속한 캠페인(방송) 목록과 각 캠페인의 현재 상태를 조회합니다. 호출 전에 ShopLive.configure(with:) 로 accessKey 를 설정해야 합니다. iOS SDK 1.8.15 이상에서 사용할 수 있습니다.
extension ShopLive.API {
// completion
@discardableResult
static func getCampaigns(_ request: ShopLiveCampaignListRequest = ShopLiveCampaignListRequest(),
completion: @escaping (Result<ShopLiveCampaignListResponse, ShopLiveCommonError>) -> Void) -> ShopLiveCancellable
// async/await (iOS 13+)
static func getCampaigns(_ request: ShopLiveCampaignListRequest = ShopLiveCampaignListRequest()) async throws -> ShopLiveCampaignListResponse
}참고
completion 은 main thread 에서 호출됩니다.
반환값
ShopLiveCancellable의cancel()로 진행 중인 요청을 취소할 수 있습니다. async 버전은Task가 취소되면 요청도 함께 취소됩니다.요청·응답 타입은
ShopliveSDKCommon모듈에 정의되어 있습니다. 타입 이름을 코드에서 직접 사용할 때는import ShopliveSDKCommon이 필요합니다.
ShopLiveCampaignListRequest
조회 조건입니다. 모든 파라미터는 선택(optional)이며, 인자 없이 ShopLiveCampaignListRequest() 를 넘기면 서버 기본값으로 전체 상태를 조회합니다.
Parameter name | Type | Description |
|---|---|---|
page |
| 페이지 번호. 1부터 시작합니다. (Default: 1) |
size |
| 페이지당 캠페인 개수. 최대 20 입니다. (Default: 10) |
statuses |
| 조회할 상태 필터. 비어 있으면 전체 상태를 조회합니다. |
order |
| scheduledAt 기준 정렬 방향. |
ShopLiveCampaignListResponse
조회 결과입니다.
Property | Type | Description |
|---|---|---|
campaigns |
| 조회된 캠페인 목록 |
hasMore |
| 다음 페이지가 있는지 여부. true 이면 page 를 1 증가시켜 다시 조회합니다. |
ShopLiveCampaign
캠페인 한 건의 정보입니다.
Property | Type | Description |
|---|---|---|
campaignId |
| 캠페인 ID |
campaignKey |
| 캠페인 키. |
title |
| 캠페인 제목 |
description |
| 캠페인 설명 |
campaignUrl |
| 캠페인 URL |
rerun |
| 재방송 여부 |
archiveStream |
| 아카이브 스트림(다시보기) 제공 여부 |
privateLive |
| 프라이빗 방송 여부. 목록에 그대로 포함되므로 노출 여부는 앱에서 판단합니다. |
scheduledAt |
| 방송 예정 시각 |
scheduledEndAt |
| 방송 예정 종료 시각 |
posterUrl |
| 포스터 이미지 URL |
lifecycle |
| 상태와 상태 전환 시각 |
metrics |
| 시청 지표. |
ShopLiveCampaign.Lifecycle
캠페인의 상태와 상태 전환 시각입니다.
Property | Type | Description |
|---|---|---|
status |
| 캠페인 상태. 리허설 중은 |
rehearsal |
| 리허설 여부. 리허설 중에도 status 는 |
startedAt |
| 방송 시작 시각 |
closingAt |
| 종료 진행 시작 시각. status 가 |
endedAt |
| 방송 종료 시각 |
ShopLiveCampaign.Status
캠페인 상태 값입니다. 서버 값이 그대로 매핑되며, 정의되지 않은 값은 .unknown 으로 전달됩니다.
Case | Server value | Description |
|---|---|---|
| RESERVED | 예약된 방송. 요청 필터(statuses)로는 지정할 수 없고 전체 조회 시에만 포함됩니다. |
| READY | 방송 준비(대기) 중. lifecycle.rehearsal 이 true 이면 리허설 중입니다. |
| ONAIR | 방송 중. lifecycle.closingAt 이 있으면 종료 진행 중입니다. |
| CLOSED | 방송 종료 |
| 그 외 | 정의되지 않은 서버 상태 값입니다. 향후 추가되는 상태에 대비해 원본 문자열을 그대로 담습니다. |
ShopLiveCampaign.Metrics
시청 지표입니다. .onair / .closed 상태에서만 제공됩니다.
Property | Type | Description |
|---|---|---|
userCount |
| 시청자 수 |
adoreCount |
| 좋아요(하트) 수 |
showUserCount |
| false 이면 userCount / adoreCount 를 UI 에 노출하지 않아야 합니다. |
에러 처리
실패 시 ShopLiveCommonError 가 전달됩니다. codes 에 오류 코드가 담기며, message 는 항상 고정 문구 Failed to fetch campaign list. Refer to the error code. 입니다. 원인은 codes 로 판별하세요. 서버가 반환한 오류 코드는 그대로 전달되며, 전체 코드 목록은 Error codes 문서를 참고하세요.
Code | Description |
|---|---|
9000 | accessKey 가 설정되지 않았습니다. |
-200 | 존재하지 않는 accessKey 입니다. (Customer Account Not Found) |
그 외 서버 오류 코드 | 서버가 반환한 오류 코드가 그대로 전달됩니다. Error codes 문서를 참고하세요. |
HTTP 상태 코드 | 서버가 오류 본문 없이 응답한 경우 HTTP 상태 코드(예: 404, 500)가 그대로 전달됩니다. |
9900 | 네트워크 연결에 실패했습니다. |
9901 | 응답 JSON 파싱에 실패했습니다. |
10000 | 예기치 못한 오류입니다. |
Sample code
import ShopLiveSDK
import ShopliveSDKCommon
// accessKey 설정 (앱에서 최초 1회)
ShopLive.configure(with: "{accessKey}")
// 방송 중 · 준비 중인 캠페인을 최신순으로 20개 조회
let request = ShopLiveCampaignListRequest(page: 1,
size: 20,
statuses: [.onair, .ready],
order: .descending)
let cancellable = ShopLive.API.getCampaigns(request) { result in
switch result {
case let .success(response):
for campaign in response.campaigns {
switch campaign.lifecycle.status {
case .reserved:
print("예약", campaign.title ?? "")
case .ready:
print(campaign.lifecycle.rehearsal ? "리허설 중" : "준비 중", campaign.title ?? "")
case .onair:
print(campaign.lifecycle.closingAt == nil ? "방송 중" : "종료 진행 중", campaign.title ?? "")
case .closed:
print("종료", campaign.title ?? "")
case let .unknown(raw):
print("알 수 없는 상태", raw)
}
}
if response.hasMore {
// page 를 1 증가시켜 다음 페이지를 조회합니다.
}
case let .failure(error):
print("getCampaigns failed:", error.codes, error.message ?? "")
}
}
// 결과가 더 이상 필요 없으면(화면 이탈 등) 요청을 취소합니다.
// cancellable.cancel()Sample code (async/await)
// iOS 13+ — Task 가 취소되면 진행 중인 요청도 함께 취소됩니다.
Task {
do {
let response = try await ShopLive.API.getCampaigns(ShopLiveCampaignListRequest(statuses: [.onair]))
let onair = response.campaigns.filter { $0.lifecycle.closingAt == nil }
if let campaign = onair.first {
ShopLive.play(data: ShopLivePlayerData(campaignKey: campaign.campaignKey))
}
} catch let error as ShopLiveCommonError {
print("getCampaigns failed:", error.codes)
} catch {
// Task 취소(CancellationError) 등
}
}