API - Option

setShareScheme(_ scheme:, shareDelegate:)

공유하기를 선택(탭) 했을 때 시스템 공유 팝업으로 전달할 scheme을 설정합니다.
shareDelegate를 설정하면 iOS 시스템 공유 팝업 대신 직접 커스텀 공유 팝업을 구현할 수 있습니다.

setShareScheme(_ scheme: String?, shareDelegate: ShopLivePlayerShareDelegate?)
매개변수설명
scheme공유할 scheme 또는 URL
shareDelegateShopLiveShareDelegate

ShopLivePlayerShareData

변수설명
campaignShopLivePlayerShareCampaign?
- 현재 방송 캠페인에 대한 정보
urlString?
- 공유할 scheme 또는 URL

ShopLivePlayerShareCampaign

변수설명
campaignKeyString?
- 현재 방송의 campaignKey
titleString?
- 현재 방송의 제
descriptionsString?
- 현재 방송의 설명
thumbnailString?
- 현재 방송의 썸네일 이미지

샘플 코드

let scheme = "shoplive://live"
let scheme = "https://shoplive.cloud/live"

class ViewController : UIViewController {
  
  func viewDidLoad(){ 
    // iOS 시스템 공유 팝업
		ShopLive.setShareScheme(scheme, shareDelegate: nil)
  }
} 
extension ViewController : ShopLiveShareDelegate { 
  func handleShare(data : ShopLivePlayerShareData) {
    //show share sheet
  }
}

setChatViewFont(inputBoxFont:, sendButtonFont:)

채팅 폰트와 채팅 전송 버튼 폰트를 설정합니다.

setChatViewFont(inputBoxFont: UIFont, sendButtonFont: UIFont)
매개변수설명
inputBoxFont채팅 폰트
sendButtonFont채팅 전송 버튼 폰트

샘플 코드

/**
    // 채팅 폰트 설정
    let inputDefaultFont = UIFont.systemFont(ofSize: 14, weight: .regular)

    // 채팅 전송 버튼 폰트 설정
    let sendButtonDefaultFont = UIFont.systemFont(ofSize: 14, weight: .medium)

*/

let customFont = UIFont(name: "{Custom Font}", size: 16)

// 채팅 폰트 및 채팅 전송 버튼 폰트 변경 
ShopLive.setChatViewFont(inputBoxFont: customFont, sendButtonFont: customFont)

setLoadingAnimation(images:)

영상 로딩 진행률을 이미지 애니메이션으로 설정합니다.

setLoadingAnimation(images: [UIImage])
매개변수설명
images이미지 애니메이션에 사용할 이미지 UIImage 배열

샘플 코드

var images: [UIImage] = []

for i in 1...11 {
    images.append(.init(named: "loading\(i)")!)
}

ShopLive.setLoadingAnimation(images: images)

setInAppPipConfiguration(config:)

InAppPip 관련 옵션을 설정합니다.
setInAppPipConfiguration(config:)로 설정된 값들은 이전 deprecate된 Api들로 설정된 값보다 우선순위를 가지고 있습니다.

매개변수설명
ShopLiveInAppPipSizeinit(pipMaxSize : CGfloat)

init(pipFixedHeight : CGFloat)

init(pipFixedWidth : CGFLoa
  • pipMaxSize의 경우 .scaleAspectFill로 정해집니다.
    예시) pipMazSize가 100일 경우
    가로모드에서는 가로 100 , 세로 100 x (영상 비율)
    세로모드에서는 세로 100, 가로 100 x (영상 비율) 이 됩니다.
매개변수설명
ShopLiveInAppPipConfiguration /pipSize :ShopLiveInAppPipSize

useCloseButton : Bool
(InAppPip에서 좌측 상단의 닫기 버튼을 보여줄지 설정합니다.기본값 : false)

pipPosition : ShopLive.PipPosition
(기본값 .bottomRight)

enableSwipeOut : Bool
(앱 내 PIP를 화면 밖으로 이동하여 종료 시킬 지 여부를 설정합니다. 기본값: false)

