쇼룸 브릿지 가이드
쇼룸의 기능 중 플레이어 이동, 배너 클릭, 상품 클릭, 라이브 알림 받기/해제 등과 같은 특정 이벤트에 대한 동작을 직접 구현할 수 있습니다.
특정 이벤트에 대한 동작을 구현하고자 하는 위치에 따라 구분하여 구현할 수 있습니다.
- 쇼룸 라이브러리를 사용한 웹페이지를 iframe으로 사용하는 경우에는 필수로 구현해야 하며,
부모 페이지에서 구현하는 경우를 참고해 주세요.
- 브릿지 이벤트 함수를 정의하지 않는 경우에는 쇼룸에서의 기본동작을 수행하므로, 필요한 기능들에만 브릿지 이벤트 함수를 구현해 주세요.
동일 페이지 내 구현하는 경우
쇼룸 라이브러리를 사용한 웹페이지에서 window.sauceShowroom객체에 함수를 정의하여 구현할 수 있습니다.
- window.sauceShowroom 객체에서 커스텀할 이벤트에 대해서만 함수를 정의해 주세요.
- 함수 내용 없이 정의만 해놓은 경우 기능이 동작하지 않습니다.
// window.sauceShowroom 객체에서 커스텀할 이벤트에 대해서만 함수를 정의해 주세요.
window.sauceShowroom = {
// 배너 클릭 시의 이벤트 정의
sauceShowroomMoveBanner: (jsonStr) => {
let bannerInfo;
try {
bannerInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = bannerInfo.linkUrl; // 예시) 링크 이동
} catch (e) {
console.warn('배너 처리 중 에러가 발생했습니다.', e);
}
},
// 상품 클릭 시의 이벤트 정의
sauceShowroomMoveProduct: (jsonStr) => {
let productInfo;
try {
productInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = productInfo.linkUrl; // 예시) 링크 이동
} catch (e) {
console.warn('상품 처리 중 에러가 발생했습니다.', e);
}
},
// 클립 플레이어 이동 이벤트 정의
sauceShowroomMoveSauceClipPlayer: (jsonStr) => {
let clipInfo;
try {
clipInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = clipInfo.clipUrl; // 예시) 클립 플레이어로 이동
} catch (e) {
console.warn('클립 플레이어 처리 중 에러가 발생했습니다.', e);
}
},
// 라이브 플레이어 이동 이벤트 정의
sauceShowroomMoveSauceLivePlayer: (jsonStr) => {
let broadcastInfo;
try {
broadcastInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = broadcastInfo.broadcastUrl; // 예시) 라이브 플레이어로 이동
} catch (e) {
console.warn('라이브 플레이어 처리 중 에러가 발생했습니다.', e);
}
},
// 라이브 알림 받기 클릭 시의 이벤트 정의
sauceShowroomTurnOnNotification: async (jsonStr) => {
let notificatinoInfo;
try {
notificatinoInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
let isSuccess = false;
// 요청이 온 사용자에게 알림을 신청하는 처리를 추가해 주세요.
try {
isSuccess = await api.postAlarm(...);
} catch (e) {
console.warn('고객사의 알림 신청 중 에러가 발생했습니다.');
}
// 성공한 경우, 쇼룸에 알림 신청이 완료되었다는 콜백 브릿지 이벤트를 방송ID와 함께 전달해 주세요.
// 해당 처리가 없을 경우, 쇼룸에서는 실패로 간주됩니다.
if (isSuccess) {
try {
window.sauceShowroom.sauceShowroomTurnOnNotificationCallback({ broadcastId });
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
}
}
},
// 라이브 알림 해제 클릭 시의 이벤트 정의
sauceShowroomTurnOffNotification: async (jsonStr) => {
let notificatinoInfo;
try {
notificatinoInfo = JSON.parse(jsonStr);
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
return;
}
let isSuccess = false;
// 요청이 온 사용자에게 알림을 해제하는 처리를 추가해 주세요.
try {
isSuccess = await api.deleteAlarm(...);
} catch (e) {
console.warn('고객사의 알림 해제 중 에러가 발생했습니다.');
}
// 성공한 경우, 쇼룸에 알림 해제가 완료되었다는 콜백 브릿지 이벤트를 방송ID와 함께 전달해 주세요.
// 해당 처리가 없을 경우, 쇼룸에서는 실패로 간주됩니다.
if (isSuccess) {
try {
window.sauceShowroom.sauceShowroomTurnOffNotificationCallback({ broadcastId });
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
}
}
},
// 회원 로그인 요청 시의 이벤트 정의
sauceShowroomMemberLogin: () => {
// 원하시는 처리를 추가해 주세요.
window.location.href = '고객사 로그인 페이지'; // 예시) 로그인 페이지로 이동
},
};
부모 페이지에서 구현하는 경우 (확인중)
쇼룸 라이브러리를 사용한 웹페이지를 iframe으로 사용하는 경우, 부모 페이지에서 message 이벤트 리스너를 통해 구현할 수 있습니다.
window.addEventListener('message',(e)=>{
if (typeof e.data === 'string') {
let event;
let params;
try {
const data = JSON.parse(e.data);
event = data.key ?? data.type;
params = data.params;
} catch (_error) {
event = e.data;
}
switch (event) {
// 배너 클릭 시의 이벤트 정의
case 'sauceShowroomMoveBanner': {
let bannerInfo;
try {
bannerInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
break;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = bannerInfo.linkUrl; // 예시) 링크 이동
} catch (e) {
console.warn('배너 처리 중 에러가 발생했습니다.', e);
}
break;
}
// 상품 클릭 시의 이벤트 정의
case 'sauceShowroomMoveProduct': {
let productInfo;
try {
productInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
break;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = linkUrl; // 예시) 링크 이동
} catch (e) {
console.warn('상품 처리 중 에러가 발생했습니다.', e);
}
break;
}
// 클립 플레이어 이동 이벤트 정의
case 'sauceShowroomMoveSauceClipPlayer': {
let clipInfo;
try {
clipInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
break;
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = clipInfo.clipUrl; // 예시) 클립 플레이어로 이동
} catch (e) {
console.warn('클립 플레이어 처리 중 에러가 발생했습니다.', e);
}
break;
}
// 라이브 플레이어 이동 이벤트 정의
case 'sauceShowroomMoveSauceLivePlayer': {
let broadcastInfo;
try {
broadcastInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
}
try {
// 원하시는 처리를 추가해 주세요.
window.location.href = broadcastInfo.broadcastUrl; // 예시) 라이브 플레이어로 이동
} catch (e) {
console.warn('라이브 플레이어 처리 중 에러가 발생했습니다.', e);
}
break;
}
// 라이브 알림 받기 클릭 시의 이벤트 정의
case 'sauceShowroomTurnOnNotification': {
let notificationInfo;
try {
notificationInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
break;
}
let isSuccess = false;
// 요청이 온 사용자에게 알림을 신청하는 처리를 추가해 주세요.
try {
isSuccess = await api.postAlarm(...);
} catch (e) {
console.warn('고객사의 알림 신청 중 에러가 발생했습니다.');
}
// 성공한 경우, 쇼룸에 알림 신청이 완료되었다는 콜백 브릿지 이벤트를 방송ID와 함께 전달해 주세요.
// 해당 처리가 없을 경우, 쇼룸에서는 실패로 간주됩니다.
if (isSuccess) {
try {
window.sauceShowroom.sauceShowroomTurnOnNotificationCallback({ broadcastId });
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
}
}
break;
}
// 라이브 알림 해제 클릭 시의 이벤트 정의
case 'sauceShowroomTurnOffNotification': {
let notificationInfo;
try {
notificationInfo = params;
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
break;
}
let isSuccess = false;
// 요청이 온 사용자에게 알림을 해제하는 처리를 추가해 주세요.
try {
isSuccess = await api.deleteAlarm(...);
} catch (e) {
console.warn('고객사의 알림 해제 중 에러가 발생했습니다.');
}
// 성공한 경우, 쇼룸에 알림 해제가 완료되었다는 콜백 브릿지 이벤트를 방송ID와 함께 전달해 주세요.
// 해당 처리가 없을 경우, 쇼룸에서는 실패로 간주됩니다.
if (isSuccess) {
try {
window.sauceShowroom.sauceShowroomTurnOffNotificationCallback({ broadcastId });
} catch (e) {
console.warn('해당 부분에서 에러가 발생하는 경우, 모비두 담당자에게 에러 정보와 함께 문의해 주세요.', e);
}
}
break;
}
case 'sauceShowroomMemberLogin': {
// 원하시는 처리를 추가해 주세요.
window.location.href = '고객사 로그인 페이지'; // 예시) 로그인 페이지로 이동
break;
}
default:
}
}
});
브릿지 목록
배너 클릭
기능 | 이벤트 | 페이로드 | 페이로드 형식 |
---|---|---|---|
배너 클릭 | sauceShowroomMoveBanner | 페이로드 | JSON문자열 |
상품 클릭
기능 | 이벤트 | 페이로드 | 페이로드 형식 |
---|---|---|---|
상품 클릭 | sauceShowroomMoveProduct | 페이로드 | JSON문자열 |
클립 플레이어 이동
기능 | 이벤트 | 페이로드 | 페이로드 형식 |
---|---|---|---|
클립 플레이어 이동 | sauceShowroomMoveSauceClipPlayer | 페이로드 | JSON문자열 |
라이브 플레이어 이동
기능 | 이벤트 | 페이로드 | 페이로드 형식 |
---|---|---|---|
라이브 플레이어 이동 | sauceShowroomMoveSauceLivePlayer | 페이로드 | JSON문자열 |
알림 받기/해제
회원 로그인
기능 | 이벤트 | 페이로드 | 페이로드 형식 |
---|---|---|---|
회원 로그인 | sauceShowroomMemberLogin | - | - |
콜백 브릿지 목록
알림 받기/해제 성공
Updated about 24 hours ago