알림 트리거 API

알림 트리거를 사용하면 네트워크 연결이 필요 없는 로컬 알림을 예약할 수 있으므로 캘린더 앱과 같은 사용 사례에 이상적입니다.

알림 트리거란 무엇인가요?

웹 개발자는 Web Notifications API를 사용하여 알림을 표시할 수 있습니다. 이 기능은 주로 Push API와 함께 사용되어 속보 이벤트 또는 수신된 메시지와 같이 긴급한 정보를 사용자에게 알립니다. 알림은 사용자 기기에서 JavaScript를 실행하여 표시됩니다.

Push API의 문제는 시간이나 위치와 같은 특정 조건이 충족될 때 반드시 표시해야 하는 알림을 트리거하는 것이 불안정하다는 점입니다. 시간 기반 조건의 예로는 오후 2시에 상사와의 중요한 회의를 알려주는 캘린더 알림이 있습니다. 위치 기반 조건의 예로는 식료품점 근처에 들어갈 때 우유를 사라고 알려주는 알림이 있습니다. 네트워크 연결이나 잠자기 모드와 같은 배터리 절약 기능으로 인해 푸시 기반 알림의 전송이 지연될 수 있습니다.

알림 트리거는 트리거 조건을 사용하여 알림을 미리 예약할 수 있도록 하여 이 문제를 해결합니다. 그러면 네트워크에 연결되어 있지 않거나 기기가 절전 모드인 경우에도 운영체제에서 적절한 시점에 알림을 전송합니다.

사용 사례

캘린더 애플리케이션은 시간 기반 알림 트리거를 사용하여 사용자에게 예정된 회의를 상기시켜 줍니다. 캘린더 앱의 기본 알림 스킴으로 회의 1시간 전에 첫 번째 헤드업 알림을 표시하고 5분 전에 또 다른 긴급 알림을 표시할 수 있습니다.

TV 네트워크는 사용자에게 좋아하는 TV 프로그램이 곧 시작되거나 회의 라이브 스트림이 곧 시작된다고 사용자에게 알릴 수 있습니다.

시간대 변환 사이트에서는 시간 기반 알림 트리거를 사용하여 사용자가 전화 회의나 영상 통화를 위한 알람을 예약하도록 할 수 있습니다.

현재 상태

단계 상태
1. 설명 만들기 완전함
2. 사양의 초기 초안 만들기 시작되지 않음
3. 의견을 수렴하고 디자인을 반복합니다. 진행 중
4. 오리진 트라이얼 완료
5. 출시 시작되지 않음

알림 트리거 사용 방법

about://flags를 통해 사용 설정

오리진 트라이얼 토큰 없이 로컬에서 Notification Triggers API를 실험하려면 about://flags에서 #enable-experimental-web-platform-features 플래그를 사용 설정합니다.

특성 감지

showTrigger 속성이 있는지 확인하여 브라우저가 알림 트리거를 지원하는지 확인할 수 있습니다.

if ('showTrigger' in Notification.prototype) {
  /* Notification Triggers supported */
}

알림 예약

알림을 예약하는 방법은 TimestampTrigger 객체가 포함된 showTrigger 조건 속성을 알림의 options 객체에 값으로 전달해야 한다는 점을 제외하면 일반 푸시 알림 표시와 유사합니다.

const createScheduledNotification = async (tag, title, timestamp) => {
  const registration = await navigator.serviceWorker.getRegistration();
  registration.showNotification(title, {
    tag: tag,
    body: 'This notification was scheduled 30 seconds ago',
    showTrigger: new TimestampTrigger(timestamp + 30 * 1000),
  });
};

예약된 알림 취소

예약된 알림을 취소하려면 먼저 ServiceWorkerRegistration.getNotifications()를 통해 특정 태그와 일치하는 모든 알림의 목록을 요청합니다. 예약된 알림을 목록에 포함하려면 includeTriggered 플래그를 전달해야 합니다.

const cancelScheduledNotification = async (tag) => {
  const registration = await navigator.serviceWorker.getRegistration();
  const notifications = await registration.getNotifications({
    tag: tag,
    includeTriggered: true,
  });
  notifications.forEach((notification) => notification.close());
};

디버깅

Chrome DevTools 알림 패널을 사용하여 알림을 디버그할 수 있습니다. 디버깅을 시작하려면 Start Record events(이벤트 기록 시작) 활동 기록 시작를 누르거나 Control+E(Mac은 Command+E)를 누릅니다. Chrome DevTools는 예약된 알림, 표시된 알림, 종료된 알림을 비롯한 모든 알림 이벤트를 3일 동안 기록합니다. 이는 DevTools가 닫혀 있을 때도 기록됩니다.