📘

Objective-C 환경에서는 ShopLiveInAppPipConfigurationObjc 객체를 사용해주시기 바랍니다.

샘플 코드


//maxSize
let pipSize = ShopLiveInAppPipSize(pipMaxSize : 200)
//fixedHeight
let pipSize = ShopLiveInAppPipSize(pipFixedHeight : 200)
//fixedWidth
let pipSize = ShopLiveInAppPipSize(pipFixedWidth  :200)

let inAppPipConfig = ShopLiveInAppPipConfiguration(pipSize: pipSize,
                                                   useCloseButton: true,
                                                   pipPosition: .bottomLeft,
                                                   enableSwipeOut: true)
ShopLive.setInAppPipConfiguration(config: inAppPipConfig)

startPictureInPicture(with: , scale: )

전체 화면 모드에서 PIP 모드로 전환합니다.

startPictureInPicture(with position: ShopLive.PipPosition, scale: CGFloat)
startPictureInPicture()
매개변수설명
positionPIP 모드가 시작될 때 위치
기본값: default
scale0.0 ~ 1.0 사이의 값 입력

샘플 코드

// 0.4배(기본값) 크기로 앱 내 PIP 모드 전환
ShopLive.startPictureInPicture()

// 화면 우하단에서 0.1배 크기로 앱 내 PIP 전환
ShopLive.startPictureInPicture(with: .bottomRight, scale: 0.1)

// 화면 좌상단에서 0.8배 크기로 앱 내 PIP 전환
ShopLive.startPictureInPicture(with: .topLeft, scale: 0.8)

크기 설정 예시

크기PIP 화면크기PIP 화면크기PIP 화면
0.10.4
(기본)
0.8

stopPictureInPicture()

PIP 모드를 전체 화면 모드로 전환합니다.

stopPictureInPicture()

샘플 코드

ShopLive.stopPictureInPicture()

hookNavigation(navigation: @escaping ((URL) -> Void))

상품 또는 배너를 선택할 때 매개변수에 설정한 custom Callback 함수(매개변수로 입력한 navigation)로 직접 이벤트를 받습니다.

hookNavigation(navigation: @escaping ((URL) -> Void))
매개변수설명
navigation상품 또는 배너를 선택할 때 호출되는 block

- 선택한 상품 또는 배너의 URL 전달

샘플 코드

ShopLive.hookNavigation { url in
       // url: 선택한 상품 또는 배너에 설정된 상세 정보 URL
       print("hookNavigation \(url)")
   }

KeepWindowStyleOnReturnFromOsPip 옵션

setKeepWindowStyleOnReturnFromOsPip(_ keep: Bool)

OS PIP를 사용하는 경우 Shoplive Player가 재생중인 상태(pip, fullscreen)에서 홈화면 또는 다른 앱으로 이동(백그라운드 상태로 전환) 하면서 영상이 OS PIP로 진입된 후,
다시 앱으로 돌아오면서 마지막 재생중이던 상태(pip, fullscreen)로 전환 또는 항상 전체화면으로만 전환되도록 선택할 수 있습니다.

setKeepWindowStyleOnReturnFromOsPip(_ keep: Bool)
매개변수설명
keepOS PIP상태에서 앱으로 돌아올 때 플레이어 재생중 상태를 설정
false: 항상 전체화면으로 전환
true: 마지막 재생중이던 상태(pip, fullscreen)로 전환 (기본값)

샘플 코드

// OS PIP로 전환 되기전 마지막 재생중 상태로 유지하도록 설정
ShopLive.setKeepWindowStyleOnReturnFromOsPip(true)

// OS PIP상태에서 앱으로 전환되면서 항상 전체화면으로 전환되도록 설정
ShopLive.setKeepWindowStyleOnReturnFromOsPip(false)

isKeepWindowStyleOnReturnFromOsPip

현재 설정된 깂을 반환합니다.

false: 항상 전체화면으로 전환
true: 마지막 재생중이던 상태(pip, fullscreen)로 전환 (기본값)

