이 문서는 Vibration API (W3C Recommendation 10 February 2015)의 한국어 번역본입니다.
이 문서에 오역 및 오타를 포함할 수 있습니다. 가능하면 원문도 확인하시길 바랍니다.

공개일
2015-12-04
번역자:
조은 <apes0123@gmail.com>

요약

이 스펙문서는 호스팅 디바이스의 진동 메커니즘 접근을 제공하는 API를 정의합니다. 진동은 물리적 피드백의 일종입니다.

이 문서의 상태

이 섹션은 이 문서를 공개했을 때 상태에 대해 설명합니다. 다른 문서가 이 문서를 덮어쓸 가능성이 있으니 주의하시길 바랍니다. 이 문서 및 W3C에서 공개한 다른 문서의 최신 버전은 W3C technical reports index at http://www.w3.org/TR/에서 확인 가능합니다.

이 문서는 후보 권고안 이후 변경된 내용이 없습니다.

이 문서를 권고안으로 발행함으로써, W3C는 Web IDL 문서의 권고안 프로세스 진행으로 인해 변경이 있더라도 이 문서 내 기능 정의가 영향을 받지 않을 거라 기대하고 있습니다.

이 문서는 진동 API의 특징 및 범위에 대한 그룹의 합의를 나타냅니다. 그룹이 이 간단한 첫번째 버전을 사용하여 구현할 수 없는 더 상세한 유즈 케이스를 알고 있음에 주목해야합니다. 목적은 미래 버전에서 해결하는겁니다.

이 문서는 디바이스 API 워킹 그룹에서 권고안으로 발행한 문서입니다. 이 문서에 관한 코멘트를 남기고 싶다면 public-device-apis@w3.org으로 보내주시길 바랍니다. (구독, 아카이브). 모든 코멘트를 환영합니다.

워킹 그룹의 구현 보고서를 확인하시길 바랍니다.

이 문서는 W3C 멤버, 소프트웨어 개발자, 그리고 다른 W3C 그룹 및 관계자들이 평가를 진행하여, 디렉터에 의해 W3C 권고안으로 발표했습니다. 이 문서는 안정적이며, 참고자료로 사용하거나 다른 문서에서 인용해도 좋습니다. 스펙 문서의 권고를 통해 W3C가 하는 역할은 스펙 문서에 관심을 모으고 다방면으로 퍼뜨리는 일입니다. 이를 통해 웹의 기능과 상호운용성 향상을 기대할 수 있습니다.

이 문서는 2004년 2월 6일 W3C 특허 정책을 따르는 그룹에서 작성하였습니다. W3C는 그룹의 성과물에 관련하여 모든 공개 특허 공개 리스트를 관리합니다. 여기에는 특허 공개에 대한 지시사항도 포함합니다. 특허에 대해서 충분한 지식이 있는 사람이, 스펙 문서의 Essential Claim(s)에 인정된다고 파악되는 경우, W3C 특허 정책 제 6장에 의거하여 정보를 공개해야 할 필요가 있습니다.

이 문서는 2005년 10월 14일 W3C 프로세스 문서에 의해 관리됩니다.

목차

1. 소개

이 섹션은 표준에 준하지 않습니다.

이 API는 간단한 물리적 피드백만을 요구하는 유스 케이스에 접근할 수 있도록 설계되어 정의되어있습니다. 유스 케이스를 더 세밀하게 컨트롤 하는 필요는 이 스펙 문서의 범위에 포함하지 않습니다. 이 API는 일반적인 알림 메커니즘을 사용하는 걸 의미하지는 않습니다. 몇가지 유스 케이스는 [NOTIFICATIONS] 스펙문서의 Notifications API를 사용해 핸들링 합니다. 여기에 더해, 진동 여부를 가능하게 하는 건 이 스펙문서의 범위에 포함하지 않습니다.

2. 적합 요구사항

이 스펙문서 안에서 모든 다이어그램, 예제, 노트 및 표준이 아니라 명시한 섹션은 모두 표준이 아닙니다. 그 외의 모든 내용은 표준입니다.

MAYMUST 키워드는 [RFC2119]에서 소개하는 대로 해석합니다.

이 스펙문서는 단일 프로덕트에서 적용할 수 있는 적합성 기준을 정의합니다: 포함된 인터페이스를 구현하는 유저 에이전트

이 스펙문서는 Web IDL의 스펙과 용어를 사용합니다. [WEBIDL] 구현자는 이 스펙문서에서 정의하는 API를 ECMAScript를 사용해 구현할 때 Web IDL 스펙에서 정의하는 ECMAScript 바인딩와 일치하는 방법으로 구현해야 합니다.

3. 용어

browsing context spin the event loop는 [HTML5]에서 정의하는 내용을 따릅니다.

4. 진동 인터페이스

typedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator { boolean vibrate (VibratePattern pattern); };

vibrate() 메서드는, 호출할 때, 반드시 진동 패턴 처리 알고리즘을 동작시켜야 합니다. [must]

진동 패턴 처리 규칙은 아래 알고리즘을 따릅니다.

  1. vibrate() 메서드의 첫번째 메서드 인수로 pattern을 넣습니다.
  2. 밸리데이션 및 정상화pattern 패싱 결과로 valid pattern을 넣습니다.
  3. 만약 hidden 속성[PAGE-VISIBILITY]이 true라면, false를 반환하고 아래의 스텝을 제거합니다.
    노트
    오퍼레이팅 시스템의 기능에 밀접하게 접근하는 신뢰 가능한 (혹은 면제된) 어플리케이션은 어플리케이션이 전혀 보이지 않는 상태에서 디바이스에 진동을 주거나, 이전 스텝을 무시할 수 있습니다.
  4. valid pattern과 함께 진동을 수행합니다.

