소스클립 플레이어
1. 소개
짧은 영상에 상품을 연동하는 커머스에 특화된 숏폼 서비스로, 웹브라우저나 앱의 웹뷰에서 이용할 수 있는 URL이 제공됩니다.
2. 연동 방법
연동 방법에는 링크 이동 방식과, iframe 연동 방식, Webview 연동 방식을 사용하는 방법으로 구분됩니다.
앱에서 연동하는 경우에는 반드시 Webview 연동 방식으로 연동해주세요.
컨피그 설정
소스클립 컨피그 설정하기 페이지를 참고해서 모비두 담당자에게 문의하여 설정합니다.
링크 이동 방식
직접 플레이어 링크로 이동하는 경우, 이동할 URL에 다음 형식의 값을 지정합니다.
https://player.sauceclip.com/player?clipId={{소스클립ID}}&partnerUniqueId={{파트너ID}}
- 소스클립ID에는 클립 목록 조회 API 를 통해서나 어드민에서 등록한 클립ID를 입력해 주세요.
- 파트너ID에는 계정정보 가져오기 API를 통해서 확인한 파트너ID를 입력해 주세요.
iframe 연동 방식
STEP 1. 페이지 내 적용하려는 위치에 플레이어 링크를 연결한 iframe태그를 다음과 같이 추가합니다.
- 외부 유입 코드를 사용하지 않는 경우
<iframe src="https://player.sauceclip.com/player?clipId={{소스클립ID}}&partnerUniqueId={{파트너ID}}"</iframe>
- 외부 유입 코드를 사용하는 경우, 적용하려는 페이지 URL의 쿼리스트링에 존재하는 fc의 값을 추가해주세요.
<iframe src="https://player.sauceclip.com/player?clipId={{소스클립ID}}&partnerUniqueId={{파트너ID}}&fc={{fc값}}"></iframe>
STEP 2. window 객체에 message이벤트 핸들러를 구현하여 브릿지를 연동합니다.
window.addEventListener(
"message",
function(event) {
console.log(event.data);
}, false
);
- 브릿지의 페이로드는 JSON형식의 객체가 문자열로 변환되어 제공됩니다.
- 전달되는 데이터의 브릿지명과 페이로드는 '3. 브릿지' 항목을 참고해주세요.
Webview 연동 방식
앱에서 웹뷰를 사용하여 연동하는 경우, 특정 동작들에 대해서 브릿지를 구현하여 연동하는 방식입니다.
링크 이동과 관련된 동작들은 반드시 브릿지 구현이 필요합니다.
Android
안드로이드의 경우 "sauceclip" 이름을 가진 브릿지 중 해당 브릿지가 있는 경우 메시지를 전달하게 되며, 기본 동작은 취소됩니다.
import android.os.Handler
import android.webkit.JavascriptInterface
import android.widget.Toast
class AndroidBridge(private val activity: MainActivity) {
private val handler = Handler()
@JavascriptInterface
fun sauceclipEnter() {
handler.post {
Toast.makeText(activity, "sauceclipEnter", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipMoveExit() {
handler.post {
Toast.makeText(activity, "sauceclipMoveExit", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipMoveProduct(message: String) {
handler.post {
Toast.makeText(activity, "sauceclipMoveProduct \\n $message", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipAddCart(message: String) {
handler.post {
Toast.makeText(activity, "sauceclipAddCart \\n $message", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipMoveCart() {
handler.post {
Toast.makeText(activity, "sauceclipMoveCart", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipOnShare(message: String) {
handler.post {
Toast.makeText(activity, "sauceclipOnShare \\n $message", Toast.LENGTH_SHORT).show()
}
}
@JavascriptInterface
fun sauceclipPlayerError(message: String) {
handler.post {
Toast.makeText(activity, "sauceclipPlayerError \\n $message", Toast.LENGTH_SHORT).show()
}
}
}
Android Webview에서 재생 아이콘 표시 없이 영상이 재생되는 것을 원하실 경우에는 아래 코드를 활용해주세요. (해당 가이드는 파트너사 AOS앱 개발팀에서 진행)
- override fun getDefaultVideoPoster(): Bitmap? { return Bitmap.createBitmap(10,10, Bitmap.Config.ARGB_8888) }
iOS
extension ViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController,
didReceive message: WKScriptMessage) {
switch (message.name) {
case "sauceclipEnter":
print("sauceclipEnter")
break
case "sauceclipMoveExit":
print("sauceclipMoveExit")
break
case "sauceclipMoveProduct":
print("sauceclipMoveProduct")
print(message.body)
break
case "sauceclipAddCart":
print("sauceclipAddCart")
print(message.body)
break
case "sauceclipMoveCart":
print("sauceclipMoveCart")
break
case "sauceclipOnShare":
print("sauceclipOnShare")
print(message.body)
break
case "sauceclipPlayerError":
print("sauceclipPlayerError")
print(message.body)
break
default:
print("message.name \\(message.name) not handled.")
}
}
}
iOS X 이상의 기기에서 플레이어 화면 잘림 현상을 방지하기 위해 SafeArea 영역 설정을 필히 진행해 주시기 바랍니다.
3. 브릿지
브릿지의 페이로드는 JSON형식의 객체가 문자열로 변환되어 제공됩니다.
브릿지 목록
- 클립 진입 브릿지
- 클립 나가기 클릭 브릿지
- 상품 페이지 이동 클릭 브릿지
- 장바구니 담기 클릭 브릿지
- 장바구니 페이지 이동 클릭 브릿지
- 공유하기 클릭 브릿지
- 에러 정보 브릿지
클립 진입 브릿지
브릿지명
: sauceclipEnter
페이로드
- 없음
클립 나가기 클릭 브릿지
브릿지명
: sauceclipMoveExit
페이로드
- 없음
상품 페이지 이동 클릭 브릿지
브릿지명
: sauceclipMoveProduct
페이로드
{
clipIdx: {{클립 ID}},
externalProductId: {{상품 코드}},
linkUrl: {{상품 링크}},
productId: {{상품 ID}},
}
- clipIdx
- 타입: String
- 설명: 클립 ID
- externalProductId
- 타입: String
- 설명: 상품 코드
- linkUrl
- 타입: String
- 설명: 상품 링크
- productId
- 타입: Integer
- 설명: 상품 ID
장바구니 담기 클릭 브릿지
브릿지명
: sauceclipAddCart
페이로드
{
clipIdx: {{클립 ID}},
optionCode: {{상품 옵션 코드}},
price: {{상품 가격}},
productCode: {{상품 코드}},
productId: {{상품 ID}},
productImg: {{상품 이미지 링크}},
productName: {{상품명}},
}
- clipIdx
- 타입: String
- 설명: 클립 ID
- optionCode
- 타입: String | Null
- 설명: 상품 옵션 코드
- 특징: 상품 옵션 목록에서 카트 담기 클릭 시에만 전달되는 항목
- price
- 타입: String
- 설명: 상품 가격
- productCode
- 타입: String
- 설명: 상품 코드
- productId
- 타입: Integer
- 설명: 상품 ID
- productImg
- 타입: String
- 설명: 상품 이미지 링크
- productName
- 타입: String
- 설명: 상품명
장바구니 페이지 이동 클릭 브릿지
브릿지명
: sauceclipMoveCart
페이로드
{}
- 빈 객체
공유하기 클릭 브릿지
브릿지명
: sauceclipOnShare
페이로드]
{
clipId: {{클립 ID}},
curationId: {{큐레이션 ID}},
linkUrl: {{공유 링크}},
partnerId: {{파트너 ID}},
tags: {{클립 태그 목록}},
thumbnailUrl: {{클립 이미지 링크}},
title: {{클립 타이틀}},
}
- clipId
- 타입: String
- 설명: 클립 ID
- curationId
- 타입: String
- 설명: 큐레이션 ID
- linkUrl
- 타입: String
- 설명: 공유 링크
- partnerId
- 타입: String
- 설명: 파트너 ID
- tags
- 타입: String[]
- 설명: 클립 태그 목록
- thumbnailUrl
- 타입: String
- 설명: 클립 이미지 링크
- title
- 타입: String
- 설명: 클립 타이틀
에러 정보 브릿지
브릿지명
: sauceclipPlayerError
페이로드
{
errorCode: {{에러코드}},
errorDetails: {{에러 상세 내용}},
errorType: {{에러 타입}},
}
- errorCode
- 타입: String
- 설명
- API에러인 경우, 상태 코드
- UI에러인 경우, 에러 메시지
- 비디오 에러인 경우, 에러 코드나 hls 에러타입
- errorDetails
- 타입: String
- 설명: 에러 상세 내용
- errorType
- 타입: String ('api' | 'ui' | 'video')
- 설명
- api: API 관련 에러
- ui: UI 관련 에러
- video: 비디오 관련 에러
🚦본 문서는 부정 경쟁 방지 및 영업 비밀 보호에 관한 법령에 따라 보호의 대상이 되는 영업 비밀, 산업 기술을 포함합니다.
🚦본 문서에 포함된 정보의 전부 또는 일부를 무단으로 제 3자에게 공개, 배포, 복사 또는 사용하는 것은 엄격히 금지됩니다.
Updated 4 months ago