isKeepWindowStyleOnReturnFromOsPip() -> Bool


샘플 코드

print(ShopLive.isKeepWindowStyleOnReturnFromOsPip())

setKeepAspectOnTabletPortrait(_ keep:)

태블릿 세로모드에서 Shoplive 화면의 비율을 설정합니다.
true: 화면 비율 유지 (기본값)
false: 화면 가득 채움

setKeepAspectOnTabletPortrait(_ keep: Bool)
매개변수설명
keep화면 비율 유지 여부 설정

샘플 코드

ShopLive.setKeepAspectOnTabletPortrait(true)

ShopLiveCommonUser

Shoplive를 사용하는 인증된 사용자입니다.
사용자를 인증하기 위해 사용자 정보를 입력합니다.

var user: ShopLiveCommonUser? { get set }
// 사용자 성별
public enum ShopliveCommonUserGender : String, CaseIterable {
    case female = "f"
    case male = "m"
    case neutral = "n"
}
public class ShopLiveCommonUser: NSObject {
    var userId: String?
    var name: String?
    var age: Int?
    var gender: ShopliveCommonUserGender?
    var userScore : Int?
    var custom : [String : Any]?

📘

Objective-C 환경에서는 ShopLiveCommonUserObjc 객체를 사용해주시기 바랍니다.


authToken

Shoplive를 사용하는 인증된 사용자의 보안 인증토큰(JWT) string입니다.
사용자 인증을 위해 인증된 사용자의 보안 인증토큰(JWT) string을 입력합니다.

var authToken: String? { get set }

샘플 코드

let generatedJWT = "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTA1NzA1dfadsfasfadsfasdfwO"

ShopLive.authToken = generatedJWT

style

현재 Shoplive Player 스타일입니다.

var style: ShopLive.PresentationStyle { get }
public enum PresentationStyle: Int {
    case unknown
    case fullScreen
    case pip
}

샘플 코드

print(ShopLive.style)

playerMode

현재 Shoplive Player의 모드입니다.

var playerMode: ShopLive.PlayerMode { get }
public enum PlayerMode: Int {
    case play
    case preview
    case none
}
매개변수설명
playplay api로 Player가 실행된 상태로 영상(리허설, 라이브, 다시보기)를 재생중
previewpreview api로 Player가 실행된 상태로 미리보기 재생중
nonePlayer가 실행중이지 않은 상태

orientationMode

현재 Shoplive Platyer에서 재생중인 방송의 영상 비율 정보입니다.

var orientationMode: ShopLive.VideoOrientation { get }
public enum VideoOrientation: Int {
    case portrait
    case landscape
    case unknown
}
매개변수설명
portrait세로 비율 모드의 방송 (비율 예 - 9:16)
landscape가로 비율 모드의 방송(비율 예 - 16:9)
unknown모드를 알수 없는 상태, 방송 중이지 않거나, SDK로 방송 정보 정보가 아직 업데이트 되지 않은 상태

playerWindow

현재 Shoplive Player가 표시되고 있는 UIWindow의 인스턴스입니다.

var playerWindow: ShopLiveWindow? { get }

playerWindow.forceAddSubView(view : UIView)

ShopLive 프레임워크 위에 고객사의 뷰를 넣고 싶은 경우 사용하는 함수입니다.

일반적인 addSubView의 경우 ShopLive 정책에 따라 고객사의 뷰가 추가되지 않을 수 있습니다.

ShopLive.playerWindow?.forceAddSubView({YOUR_VIEW})

viewController

현재 Shoplive Player가 표시되고 있는 UIViewController의 인스턴스입니다.

var viewController: ShopLiveViewController? { get }

샘플 코드

// Shoplive Player 위에 Alert를 표시
let alert = UIAlertController.init(title: "Alert on Player", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

ShopLive.viewController?.present(alert, animated: true, completion: nil)

setVisibleStatusBar 옵션

Shoplive Player가 전체화면으로 재생되고 있을때 앱의 상태바를 숨길 수 있습니다.
inAppPip의 경우 상태바가 자동으로 보이게 됩니다.

setVisibleStatusBar(isVisible : Bool)

setVisibleStatusBar(isVisible : Bool)
매개변수설명
isVisible상태바의 숨김 유무를 설정합니
true: 상태바 보이기 (기본값)
false: 상태바 숨기기

샘플 코드

ShopLive.setVisibleStatusBar(isVisible : Bool)

indicatorColor

로딩 인디케이터 색을 설정합니다.

var indicatorColor: UIColor { get set }

샘플 코드

ShopLive.indicatorColor = UIColor.red

isSuccessCampaignJoin() -> Bool

방송 진입 성공 여부를 확인합니다.
관련 Callback: handleReceivedCommand - ON_SUCCESS_CAMPAIGN_JOIN

isSuccessCampaignJoin() -> Bool

샘플 코드

print(ShopLive.isSuccessCampaignJoin())

AutoResumeVideoOnCallEnded 옵션

통화 종료 후 영상으로 돌아왔을 때, 자동 재생이 되도록 설정합니다.

setAutoResumeVideoOnCallEnded(_ autoResume: Bool)

setAutoResumeVideoOnCallEnded(_ autoResume: Bool)
매개변수설명
autoResume통화 종료 후, 영상 자동 재생
true: 자동 재생
false: 자동 재생되지 않음 (기본값)

샘플 코드

ShopLive.setAutoResumeVideoOnCallEnded(true)

isAutoResumeVideoOnCallEnded() -> Bool

현재 설정된 값을 반환합니다.
true: 통화 종료 후 자동재생
false: 통화종료 후 영상 정지

isAutoResumeVideoOnCallEnded() -> Bool

샘플 코드

print(ShopLive.isAutoResumeOnCallEnded())

KeepPlayVideoOnHeadphoneUnplugged 옵션

이어폰(또는 헤드셋) 연결이 끊겼을 때, 영상을 중지하지 않고 자동 재생이 되도록 설정합니다.

setKeepPlayVideoOnHeadphoneUnplugged(_ keepPlay: Bool)

이어폰(또는 헤드셋) 연결이 끊겼을 때, 영상을 중지하지 않고 자동 재생이 되도록 설정합니다.

setKeepPlayVideoOnHeadphoneUnplugged(_ keepPlay: Bool)
매개변수설명
keepPlay이어폰(또는 헤드셋) 연결이 끊겼을 때, 계속 영상 재생
true: 자동 재생
false: 자동 재생되지 않음(기본값)

샘플 코드

ShopLive.setKeepPlayVideoOnHeadphoneUnplugged(true)

isKeepPlayVideoOnHeadPhoneUnplugged() -> Bool

현재 설정된 값을 반환합니다.
true: 영상 계속 재생
false: 연결이 끊기면 영상 정지

isKeepPlayVideoOnHeadPhoneUnplugged() -> Bool

샘플 코드

print(ShopLive.isKeepPlayVideoOnHeadPhoneUnplugged())

NextActionOnHandleNavigation 옵션

사용자가 상품, 공지사항, 배너 등 링크를 선택하였을 때, Shoplive Player의 다음 동작을 설정합니다.

public enum ActionType: Int {
    case PIP
    case KEEP
    case CLOSE
}
매개변수설명
PIPPIP 전환
KEEP상태 유지
CLOSE종료

setNextActionOnHandleNavigation(actionType:)

setNextActionOnHandleNavigation(actionType: ActionType)
매개변수설명
actionType사용자의 링크 선택 시 Shoplive Player의 다음 동작

샘플 코드

// PIP 전환
ShopLive.setNextActionOnHandleNavigation(.PIP)

// 상태 유지
ShopLive.setNextActionOnHandleNavigation(.KEEP)

// 종료
ShopLive.setNextActionOnHandleNavigation(.CLOSE)

getNextActionTypeOnHandleNavigation() -> ActionType

사용자의 링크 선택 시 설정된 Shoplive Player의 다음 동작을 확인합니다.

getNextActionTypeOnHandleNavigation() -> ActionType

샘플 코드

print(ShopLive.getNextActionTypeOnHandleNavigation())

sendCommandMessage

서버로 command와 payload를 전달합니다.
사전 정의된 형식의 command, payload 를 전달할 수 있습니다. (또는, Shoplive와 협의하여 command와 payload를 정의할 수 있습니다.)

@objc static func sendCommandMessage(command: String, payload: [String:Any]?)
매개변수설명
command사전 정의된 command
payload사전 정의된 payload

샘플 코드

let command: String = “COMMAND_NAME”
var payload: [String : Any] = [:]

payload[“Int_Data” : 1]
payload[“String_Data” : “Sample_String”]

ShopLive.sendCommandMessage(command: command, payload: payload)

setMuteWhenPlayStart(_ mute: Bool)

Shoplive Player를 시작할 때 사운드가 켜지도록 하거나 음소거하도록 설정합니다.
(기본값: 사운드가 켜진 상태로 Shoplive Player를 시작합니다.)

@objc static func setMuteWhenPlayStart(_ mute: Bool)
매개변수설명
mute음소거 설정 여부
true: 음소거로 시작
false: 사운드 켜진 상태로 시작

샘플 코드

// Shoplive Player를 시작할 때 음소거하도록 설정
ShopLive.setMuteWhenPlayStart(true)

//Shoplive Player를 시작할 때 사운드가 켜지도록 설정
ShopLive.setMuteWhenPlayStart(false)

setPictureInPicturePadding(padding: UIEdgeInsets) -> Bool

앱 내 PIP에서 PIP 패딩을 설정합니다. (top, left, right, bottom)
(기본값: top, left, right, bottom 모두 20으로 설정)
유효하지 않은 값이 설정 되면 false를 반화하고 기본값을 적용합니다.

@objc static func setPictureInPicturePadding(padding: UIEdgeInsets) -> Bool
매개변수설명
paddingTop, left, right, bottom 등 padding값을 설정합니다.

샘플 코드

// left: 20 right: 30 bottom: 10 top: 10 으로 설정

let padding: UIEdgeInsets = .init(top: 10, left: 20, bottom: 10, right: 30)

ShopLive.setPictureInPicturePadding(padding: padding)

setPictureInPictureFloatingOffset(offset: UIEdgeInsets) -> Bool

앱 내 PIP에서 PIP가 이동할 수 있는 영역을 설정합니다.
유효하지 않은 값이 설정 되면 false를 반화하고 기본값을 적용합니다.

@objc static func setPictureInPictureFloatingOffset(offset: UIEdgeInsets) -> Bool
매개변수설명
offsettop, left, right, bottom의 offset 값을 설정합니다.

샘플 코드

// left: 20, right: 30, bottom: 10, top: 10으로 offset 값 설정

let offset: UIEdgeInsets = .init(top: 10, left: 20, bottom: 10, right: 30)

ShopLive.setPictureInPictureFloatingOffset(offset: offset)

setUsingLocalStorage(_ use: Bool)

로컬 스토리지 저장 기능 사용 여부를 설정합니다.

@objc static func setUsingLocalStorage(_ use: Bool)
매개변수설명
use로컬 스토리지 저장 기능 사용 여부
true: 로컬 스토리지 저장 기능 사용
false: 로컬 스토리지 저장 기능 사용 안 함

샘플 코드

// 로컬 스토리지 저장 기능을 사용하도록 설정
ShopLive.setUsingLocalStorage(true)

// 로컬 스토리지 저장 기능을 사용하지 않도록 설정
ShopLive.setUsingLocalStorage(false)

setAppVersion(_ appVersion: String)

앱 버전을 설정합니다.
API를 호출하지 않아도 기본으로 앱의 버전을 읽고 서버로 전달합니다.
이 기능을 사용하려면 Shoplive 담당자에게 문의하세요.

@objc static func setAppVersion(_ appVersion: String)
매개변수설명
appVersion앱 버전

샘플 코드

let appVersion: String = “1.0.0”

ShopLive.setAppVersion(appVersion)

setMixWithOthers(_ isMixAudio: Bool)

외부 오디오와 함께 방송을 시청할 수 있습니다.

@objc static func setMixWithOthers(_ isMixAudio: Bool)
매개변수설명
isMixAudiotrue : 외부 오디오와 함께 방송 시청, false : 외부 오디오가 재생되면 Player는 일시정지 (기본값:true)

샘플 코드

// 외부 오디오가 재생되면 Player는 일시정지
ShopLive.setMixWithOthers(false)

// 외부 오디오와 함께 방송 시청
ShopLive.setMixWithOthers(true)

useCloseButton(_ use: Bool)

Preview와 PIP모드에서 닫기 버튼을 활성화할 수 있습니다.

@objc static func useCloseButton(_ use: Bool)
매개변수설명
usetrue : Preview와 PIP모드에서 닫기 버튼 사용, false : Preview와 PIP모드에서 닫기 버튼 사용하지 않음

샘플 코드

// Preview와 PIP모드에서 닫기 버튼 사용하지 않음
ShopLive.useCloseButton(false)

// Preview와 PIP모드에서 닫기 버튼 사용
ShopLive.useCloseButton(true)

addParameter(key: String, value: String)

플레이어를 실행하기 전에 커스텀 데이터를 추가할 수 있습니다.

@objc static func addParameter(key: String, value: String)
매개변수설명
key추가 적용할 커스텀 파라미터 key
value추가 적용할 커스텀 파라미터 value

샘플 코드

ShopLive.addParameter(key: "key", value: "value")

removeParameter(key: String, value: String)

플레이어를 실행하기 전에 addParameter로 추가했던 커스텀 데이터를 삭제합니다.

@objc static func removeParameter(key: String)
매개변수설명
key삭제할 커스텀 파라미터 key

샘플 코드

ShopLive.removeParameter(key: "key)

setUtmSource(utmSource: String)

UTM Source를 tracking 할 수 있습니다. 데이터는 데이터 인사이트에서 확인 할 수 있습니다.

func setUtmSource(utmSource: String?)
매개변수설명
utmSource해당 유입이 어디에서 발생하였는지를 전달해줍니다.

샘플 코드

ShopLive.setUtmSource(“{utm_source}”)

setUtmMedium(utmMedium: String)

UTM Medium를 tracking 할 수 있습니다. 데이터는 데이터 인사이트에서 확인 할 수 있습니다.

func setUtmMedium(utmMedium: String?)
매개변수설명
utmMedium해당 유입이 어떻게 발생하였는지를 전달해줍니다. 구글은 medium 파라미터를 유입이 유도된 마케팅 방식을 지칭하도록 세팅하는 것을 권장하고 있습니다. (ex. cpc, banner, email, blog, social etc.)

샘플 코드

ShopLive.setUtmMedium(“{utm_medium}”)

setUtmCampaign(utmCampaign: String)

UTM Campaign를 tracking 할 수 있습니다. 데이터는 데이터 인사이트에서 확인 할 수 있습니다.

func setUtmCampaign(utmCampaign: String?)
매개변수설명
utmCampaign어떤 광고의 캠페인으로 유입이 발생하였는지를 전달해줍니다. Campaign Name, Campaign Term, Campaign Content로 나눠서 만들 수 있습니다.

샘플 코드

ShopLive.setUtmCampaign(“{utm_campaign}”)

setUtmContent(utmContent: String)

UTM Content를 tracking 할 수 있습니다. 데이터는 데이터 인사이트에서 확인 할 수 있습니다.

func setUtmContent(utmContent: String?)
매개변수설명
utmContent해당 유입이 어떤 내용을 가진 포스팅/광고에 의해서 발생하였는지를 전달해줍니다. 주로 campaign 파라미터의 하위 구분으로 자주 활용됩니다.

샘플 코드

ShopLive.setUtmContent(“{utm_content}”)