소개
진동은 사용자가 특정한 상황을 접했을 때, 사용자에게 알림을 주기 위해 사용됩니다.
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에 올라와 있는 현재 호환성 테이블입니다.
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(시간); } }
마무리
아직 사용에 다소 무리는 있으나, 추후 브라우저의 고도화 및 호환성의 향상으로 이 문제는 점차 나아질 것입니다.
감사합니다.
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 포스팅 부탁해요~