소개

진동은 사용자가 특정한 상황을 접했을 때, 사용자에게 알림을 주기 위해 사용됩니다.
I-OS나 안드로이드, 바다 OS 등 여러 Mobile OS에서 진동을 사용하기 위한 API를 제공하고 있습니다.
그럼 Web OS에서는 그 상황이 어떨까요?
W3C에서는 2009년 Device APIs Working Group을 결성하여 Web Device API 문서를 발행하고 완성시킨 뒤 사용을 권고하고 있습니다.
오늘은 그 중 하나인 Vibration API를 다룹니다.

기술

Vibration API의 기재는 아래와 같습니다.

partial interface Navigator {
    boolean vibrate ((unsigned long or sequence[unsigned long]) pattern);
};

위의 말을 직역하면,

Navigator 객체의 멤버 {
   불리언 타입 반환 vibrate ((unsigned long 자료형이나 시퀀스[unsigned long]) 패턴을 가진다)
}

함수의 반환값은 boolean Type으로 반환됩니다.
다음은 사용 예제입니다.

// 1000 밀리초(1초)동안 진동을 울리게 한다
navigator.vibrate(1000);
// 파라미터를 배열로도 전달할 수 있습니다.
navigator.vibrate([1000]);
// 파라미터를 배열로 전달할 경우 진동이 순차적으로 울리게 됩니다.
// 아래 예제의 경우 50ms, 100ms, 150ms 순으로 진동이 울립니다.
navigator.vibrate([50, 100, 150]);
// 파라미터로 0이나 빈 배열을 전송할 경우 진동이 멈춥니다.
navigator.vibrate(0);
navigator.vibrate([]);

호환성

Vibration API는 현재 Chrome과 Firefox에서만 지원하고 있습니다.
Chrome도 아이폰용 크롬에서는 정상적으로 작동하지 않으며, 안드로이드용 크롬 일부 버전에서만 작동하는 것으로 확인이 되고 있습니다.
MDN에 올라와 있는 현재 호환성 테이블입니다.

Vibration API 지원 브라우저 현황
Chrome Firefox Internet Explorer Opera Safari
지원 : webkit 접두사 필요 지원 : 16버전 이하에선 moz 접두시 필요 미지원 미지원 미지원

위의 상황을 고려한다고 했을 때, 현재 나와있는 모든 브라우저를 대응하기 위한 소스는 아래와 같습니다.

var vibration = function() {
    if(navigator.webkitVibrate !== undefined) {
        navigator.webkitVibrate(시간);
    } else if(navigator.mozVibrate !== undefined) {
        navigator.mozVibrate(시간);
    } else {
        navigator.vibrate(시간);
    }
}

마무리

아직 사용에 다소 무리는 있으나, 추후 브라우저의 고도화 및 호환성의 향상으로 이 문제는 점차 나아질 것입니다.
감사합니다.

카테고리: Research

7개의 댓글

UYEONG · 2014년 1월 23일 2:21 오후

좋은 API네요! 노티는 기본이고 웹 게임 같은거 만들때 타격감을 좀더 줄 수 있도록 사용할 수 있을 것 같습니다. 하지만 지원의 폭이 너무 좁긴한것 같아요…(ㅠㅠ)

    Eun Cho · 2014년 1월 24일 9:55 오전

    Firefox OS 아니면 못쓴다할 수준의 암울한 지원율이긴 하나…
    이것도 권고안으로 제정되고 나면 많은 벤더에서 지원해야하니 추후에는 지원될 거 같아요~
    아직은 CR이고 제출한 회사가 Mozilla라 많은 벤더에서 응원을 안해주네요 ㅠ

이진권 · 2014년 1월 24일 6:11 오후

Sound API와 함께 메세지 알림 등의 기능들에 활용하는 것도 좋을꺼 같아요.
(데스크탑에서의 진동은? ㅋㅋㅋ 마우스에??)
좋은 글 감사합니다 (다른 API소개들도 기대되요!!)

    Eun Cho · 2014년 1월 28일 10:37 오전

    데스크탑에서 진동하는 경우에는 Boolean으로 넘어오는 값이 False로 넘어와서 진동이 아예 안먹히더라구요~
    다음 Device API도 기대해주세요~

onesup · 2014년 1월 27일 1:37 오후

전화기에 달린 카메라 플래시에 대한 api는 아직 없나요?

    Eun Cho · 2014년 1월 28일 10:36 오전

    카메라의 Flash를 제어할 수 있는 API 표준은 현재까지는 존재하지 않습니다 ㅠ (Firefox OS에서 제공하고 있는 API뿐이지만 일단 FF OS 한정이고 표준이 아니라서..)

김태훈 · 2014년 2월 3일 6:08 오후

예전에 리서치 해 주기로 했던 -webkit-speech 포스팅 부탁해요~

답글 남기기

아바타 플레이스홀더

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