GuidesAPI GuideChangelog
Log In
Guides

라이브 알림 연동

예정 라이브의 알림 받기·해제를 자사몰 알림 기능과 잇는 연동입니다. 쇼룸은 결과를 콜백으로 회신받기 전까지 알림을 완료로 처리하지 않습니다.

라이브 알림 연동 — 쇼룸 WEB
예상 소요 시간: 40분
🔧 필수/선택: 필수 — 알림 기능을 쓰려면 구현해야 합니다
사전 준비

네 가지가 모두 갖춰져야 알림 버튼이 표시되고 동작합니다.

준비내용
자사몰 알림 기능사용자에게 알림을 신청·해제하는 기능을 자사몰에 준비합니다
회원 연동사용자 인증으로 회원 정보를 전달합니다
브릿지 이벤트 구현이 페이지의 이벤트 2종과 콜백 2종을 구현합니다
어드민 설정테마 설정 > 라이브 예고에서 알림받기 기능을 사용으로 설정합니다

알림 버튼 노출 위치

예정 라이브·라이브 캘린더의 시작 전 카드와 라이브 배너에 표시됩니다.


동작 순서

쇼룸이 이벤트를 보내고, 자사몰이 처리한 뒤 콜백으로 결과를 회신하는 왕복 구조입니다.

  1. 사용자가 알림 버튼을 클릭합니다. 로그인 상태가 아니면 로그인 모달이 열립니다.
  2. 쇼룸이 sauceShowroomTurnOnNotification 또는 sauceShowroomTurnOffNotification 을 전송합니다.
  3. 자사몰이 알림을 신청·해제합니다.
  4. 성공한 경우 자사몰이 콜백 이벤트를 라이브 ID와 함께 회신합니다.
  5. 쇼룸이 알림 신청자 목록을 갱신하고 버튼 상태를 바꿉니다.
항목
콜백 대기 시간5초
확인 주기0.1초
성공 판정콜백의 broadcastId 가 요청한 라이브 ID와 일치할 때
시간 안에 콜백이 없을 때에러 모달을 표시하고 버튼 상태를 바꾸지 않습니다
⚠️ 콜백을 회신하지 않으면 쇼룸은 실패로 간주합니다. 자사몰에서 알림이 신청됐더라도 쇼룸의 버튼은 꺼진 상태로 남습니다.

동일 페이지 구현

알림 이벤트를 받아 처리하고, 성공했을 때 콜백을 호출합니다.

javascript
window.sauceShowroom.sauceShowroomTurnOnNotification = async (jsonStr) => {
  const notificationInfo = JSON.parse(jsonStr)

  // 자사몰 알림 신청 처리
  const isSuccess = await api.postAlarm(notificationInfo)

  // 성공한 경우에만 콜백을 회신한다 — 회신하지 않으면 실패로 처리된다
  if (isSuccess) {
    window.sauceShowroom.sauceShowroomTurnOnNotificationCallback({
      broadcastId: notificationInfo.broadcastId
    })
  }
}

window.sauceShowroom.sauceShowroomTurnOffNotification = async (jsonStr) => {
  const notificationInfo = JSON.parse(jsonStr)

  const isSuccess = await api.deleteAlarm(notificationInfo)

  if (isSuccess) {
    window.sauceShowroom.sauceShowroomTurnOffNotificationCallback({
      broadcastId: notificationInfo.broadcastId
    })
  }
}
⚠️ 콜백 함수는 쇼룸이 setInit 시점에 window.sauceShowroom 에 등록합니다. 이벤트 함수를 정의할 때 객체를 통째로 덮어쓰면 콜백이 지워지므로, 위와 같이 속성만 더합니다.
📌 콜백 인자는 객체입니다. 이벤트 함수가 받는 값은 JSON 문자열이고, 콜백으로 넘기는 값은 문자열이 아닙니다.

부모 페이지 구현

iframe 구성에서는 콜백도 postMessage 로 회신합니다. 부모 페이지에는 window.sauceShowroom 이 없습니다.

javascript
const showroomIframe = document.getElementById('showroom-iframe')

const sendCallback = (key, broadcastId) => {
  showroomIframe.contentWindow.postMessage(
    JSON.stringify({ key, params: { broadcastId } }),
    '*'
  )
}

window.addEventListener('message', async (e) => {
  if (typeof e.data !== 'string') return

  let key
  let params

  try {
    const data = JSON.parse(e.data)
    key = data.key
    params = data.params
  } catch (_error) {
    return
  }

  if (key === 'sauceShowroomTurnOnNotification') {
    const isSuccess = await api.postAlarm(params)
    if (isSuccess) {
      sendCallback('sauceShowroomTurnOnNotificationCallback', params.broadcastId)
    }
  }

  if (key === 'sauceShowroomTurnOffNotification') {
    const isSuccess = await api.deleteAlarm(params)
    if (isSuccess) {
      sendCallback('sauceShowroomTurnOffNotificationCallback', params.broadcastId)
    }
  }
})
⚠️ 콜백은 쇼룸이 들어 있는 iframe 안으로 보냅니다. 부모 페이지의 window 에 보내면 쇼룸이 받지 못해 5초 뒤 실패로 처리됩니다.

버튼 상태의 기준

알림 버튼의 켜짐·꺼짐은 쇼룸이 관리하는 알림 신청자 목록으로 판정합니다.

시점동작
모듈 표시회원 ID로 알림 신청 목록을 조회해 버튼 상태를 정합니다
콜백 수신목록을 갱신하고 버튼 상태를 바꿉니다
해제 클릭확인 모달을 표시하고, 확인 시 해제 이벤트를 전송합니다
⚠️ 자사몰 알림 목록과 쇼룸 알림 목록은 별개입니다. 자사몰에서만 알림을 해제하고 콜백을 회신하지 않으면 두 목록이 어긋나 버튼이 켜진 상태로 남습니다.

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

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

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