소개

Web Notification은 W3C에서 정의한  웹브라우저를 통해 사용자 운영체제에 Notification(알림) 창을 띄워주는 역할을 하는 javascript API입니다.
보통 Notification 은 스마트폰에서 App이 실행되어 있지 않은 상태에서도 여러가지 알림을 사용자에게 전달해 주기 위해 사용되고 있는데요. 이러한 기능을 웹에서도 구현할수 있도록 도와주는게 Web Notification 이라고 볼 수 있습니다.
현재는 Working Draft 상태지만 Chrome, Firefox, Safari 같은 브라우저에서 지원하는걸 보면 앞으로 많은 발전이 있을것 같은 긍정적인 생각이 듭니다.

사용방법

var notification = new Notification(title, options)

매개변수

  • title : 알림창의 제목
  • options : 알림창에 들어갈 내용들을 정의한다.
    객체형태로 전달되며 key값으로는 dir, lang, body, tag, icon이 있다.

#프로퍼티와 매소드는 추후 업데이트 하겠습니다.

예제

HTML

<button onclick="notifyMe()">Notify me!</button>

Javascript

function notifyMe() {
  if (!"Notification" in window) {
    alert("This browser does not support desktop notification");
  }
  else if (Notification.permission === "granted") {
    var notification = new Notification("Hi there!");
  }
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }
      if (permission === "granted") {
        var notification = new Notification("Hi there!");
      }
    });
  }
}

Web Notification은 브라우저에서 Desktop 또는 Mobile로 알림을 보내도록 해주기 때문에 사용자가 반드시 알림을 받을 수 있도록 권한을 승인해 주어야 합니다. 아래의 코드는 브라우저의 지원여부와 사용자가 Notification을 허락했는지 구분합니다.

  // 브라우저가 Notification 기능을 지원하는지 체크합니다.
  if (!"Notification" in window) {
    alert("This browser does not support desktop notification");
  }
  // 사용자가 Notification 사용을 허락했는지 체크합니다.
  else if (Notification.permission === "granted") {
    // 허락했다면 Notification을 생성합니다.
    var notification = new Notification("Hi there!");
  }

크롬 브라우저에서는 permission 속성이 구현되어 있지 않기 때문에 사용자가 의도적으로 Notification을 ‘denied’ 한 경우를 체크합니다.

  // 크롬 브라우저는 permission 속성이 구현되어 있지 않기 때문에
  // 사용자가 의도적으로 'denied' 한 경우를 체크합니다.
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      // 사용자가 사용 여부를 체크했다면, 크롬 Notification 상태를 갱신합니다.
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }
      // 사용자가 승낙했다면, Notification을 생성합니다.
      if (permission === "granted") {
        var notification = new Notification("Hi there!");
      }
    });

응용

아주 간단한 응용 예제를 하나 보겠습니다. Notification에 icon, body, title 값을 넣어주고 메일이 온 것 처럼 코드를 살짝 변경합니다.
 HTML

<button onclick="mailMe()">Mail me!</button>

Javascript

function mailMe() {
  var parameter_noti = {
	title:"[공유] Web Notification 공유",
	icon:"http://img.naver.net/static/www/up/2014/0123/mat_19165764t.jpg",
	body:"안녕하세요 김대현입니다. 오늘은 재밌는 Web Notification을 공유하려고 합니다~~~~"
  };
  if (!"Notification" in window) {
    alert("This browser does not support desktop notification");
  }
  else if (Notification.permission === "granted") {
    var notification = new Notification(parameter_noti.title,{
    	icon:parameter_noti.icon,
    	body:parameter_noti.body
    });
  }
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }
      if (permission === "granted") {
        var notification = new Notification(parameter_noti.title,{
        	icon:parameter_noti.icon,
        	body:parameter_noti.body
        });
      }
    });
  }
}

결과

브라우저 호환성

Desktop

Mobile

  • Firefox Mobile (Gecko) : 22이상
  • 그 외 미지원

마무리

개인적으로 생각할때 Web Notification은 email 알림 외에도 웹채팅, Task 알림 등 다양하게 쓸 수 있을것 같습니다.
HTML5와 nodejs의 Socket 통신을 이용하여 사용자가 몇분동안 현재 페이지(또는 탭)에서 응답이 없을때 desktop에서
메일이나 채팅내용을 push 받을 수 있다면 재밌지 않을까요?
단점으로는 브라우저마다 알림창의 모양과 사라지는 시간이 다르고, 브라우저가 꺼지면 Notification 기능도 종료되기 때문에 이 부분은 고려해야될것 같습니다.
감사합니다.

참고

http://www.w3.org/TR/notifications/#language-0 ( W3C Notification – 영문)
https://developer.mozilla.org/en/docs/Web/API/Notification (Mozilla Notification – 영문)
https://developer.mozilla.org/ko/docs/WebAPI/Using_Web_Notifications (Mozilla Using Notification – 한글)

카테고리: Research

김대현

Do you want to build a sno.......Web?

0개의 댓글

답글 남기기

아바타 플레이스홀더

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다