1. 용어
이 명세는 Infra 표준에 의존합니다. [INFRA]
이 명세에서 사용하는 일부 용어는 DOM, Fetch, 고해상도 시간, HTML, IDL, 서비스 워커 및 URL 표준에 정의되어 있습니다. [DOM] [FETCH] [HR-TIME] [HTML] [WEBIDL] [SERVICE-WORKERS] [URL]
2. 알림
알림은 추상적인 표현으로, 메시지 전달처럼 발생한 사건을 나타냅니다.
각 알림에는 연결된 서비스 워커 등록이 있습니다 (null 또는 서비스 워커 등록). 초기값은 null입니다.
각 알림에는 연결된 제목이 있습니다 (문자열).
각 알림에는
연결된
방향이 있습니다 ("auto", "ltr",
또는 "rtl").
각 알림에는 연결된 언어가 있습니다 (문자열).
각 알림에는 연결된 본문이 있습니다 (하나의 문자열).
각 알림에는 연결된 탐색 URL이 있습니다 (null 또는 URL). 초기값은 null입니다.
각 알림에는 연결된 태그가 있습니다 (문자열).
각 알림에는 연결된 데이터가 있습니다 (하나의 Record).
각 알림에는
연결된 타임스탬프가 있습니다
(EpochTimeStamp).
타임스탬프는 알림이 실제로 해당하는 시각을 나타내는 데 사용할 수 있습니다. 예를 들어, 알림이 기기가 오프라인이어서 즉시 전달할 수 없었던 메시지에 관한 것이라면 과거 시각일 수 있으며, 곧 시작할 회의에 관한 것이라면 미래 시각일 수 있습니다.
각 알림에는 연결된 재알림 설정이 있습니다 (불리언). 이 값은 초기에 false입니다. true이면, 최종 사용자에게 알려야 함을 나타냅니다. 이는 알림 표시 단계가 기존 알림과 동일한 태그를 가진 새 알림으로 실행된 이후를 말합니다.
각 알림에는 연결된 무음 설정이 있습니다 (null 또는 불리언). 이 값은 초기에 null입니다. true이면, 소리나 진동을 발생시키지 않아야 함을 나타냅니다. null이면, 소리나 진동의 발생 여부를 플랫폼 관례에 맡겨야 함을 나타냅니다.
각 알림에는 연결된 상호작용 요구 설정이 있습니다 (불리언). 초기값은 false입니다. true이면, 충분히 큰 화면이 있는 기기에서 최종 사용자가 알림을 활성화하거나 해제할 때까지 알림을 쉽게 이용할 수 있는 상태로 유지해야 함을 나타냅니다.
각 알림에는 다음 그래픽이 연결될 수 있습니다: 이미지 URL, 아이콘 URL, 그리고 배지 URL. 또한 이에 각각 대응하는 이미지 리소스, 아이콘 리소스, 그리고 배지 리소스가 있습니다.
이미지 리소스는 그림으로, 다음 알림의 콘텐츠 일부로 표시되며, 더 높은 시각적 우선순위로 표시하는 것이 좋습니다. 비교 대상은 아이콘 리소스와 배지 리소스입니다. 다만 이 리소스가 표시될 수 있는 경우는 더 적을 수 있습니다.
아이콘 리소스는 다음을 보강하는 이미지입니다: 알림 (예: 아이콘 또는 발신자의 사진).
배지 리소스는 웹 애플리케이션을 나타내는 아이콘이거나, 다음 알림의 범주를 나타내는 아이콘입니다. 후자는 웹 애플리케이션이 다양한 종류의 알림을 보내는 경우입니다. 이 리소스는 다음 알림을 나타내는 데 사용될 수 있습니다. 이는 다음 알림 자체를 표시할 공간이 부족할 때입니다. 또한 다음 내부에 표시될 수 있습니다: 알림. 다만 이 경우에는 다음보다 시각적 우선순위를 낮게 하는 것이 좋습니다: 각각의 이미지 리소스와 아이콘 리소스.
개발자는 다음을 통해 정보를 전달하지 않는 것이 권장됩니다: 이미지, 아이콘, 또는 배지. 해당 정보에 최종 사용자가 다른 방법으로 접근할 수 없는 경우를 말하며, 특히 이러한 기능을 지원하지 않는 알림 플랫폼에서는 이를 무시할 수 있기 때문입니다.
각 알림에는 연결된 동작이 있습니다 (목록이며, 0개 이상의 알림 동작을 포함합니다). 알림 동작은 최종 사용자에게 주어지는 선택지를 나타냅니다. 각 알림 동작에는 다음이 연결되어 있습니다:
- 이름
- 문자열입니다.
- 제목
- 문자열입니다.
- 탐색 URL
- null 또는 URL입니다. 초기값은 null입니다.
- 아이콘 URL
- null 또는 URL입니다. 초기값은 null입니다.
- 아이콘 리소스
- null 또는 리소스입니다. 초기값은 null입니다.
사용자는 알림 자체를 활성화하는 대신 동작을 활성화할 수 있습니다. 지원되는 최대 동작 수는 구현 정의 정수로, 0 이상이며 알림 플랫폼의 제약 범위 내에 있습니다.
동작의 표시 여부는 플랫폼에 따라 달라지므로, 개발자는 다음을 확인하는 것이 권장됩니다: 최종 사용자가 알림에서 호출할 수 있는 모든 동작을 웹 애플리케이션 내에서도 이용할 수 있어야 합니다.
일부 플랫폼은 다음을 수정할 수 있습니다: 아이콘 리소스. 이는 플랫폼의 시각적 스타일에 더 잘 맞추기 위한 것으로, 최종 사용자에게 표시하기 전에 모서리를 둥글게 하거나 특정 색으로 칠하는 등의 방법을 사용합니다. 개발자는 이러한 경우에도 적절하게 표시되며 색상 손실이나 모서리 잘림 등으로 중요한 정보가 사라지지 않는 아이콘을 사용하는 것이 권장됩니다.
비지속 알림은 알림으로, 연결된 서비스 워커 등록이 null입니다.
지속 알림은 알림으로,
연결된
서비스 워커
등록이 null이 아닙니다.
설정
객체로 알림 생성을 수행하려면, 문자열 title,
NotificationOptions
딕셔너리 options, 그리고
환경 설정 객체 settings가 주어졌을 때:
-
origin을 settings의 출처로 합니다.
-
baseURL을 settings의 API 기준 URL로 합니다.
-
fallbackTimestamp를 Unix 기원부터 settings의 현재 벽시계 시각까지의 밀리초 수를 가장 가까운 정수로 반올림한 값으로 합니다.
-
알림 생성의 결과를 반환합니다. 인수는 title, options, origin, baseURL, 그리고 fallbackTimestamp입니다.
알림
생성을 수행하려면, 문자열 title,
NotificationOptions
딕셔너리 options, 출처
origin, URL baseURL, 그리고 EpochTimeStamp
fallbackTimestamp가 주어졌을 때:
-
notification을 새로운 알림으로 합니다.
-
options["
renotify"]가 true이고 options["tag"]가 빈 문자열이면, 예외를 던집니다:TypeError. -
notification의 데이터를 다음으로 설정합니다: StructuredSerializeForStorage(options["
data"]). -
notification의 제목을 title로 설정합니다.
-
notification의 출처를 origin으로 설정합니다.
-
options["
navigate"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면 notification의 탐색 URL을 반환값으로 설정합니다. (그렇지 않으면 notification의 탐색 URL은 null로 유지됩니다.) -
options["
image"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면 notification의 이미지 URL을 반환값으로 설정합니다. (그렇지 않으면 notification의 이미지 URL은 설정되지 않습니다.) -
options["
icon"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면 notification의 아이콘 URL을 반환값으로 설정합니다. (그렇지 않으면 notification의 아이콘 URL은 설정되지 않습니다.) -
options["
badge"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면 notification의 배지 URL을 반환값으로 설정합니다. (그렇지 않으면 notification의 배지 URL은 설정되지 않습니다.) -
options["
timestamp"]가 존재하면, notification의 타임스탬프를 해당 값으로 설정합니다. 그렇지 않으면, notification의 타임스탬프를 fallbackTimestamp로 설정합니다. -
notification의 상호작용 요구 설정을 다음으로 설정합니다: options["
requireInteraction"]. -
notification의 동작을 « »로 설정합니다.
-
entry 각각에 대해, options["
actions"]에서, 다음 수까지 최대 동작 수가 지원되는 범위 내에서 수행합니다 (이를 초과하는 항목은 건너뜁니다):-
action을 새로운 알림 동작으로 합니다.
-
entry["
navigate"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면, action의 탐색 URL을 반환 값으로 설정합니다. (그렇지 않으면 action의 탐색 URL은 null로 유지됩니다.) -
entry["
icon"]가 존재하면, 파싱을 baseURL을 사용하여 수행하고, 실패를 반환하지 않으면, action의 아이콘 URL을 반환값으로 설정합니다. (그렇지 않으면 action의 아이콘 URL은 null로 유지됩니다.) -
action을 notification의 동작에 추가합니다.
-
-
notification을 반환합니다.
2.1. 수명 및 UI 통합
사용자 에이전트는 알림 목록을 유지해야 하며, 이는 목록으로 0개 이상의 알림을 포함합니다.
사용자 에이전트는 닫기 단계를 실행하는 것이 좋습니다. 대상은 비지속 알림이며, 실행 시점은 해당 알림이 생성된 지 몇 초 후입니다.
사용자 에이전트는 비지속 알림을 플랫폼의 "알림 센터"에 표시하지 않는 것이 좋습니다 (해당 기능이 있는 경우).
사용자 에이전트는 지속 알림을 유지하는 것이 좋습니다. 이는 해당 알림이 알림 목록에서 제거될 때까지입니다.
지속
알림의 경우,
close()
메서드가 해당 알림의 Notification
객체 중 하나에서 호출될 수 있습니다.
사용자 에이전트는 지속 알림을 플랫폼의 "알림 센터"에 표시하는 것이 좋습니다 (해당 기능이 있는 경우).
2.2. 권한 통합
Notifications API는 강력한 기능이며, 다음
이름으로
식별됩니다:
"notifications".
[Permissions]
알림 권한 상태 가져오기를 수행하려면, 다음 단계를 실행합니다:
-
permissionState를 다음의 결과로 합니다: 현재 권한 상태 가져오기. 이때 "
notifications"를 사용합니다. -
permissionState가 "
prompt"이면, "default"를 반환합니다. -
permissionState를 반환합니다.
2.3. 방향
이 절은 HTML의 렌더링 절에서 사용하는 용어와 동등한 용어로 작성되었습니다. [HTML]
사용자 에이전트는 다음 텍스트의 유니코드 의미를 따를 것으로 기대됩니다:
알림의
제목, 본문, 그리고
제목으로, 각 동작에 속하는 제목입니다. 각 텍스트는
표시될 때 하나 이상의 양방향 알고리즘 문단으로 이루어진 독립적인 집합으로
처리될 것으로 기대됩니다. 이는 양방향 알고리즘의 규칙 P1,
P2 및 P3에 정의된 대로이며, 예를 들어
U+000A LINE FEED (LF) 문자의 문단 구분 동작을 지원하는 것을 포함합니다.
제목, 본문 및
제목의 각 문단에 대해, 해당 제목이 속하는 각 동작을 포함하여,
알림의
방향은
상위 수준의 재정의를 제공합니다.
이는 값이 "auto"가 아닐 때 규칙 P2 및 P3에 적용됩니다. [BIDI]
알림의 방향은 상대적인 표시 순서도 결정합니다. 이는 알림의 동작을 최종 사용자에게 표시할 때, 알림 플랫폼이 이를 나란히 표시하는 경우에 해당합니다.
2.4. 언어
알림의 언어는 기본 언어를 지정합니다. 이는 알림의 제목, 본문 및 각 제목에 적용되며, 해당 제목은 각 동작에 속합니다. 이 값은 문자열입니다. 빈 문자열은 기본 언어를 알 수 없음을 나타냅니다. 그 밖의 문자열은 언어 태그로 해석해야 합니다. 유효성이나 올바른 형식 여부를 강제하지는 않습니다. [BCP47]
개발자는 유효한 언어 태그만 사용하는 것이 권장됩니다.
2.5. 리소스
가져오기 단계는, 알림 notification과 null 또는 환경 설정 객체 settings가 주어졌을 때, 다음과 같습니다:
-
알림 플랫폼이 이미지를 지원하고 notification의 이미지 URL이 설정되어 있으면, 알림 리소스를 가져옵니다. 인수는 notification, notification의 이미지 URL, settings, 그리고 리소스 resource가 주어졌을 때 다음을 실행하는 단계입니다: notification의 이미지 리소스를 resource로 설정합니다.
-
알림 플랫폼이 아이콘을 지원하고 notification의 아이콘 URL이 설정되어 있으면, 알림 리소스를 가져옵니다. 인수는 notification, notification의 아이콘 URL, settings, 그리고 리소스 resource가 주어졌을 때 다음을 실행하는 단계입니다: notification의 아이콘 리소스를 resource로 설정합니다.
-
알림 플랫폼이 배지를 지원하고 notification의 배지 URL이 설정되어 있으면, 알림 리소스를 가져옵니다. 인수는 notification, notification의 배지 URL, settings, 그리고 리소스 resource가 주어졌을 때 다음을 실행하는 단계입니다: notification의 배지 리소스를 resource로 설정합니다.
-
알림 플랫폼이 동작과 동작 아이콘을 지원하면, 각각에 대해, action을 notification의 동작에서 순회합니다: action의 아이콘 URL이 null이 아니면, 알림 리소스를 가져옵니다. 인수는 notification, action의 아이콘 URL, settings, 그리고 리소스 resource가 주어졌을 때 다음을 실행하는 단계입니다: action의 아이콘 리소스를 resource로 설정합니다.
알림 리소스 가져오기를 수행하려면, 알림 notification, URL url, null 또는 환경 설정 객체 settings, 그리고 알고리즘 processResource가 주어졌을 때, 이 알고리즘은 리소스를 인수로 받습니다:
-
request를 새로운 요청으로 합니다. 이 요청의 URL은 url이고, 클라이언트는 settings이며, 대상은 "
image"이고, 모드는 "no-cors"이며, 자격 증명 모드는 "include"입니다. -
settings가 null이면, request의 출처를 notification의 출처로, request의 리퍼러를 "
no-referrer"로, 그리고 request의 서비스 워커 모드를 "none"으로 설정합니다.이는 사용자 에이전트가 선언적 푸시 메시지의 알림을 표시하는 경우입니다. 이러한 알림의 리소스를 가져올 때는 서비스 워커가 관여하지 않습니다. 선언적 푸시 메시지는 서비스 워커를 요구하지 않도록 설계되었기 때문입니다. [PUSH-API]
-
가져오기를 request에 대해 수행합니다. 이때 useParallelQueue를 true로 설정하고, processResponseConsumeBody를 다음 단계로 설정합니다. 이 단계에는 응답 response와 null, 실패 또는 바이트 시퀀스 bytes가 주어집니다:
-
bytes가 null 또는 실패이면, 반환합니다.
-
bytes를 이미지로 디코딩하려고 시도합니다.
-
이미지 형식이 지원되면, 디코딩된 리소스를 인수로 processResource를 실행합니다.
이 리소스는 다음과 비슷한 방식으로 가져오려는 의도입니다:
<img>. 다만 이는 추상화가 필요합니다. -
2.6. 알림 표시
알림 표시 단계는, 알림 notification과 null 또는 환경 설정 객체 settings가 주어졌을 때, 다음과 같습니다:
-
가져오기 단계를 실행합니다. 인수는 notification과 settings입니다.
-
모든 가져오기가 완료되고 notification의 이미지 리소스, 아이콘 리소스, 그리고 배지 리소스가 설정될 때까지 기다립니다 (있는 경우). 또한 아이콘 리소스도 기다립니다. 이는 notification의 동작에 속하는 리소스입니다 (있는 경우).
-
shown을 false로 합니다.
-
oldNotification을 다음 알림으로 합니다. 해당 알림은 알림 목록에 있으며, 태그가 빈 문자열이 아니고 notification의 태그와 같으며, 그 출처는 동일 출처로서 notification의 출처와 같습니다. 그러한 알림이 있으면 이를 사용하며, 그렇지 않으면 null로 합니다.
-
oldNotification이 null이 아니면:
-
닫기 이벤트를 처리합니다. 인수는 oldNotification입니다.
-
알림 플랫폼이 대체를 지원하면:
알림 플랫폼은 네이티브 대체를 지원하는 것이 강력히 권장됩니다. 사용자 경험이 향상되기 때문입니다.
-
-
shown이 false이면:
-
shown이 false이거나 oldNotification이 null이 아니고, notification의 재알림 설정이 true이면, 선택적으로 사용자 에이전트가 정의한 방식으로 최종 사용자에게 알립니다 (예: 소리 재생).
-
notification이 비지속 알림이면, 태스크를 큐에 넣습니다. 이 태스크는 이벤트를 발생시킵니다. 이벤트 이름은
show이며,Notification객체를 대상으로 합니다. 이 객체는 notification을 나타냅니다.
2.7. 알림 활성화
알림 notification 또는 그 동작 중 하나가 최종 사용자에 의해 활성화되면, 기반 알림 플랫폼이 활성화를 지원한다는 가정하에, 사용자 에이전트는 (달리 명시되지 않는 한) 다음 단계를 실행해야 합니다:
-
action을 null로 합니다.
-
notification의 동작 중 하나가 최종 사용자에 의해 활성화되었으면, action을 해당 알림 동작으로 설정합니다.
-
navigationURL을 notification의 탐색 URL로 합니다.
-
action이 null이 아니면, navigationURL을 action의 탐색 URL로 설정합니다.
이는 의도적으로 다음과 같이 동작하게 합니다: 알림 동작의 탐색 URL이 null이면, 처리가 계속되어
click이벤트로 이어지므로, 웹 개발자에게 더 많은 유연성을 제공합니다. -
navigationURL이 null이 아니면:
-
다음 두 선택지 중 하나를 구현 정의 방식으로 선택합니다:
-
탐색합니다: 기존 최상위 탐색 가능 객체를 대상으로 하며, 이는 사용자 에이전트의 최상위 탐색 가능 객체 집합 내에 있습니다. 목적지는 navigationURL입니다.
-
새로운 최상위 탐색 가능 객체를 생성합니다. 인수는 navigationURL입니다.
사용자 에이전트는 플랫폼 관례를 따르는 것이 강력히 권장됩니다.
-
-
반환합니다.
-
-
notification이 지속 알림이면:
-
actionName을 빈 문자열로 합니다.
-
action이 null이 아니면, actionName을 action의 이름으로 설정합니다.
- 서비스 워커 알림
이벤트를 발생시킵니다. 이름은 "
notificationclick"이며, 인수는 notification과 actionName입니다.
-
-
그렇지 않으면, 태스크를 큐에 넣어 다음 단계를 실행합니다:
-
intoFocus를 다음의 결과로 합니다: 이벤트 발생. 이벤트 이름은
click이며,Notification객체를 대상으로 합니다. 이 객체는 notification을 나타내며,cancelable속성을 true로 초기화합니다.사용자 에이전트는
focus()가 이벤트 리스너 내부에서 작동하도록 하는 것이 권장됩니다. 이는 이름이click인 이벤트의 리스너입니다. -
intoFocus가 true이면, 사용자 에이전트는 notification과 관련된 브라우징 컨텍스트의 뷰포트에 포커스를 맞추는 것이 좋습니다.
-
웹 플랫폼 전반에서 "활성화"는 의도적으로 "클릭"이라는 부정확한 이름으로 불립니다.
2.8. 알림 닫기
알림이 기반 알림 플랫폼 또는 최종 사용자에 의해 닫히면, 해당 알림의 닫기 단계를 실행해야 합니다.
닫기 단계는, 주어진 알림 notification에 대해 다음과 같습니다:
-
닫기 이벤트를 처리합니다. 인수는 notification입니다.
닫기 이벤트 처리를 수행하려면, 알림 notification이 주어졌을 때:
-
notification이 지속 알림이고 notification이 최종 사용자에 의해 닫혔으면, 서비스 워커 알림 이벤트를 발생시킵니다. 이름은 "
notificationclose"이며, 인수는 notification입니다. -
notification이 비지속 알림이면, 태스크를 큐에 넣습니다. 이 태스크는 이벤트를 발생시킵니다. 이벤트 이름은
close이며,Notification객체를 대상으로 합니다. 이 객체는 notification을 나타냅니다.
3. API
[Exposed =(Window ,Worker )]interface :Notification EventTarget {constructor (DOMString ,title optional NotificationOptions = {});options static readonly attribute NotificationPermission permission ; [Exposed =Window ]static Promise <NotificationPermission >requestPermission (optional NotificationPermissionCallback );deprecatedCallback static readonly attribute unsigned long maxActions ;attribute EventHandler onclick ;attribute EventHandler onshow ;attribute EventHandler onerror ;attribute EventHandler onclose ;readonly attribute DOMString title ;readonly attribute NotificationDirection dir ;readonly attribute DOMString lang ;readonly attribute DOMString body ;readonly attribute USVString navigate ;readonly attribute DOMString tag ;readonly attribute USVString image ;readonly attribute USVString icon ;readonly attribute USVString badge ;readonly attribute EpochTimeStamp timestamp ;readonly attribute boolean renotify ;readonly attribute boolean ?silent ;readonly attribute boolean requireInteraction ; [SameObject ]readonly attribute any data ; [SameObject ]readonly attribute FrozenArray <NotificationAction >actions ;undefined close (); };dictionary {NotificationOptions NotificationDirection = "auto";dir DOMString = "";lang DOMString = "";body USVString ;navigate DOMString = "";tag USVString ;image USVString ;icon USVString ;badge EpochTimeStamp ;timestamp boolean =renotify false ;boolean ?=silent null ;boolean =requireInteraction false ;any =data null ;sequence <NotificationAction >= []; };actions enum {NotificationPermission ,"default" ,"denied" };"granted" enum {NotificationDirection ,"auto" ,"ltr" };"rtl" dictionary {NotificationAction required DOMString ;action required DOMString ;title USVString ;navigate USVString ; };icon callback =NotificationPermissionCallback undefined (NotificationPermission );permission
비지속
알림은 하나의 Notification
객체로 표현되며, Notification의
생성자를 통해 생성할 수 있습니다.
지속
알림은 0개 이상의
Notification
객체로 표현되며,
showNotification()
메서드를 통해 생성할 수 있습니다.
3.1. 가비지 컬렉션
Notification
객체는 다음 조건을 충족하는 동안 가비지 컬렉션의 대상이 되어서는 안 됩니다: 알림 목록이
포함하는 대상에 해당 객체에 대응하는 알림이 있고, 객체에
이벤트 리스너가 있으며, 그 type이 click,
show,
close 또는 error인 경우입니다.
3.2. 생성자
다음
new Notification(title, options)
생성자의 단계는 다음과 같습니다:
-
this의 관련 전역 객체가
ServiceWorkerGlobalScope객체이면, 예외를 던집니다:TypeError. -
notification을 다음의 결과로 합니다: 설정 객체로 알림 생성. 인수는 title, options, 그리고 this의 관련 설정 객체입니다.
-
this를 notification과 연결합니다.
-
다음 단계를 병렬로 실행합니다:
-
알림 권한 상태 가져오기의 결과가 "
granted"가 아니면, 태스크를 큐에 넣어 이벤트를 발생시킵니다. 이벤트 이름은error이며, 대상은 this입니다. 그리고 이 단계를 중단합니다.
-
3.3. 정적 멤버
정적 permission 게터의 단계는
알림 권한 상태 가져오기의 결과를 반환하는 것입니다.
표준을 편집하신다면 위 내용을 복사하지 마십시오. 동기식 권한은 동기식 IO와 마찬가지로 좋지 않은 방식입니다.
개발자는 대신 Permissions의 query()
메서드를
사용하는 것이 권장됩니다. [Permissions]
const permission = await navigator.permissions.query({name: "notifications"}); if (permission.state === "granted") { // API를 사용할 권한이 있습니다… }
다음 정적
requestPermission(deprecatedCallback)
메서드의 단계는 다음과 같습니다:
-
global을 현재 전역 객체로 합니다.
-
다음 단계를 병렬로 실행합니다:
-
permissionState를 다음의 결과로 합니다: 사용 권한 요청. 요청 대상은 "
notifications"입니다. -
전역 태스크를 큐에 넣습니다. 사용하는 DOM 조작 태스크 소스에, 주어진 global을 사용하여 다음 단계를 실행하도록 합니다:
-
-
promise를 반환합니다.
알림은 지금까지 최종 사용자에게 미리 묻는 것이 타당한 유일한 사례입니다. 다른 API의 명세에서는 이 패턴을 사용하지 말고, 대신 훨씬 더 적합한 여러 대안 중 하나를 사용하는 것이 좋습니다.
정적 maxActions 게터의 단계는
지원되는 최대 동작
수를 반환하는 것입니다.
3.4. 객체 멤버
다음은 이벤트 핸들러 (및 이에 대응하는
이벤트 핸들러 이벤트 유형)이며,
속성으로 지원해야 하는 대상은
Notification
객체입니다.
| 이벤트 핸들러 | 이벤트 핸들러 이벤트 유형 |
|---|---|
onclick
| click
|
onshow
| show
|
onerror
| error
|
onclose
| close
|
close() 메서드의 단계는
닫기 단계를 다음 this의 알림에 대해 실행하는 것입니다.
title 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
제목.
dir 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
방향.
lang 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
언어.
body 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
본문.
navigate 게터의 단계는 다음과 같습니다:
tag 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
태그.
image 게터의 단계는 다음과 같습니다:
icon 게터의 단계는 다음과 같습니다:
badge 게터의 단계는 다음과 같습니다:
timestamp 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
타임스탬프.
renotify 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
재알림
설정.
silent 게터의 단계는 다음을 반환하는 것입니다:
this의 알림의
무음
설정.
requireInteraction 게터의 단계는
다음 this의 알림의
상호작용 요구 설정을 반환하는 것입니다.
data 게터의 단계는 다음을 반환하는 것입니다:
StructuredDeserialize(this의 알림의
데이터, this의 관련 Realm). 이 과정에서 예외가 발생하면,
null을 반환합니다.
actions 게터의 단계는 다음과 같습니다:
-
frozenActions를 다음 타입의 빈 목록으로 합니다:
NotificationAction. -
각각에 대해, entry를 this의 알림의 동작에서 순회합니다:
-
action을 새로운
NotificationAction으로 합니다. -
entry의 탐색 URL이 null이 아니면, action["
navigate"]를 entry의 탐색 URL을 직렬화한 값으로 설정합니다. -
entry의 아이콘 URL이 null이 아니면, action["
icon"]을 entry의 아이콘 URL을 직렬화한 값으로 설정합니다. -
Object.freeze를 action에 대해 호출하여, 스크립트에 의한 의도치 않은 변경을 방지합니다.
-
action을 frozenActions에 추가합니다.
-
-
다음 동결 배열 생성을 frozenActions로부터 수행한 결과를 반환합니다.
3.5. 예제
3.5.1. 페이지에서 이벤트 사용
비지속
Notification
객체는 수명 주기 동안 이벤트를 디스패치하며, 개발자는 이를 사용하여
원하는 동작을 구현할 수 있습니다.
click 이벤트는 최종 사용자가 알림을 활성화할 때 디스패치됩니다.
var not = new Notification("Paul Kalkbrenner의 Gebrünn Gebrünn", { icon: "newsong.svg", tag: "song" });
not.onclick = function() { displaySong(this); };
3.5.2. 서비스 워커에서 동작 사용
지속
알림은
notificationclick 이벤트를 ServiceWorkerGlobalScope에서
발생시킵니다.
여기서는 서비스 워커가 하나의 "보관" 알림 동작이 있는 알림을 표시하여, 최종 사용자가 이 일반적인 작업을 웹사이트를 열지 않고 알림에서 수행할 수 있게 합니다 (예를 들어, 알림 플랫폼이 알림에 버튼을 표시할 수 있습니다). 최종 사용자는 알림의 본문을 활성화하여 받은편지함을 열 수도 있습니다.
self.registration.showNotification("Alice에게서 온 새 메일", {
actions: [{action: 'archive', title: "보관"}]
});
self.addEventListener('notificationclick', function(event) {
event.notification.close();
if (event.action === 'archive') {
silentlyArchiveEmail();
} else {
clients.openWindow("/inbox");
}
}, false);
3.5.3. 여러 인스턴스에 tag 멤버 사용
웹 애플리케이션은 여러 인스턴스에서 동시에 작동하는 경우가 많습니다. 예를 들어 최종 사용자가
여러 브라우저 탭에서 메일 애플리케이션을 여는 경우입니다. 데스크톱은 공유 리소스이므로,
알림 API는 이러한 인스턴스가 쉽게 조정될 수 있는 방법을 제공합니다. 이때 사용하는 것은
tag 멤버입니다.
개념적으로 동일한 사건을 나타내는 알림에는 같은 태그를 지정할 수 있으며, 두 알림이 모두 표시되더라도 최종 사용자는 하나의 알림만 받게 됩니다.
인스턴스 1 | 인스턴스 2
|
// 인스턴스가 새 메일이 있음을 알아차립니다. |
new Notification("John Doe에게서 온 새 메일", |
{ tag: 'message1' }); |
|
| // 조금 뒤에, 이 인스턴스가
| // 새 메일이 있음을 알아차립니다.
| new Notification("John Doe에게서 온 새 메일",
| { tag: 'message1' });
이 상황에서 사용자 에이전트가 여기에 제시된 알고리즘을 따르면, 하나의 "John Doe에게서 온 새 메일" 알림만 표시됩니다.
3.5.4. 단일 인스턴스에 tag 멤버
사용
tag 멤버는 애플리케이션의 단일 인스턴스에서도 사용할 수 있으며,
상태가 변경될 때 알림을 가능한 한 최신 상태로 유지하는 데 도움이 됩니다.
예를 들어, Alice가 Bob과 채팅 애플리케이션을 사용하고 있고, Bob이 Alice가 아무 활동을 하지 않는 동안 여러 메시지를 보내면, 애플리케이션은 Alice에게 각 메시지마다 데스크톱 알림을 표시하지 않는 편을 선택할 수 있습니다.
// Bob이 "안녕하세요"라고 말합니다
new Notification("Bob: 안녕하세요", { tag: 'chat_Bob' });
// Bob이 "오늘 오후에 시간 있으세요?"라고 말합니다
new Notification("Bob: 안녕하세요 / 오늘 오후에 시간 있으세요?", { tag: 'chat_Bob' });
이 상황의 결과는 하나의 알림입니다. 두 번째 알림이
동일한 태그를 가진 첫 번째 알림을 대체합니다. 알림을 큐에 넣는 플랫폼에서는
(선입선출), 태그를 사용하면 알림이 큐에서 자신의
위치를 유지할 수도 있습니다. 최신 알림을 먼저 표시하는 플랫폼에서는,
이와 비슷한 결과를 close()
메서드를 사용하여 얻을 수 있습니다.
4. 서비스 워커 API
dictionary {GetNotificationOptions DOMString = ""; };tag partial interface ServiceWorkerRegistration {Promise <undefined >showNotification (DOMString ,title optional NotificationOptions = {});options Promise <sequence <Notification >>getNotifications (optional GetNotificationOptions = {}); }; [filter Exposed =ServiceWorker ]interface :NotificationEvent ExtendableEvent {(constructor DOMString ,type NotificationEventInit );eventInitDict readonly attribute Notification notification ;readonly attribute DOMString action ; };dictionary :NotificationEventInit ExtendableEventInit {required Notification ;notification DOMString = ""; };action partial interface ServiceWorkerGlobalScope {attribute EventHandler onnotificationclick ;attribute EventHandler onnotificationclose ; };
서비스 워커 등록에는 연결된
다음
showNotification()의 성공적인 호출 여부가 있습니다
(불리언).
초기값은 false입니다.
이는 푸시 API 표준을 위한 기반 구조입니다. [PUSH-API]
다음
showNotification(title, options)
메서드의 단계는 다음과 같습니다:
-
this의 활성 워커가 null이면, 거부합니다: promise를
TypeError로 거부하고, promise를 반환합니다. -
notification을 다음의 결과로 합니다: 설정 객체로 알림 생성. 인수는 title, options, 그리고 this의 관련 설정 객체입니다. 이 과정에서 예외가 발생했으면, 거부합니다: promise를 해당 예외로 거부하고, promise를 반환합니다.
-
다음 단계를 병렬로 실행합니다:
-
알림 권한 상태 가져오기의 결과가 "
granted"가 아니면, 전역 태스크를 큐에 넣습니다. 사용하는 DOM 조작 태스크 소스에, 주어진 global을 사용하여 거부하도록 합니다: promise를TypeError로 거부합니다. 그리고 이 단계를 중단합니다. -
notification의 서비스 워커 등록의 다음
showNotification()의 성공적인 호출 여부를 true로 설정합니다. -
전역 태스크를 큐에 넣습니다. 사용하는 DOM 조작 태스크 소스에, 주어진 global을 사용하여 이행하도록 합니다: promise를 undefined로 이행합니다.
-
-
promise를 반환합니다.
다음
getNotifications(filter)
메서드의 단계는 다음과 같습니다:
-
promise를 새로운 프로미스로 합니다. 이는 realm에 속합니다.
-
다음 단계를 병렬로 실행합니다:
-
promise를 반환합니다.
이 메서드는 0개 이상의 새로운 Notification
객체를 반환하며, 이 객체들은
동일한 기반 알림을
나타낼 수 있습니다. 이는 Notification
객체 중 이미 존재하는 객체가 나타내는 알림과 같을 수 있다는 뜻입니다.
서비스 워커 알림 이벤트 발생을 수행하려면, 이름은
name이며,
알림
notification과 선택적 문자열
action이 주어졌을 때 (기본값은
빈 문자열): 기능 이벤트 발생을 실행합니다. 인수는 name, NotificationEvent,
notification의 서비스 워커 등록, 그리고 다음
초기화입니다:
notification- 새로운
Notification객체로, notification을 나타냅니다. action- action
notification 게터의 단계는
해당 속성을
초기화할 때 사용한 값을 반환하는 것입니다.
action 게터의 단계는
해당 속성을
초기화할 때 사용한 값을 반환하는 것입니다.
다음은 이벤트 핸들러 (및 이에 대응하는
이벤트 핸들러 이벤트 유형)이며, 속성으로 지원해야 하는
대상은
ServiceWorkerGlobalScope
객체입니다:
| 이벤트 핸들러 | 이벤트 핸들러 이벤트 유형 |
|---|---|
onnotificationclick
| notificationclick
|
onnotificationclose
| notificationclose
|
감사의 말
다음 분들께 Addison Phillips, Aharon (Vladimir) Lanin, Alex Russell, Anssi Kostiainen, Arkadiusz Michalski, Boris Zbarsky, Brady Eidson, David Håsäther, Doug Turner, Drew Wilson, Ehsan Akhgari, Frederick Hirsch, Ian Hickson, Jake Archibald, James Graham, John Mellor, Jon Lee, Jonas Sicking, Kagami Sascha Rosylight, Leo Tenenbaum, Michael Cooper, Michael Henretty, Michael™ Smith, Michael van Ouwerkerk, Mike Taylor, Nicolás Satragno, Olli Pettay, Peter Beverloo, Philip Jägenstedt, Reuben Morais, Rich Tibbett, Robert Bindar, 박상현 (Sanghyun Park), Simon Pieters, Theresa O’Connor, timeless, 그리고 triple-underscore 훌륭한 기여에 감사드립니다.
이 표준은 Anne van Kesteren이 작성했습니다 (Apple, annevk@annevk.nl). 이전 버전은 John Gregg이 작성했습니다 (Google, johnnyg@google.com).
지식 재산권
저작권 © WHATWG (Apple, Google, Mozilla, Microsoft). 이 저작물에는 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스가 적용됩니다. 이 저작물의 일부가 소스 코드에 포함되는 경우, 해당 소스 코드에 포함된 부분에는 BSD 3-Clause 라이선스가 대신 적용됩니다.
이 문서는 현행 표준입니다. 특허 검토 버전에 관심이 있으시면 현행 표준 검토 초안을 확인하시는 것이 좋습니다.