pattern이 주어진 진동 패턴의 밸리데이션 및 정상화는 아래 단계로 동작시킵니다.

  1. 만약 pattern이 리스트라면 다음 단계로 넘어갑니다. 그 외의 경우 아래 서브스텝을 실행합니다.
    1. list를 빈 목록으로 초기화한뒤, listpattern을 넣습니다
    2. patternlist로 설정합니다.
  2. max length를 구현체에 의존한 pattern의 최대값으로 지정합니다.
    노트
    만약 패턴의 길이가 이 API 구현체 최대 길이보다 크다면, 최대 길이를 넘어 무시하기보다는, 같은 효과를 내부적으로 달성하기 위해 여러 짧은 요청으로 효율적으로 요청을 나누는 걸 고려해야합니다. 여러 케이스가 있을 수 있으며, 최대 길이를 초과한 패턴을 거부하는 게 적절할 수도 있습니다. 예제는 만약 길이가 너무 길어 유저에게 효과적으로 서비스 어택 거부를 생성할 수도 있는 예제입니다. 웹 어플리케이션은 패턴 사이의 허용할 수 있는 갭이나 몇몇 구현체에서 길이가 너무 긴 경우 여러개의 요청으로 나누는 걸 허용할 수 있습니다.
  3. 만약 pattern의 길이가 max length보다 길다면, pattern을 절단하고, 첫번째 max length 엔트리만 남겨둡니다.
    노트
    pattern의 길이가 짝수이며 0이 아니라면 패턴 내 마지막 엔트리는 효력이 없으며 구현체가 이 포인트에서 pattern에서 지울 수 있습니다.
  4. pattern 내 단일 진동 엔트리를 위해 구현체 의존 최대 길이를 max-duration에 지정합니다.
  5. max duration보다 큰 pattern 내 각 엔트리 값을 위해, 엔트리 값을 max duration으로 설정합니다.
  6. pattern을 반환합니다.

pattern을 사용하는 perform vibration은, 아래 스텝을 밟습니다:

  1. 구현체는 false를 반환하고 이 스텝을 끝낼 수도 있습니다. [MAY]
    노트
    예를 들어, 구현체에서 유저가 기기상 진동을 허용하지 않은 origin에서 페이지를 나타내는 경우 취소할 수 있으며, 구현체에서 제한을 지난 요청을 거부하고 디바이스에서 진동 페이지 시간 총량이 마무리 지어질 수도 있습니다.
  2. perform vibration 알고리즘의 다른 인스턴스가 이미 동작하고 있는 경우, 아래 서브스텝을 작동합니다.
    1. 존재한다면, perform vibration 알고리즘의 다른 인스턴스를 취소합니다.
    2. 만약 pattern이 빈 목록이라면, 0 값 싱글 엔트리를 포함하거나, 디바이스가 진동을 사용할 수 있다면, true를 반환하고 이 스텝을 제거합니다.
  3. true를 반환하고, 이 스텝을 비동기적으로 계속해서 동작합니다.
  4. pattern 내 각 time은, 아래 서브스텝대로 동작합니다.
    1. 만약 time의 인덱스가 짝수라면 (첫번째 엔트리 인덱스는 0입니다), time 밀리세컨드동안 기기를 진동시킵니다.
    2. 그 외의 경우 time 밀리세컨드동안 기다립니다.

browsing contextDocument에서 visibilitychange 이벤트 [PAGE-VISIBILITY]가 포착되었을 때, 유저 에이전트는 반드시 이미 동작하고 있는 진동 패턴 처리를 취소해야합니다. [MUST]

5. 예제

이 섹션은 표준에 준하지 않습니다

다음 예제에서 디바이스는 1000 밀리세컨드 (ms)동안 진동합니다:

예제 1
// vibrate for 1000 ms
navigator.vibrate(1000);

// or alternatively
navigator.vibrate([1000]);

아래 예제에서 기기 패턴 진동은 50ms, 100ms, 150ms에서 진동하게 됩니다.

예제 2
navigator.vibrate([50, 100, 150]);

아래 예제에서는 기존에 존재하는 진동을 취소시킵니다

예제 3
// cancel any existing vibrations
navigator.vibrate(0);

// or alternatively
navigator.vibrate([]);

A. 감사의 말

The group is deeply indebted to Justin Lebar, Mounir Lamouri, Jonas Sicking, and the Mozilla WebAPI team for their contributions, and for providing the WebVibrator prototype as an initial input. Thanks to Anne van Kesteren for suggestions on how to make the specification reusable in other contexts.

B. 참고 문서

B.1 표준 참고문서

[HTML5]
Ian Hickson; Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. HTML5. 28 October 2014. W3C Recommendation. URL: http://www.w3.org/TR/html5/
[PAGE-VISIBILITY]
Jatinder Mann; Arvind Jain. Page Visibility (Second Edition). 29 October 2013. W3C Recommendation. URL: http://www.w3.org/TR/page-visibility/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[WEBIDL]
Cameron McCormack. Web IDL. 19 April 2012. W3C Candidate Recommendation. URL: http://www.w3.org/TR/WebIDL/

B.2 정보 참고문서

[NOTIFICATIONS]
Anne van Kesteren. Notifications API. Living Standard. URL: https://notifications.spec.whatwg.org/