예약된 알림 이벤트가 Application 패널에 있는 Chrome DevTools의 알림 창에 기록되었습니다.
예약된 알림
표시된 알림 이벤트가 Chrome DevTools의 알림 창에 기록되었습니다.
표시되는 알림입니다.

데모

데모에서 알림 트리거가 작동하는 것을 확인할 수 있습니다. 이 트리거를 통해 알림을 예약하고, 예약된 알림을 나열하고, 취소할 수 있습니다. 소스 코드는 Glitch에서 사용할 수 있습니다.

알림 트리거 데모 웹 앱의 스크린샷
알림 트리거 데모

보안 및 권한

Chrome팀은 사용자 제어, 투명성, 인체공학을 포함하여 강력한 웹 플랫폼 기능에 대한 액세스 제어에 정의된 핵심 원칙을 사용하여 Notification Triggers API를 설계하고 구현했습니다. 이 API에는 서비스 워커가 필요하므로 보안 컨텍스트도 필요합니다. API를 사용하려면 일반 푸시 알림과 동일한 권한이 필요합니다.

사용자 제어

이 API는 ServiceWorkerRegistration의 컨텍스트에서만 사용할 수 있습니다. 즉, 필요한 모든 데이터가 동일한 컨텍스트에 저장되며 서비스 워커가 삭제되거나 사용자가 출처의 모든 사이트 데이터를 삭제하면 자동으로 삭제됩니다. 또한 쿠키를 차단하면 서비스 워커가 Chrome에 설치되지 않으므로 이 API를 사용할 수 없습니다. 사용자는 사이트 설정에서 언제든지 사이트의 알림을 사용 중지할 수 있습니다.

투명성

Push API와 달리 이 API는 네트워크에 의존하지 않으므로 예약된 알림에는 badge, icon, image 속성에서 참조하는 이미지 리소스를 비롯하여 필요한 모든 데이터가 미리 필요합니다. 즉, 예약된 알림 표시는 개발자가 관찰할 수 없으며 사용자가 알림과 상호작용할 때까지 서비스 워커의 절전 모드를 해제하지 않습니다. 따라서 현재 개발자가 IP 주소 위치정보 조회와 같이 개인 정보를 침해할 수 있는 접근 방식을 통해 사용자에 관한 정보를 얻을 수 있는 알려진 방법이 없습니다. 또한 이러한 설계를 통해 이 기능은 Android의 AlarmManager와 같이 운영체제에서 제공하는 일정 예약 메커니즘을 선택적으로 활용할 수 있으므로 배터리를 보존하는 데 도움이 됩니다.

의견

Chrome팀에서 알림 트리거 사용 경험에 대한 의견을 듣고자 합니다.

API 설계에 대해 알려주세요.

API에서 예상대로 작동하지 않는 부분이 있나요? 아니면 아이디어를 구현하는 데 필요한 메서드나 속성이 누락되었나요? 보안 모델에 대한 질문이나 의견이 있으신가요? 알림 트리거 GitHub 저장소에서 사양 문제를 제출하거나 기존 문제에 의견을 추가합니다.

구현에 문제가 있습니까?

Chrome 구현에서 버그를 발견하셨나요? 아니면 구현이 사양과 다른가요? new.crbug.com에서 버그를 신고합니다. 가능한 한 많은 세부정보를 포함하고 간단한 재현 안내를 포함하고 구성요소를 UI>Notifications로 설정해야 합니다. Glitch는 빠르고 쉬운 버그 재현물을 공유하는 데 효과적입니다.

API를 사용할 계획이신가요?

사이트에서 알림 트리거를 사용할 계획이신가요? 사용자의 공개적 지원은 Google에서 기능의 우선순위를 정하는 데 도움이 되며 다른 브라우저 공급업체에 이러한 기능을 지원하는 것이 얼마나 중요한지 보여줍니다. #NotificationTriggers 해시태그를 사용하여 @ChromiumDev로 트윗을 보내고, 사용하는 위치와 방법을 알려주세요.

유용한 링크

감사의 말씀

알림 트리거는 리차드 놀피터 베벌루가 작성한 설명, 리처드의 기여로 구현되었습니다. 이 문서를 검토한 사용자는 Joe Medley, Pete LePage, 리차드, 피터입니다. Unsplash에 있는 루카스 블레이크히어로 이미지입니다.