broadcast-update 가 자체 API 에서 postMessage()로 변경되었다.
이벤트 리스너가 많아져 복잡 해지고, 기존 API에서는 메세징의 버퍼 기능이 없었기 때문이다.
// v4: const updatesChannel =newBroadcastChannel("api-updates"); updatesChannel.addEventListener("message",(event)=>{ const{ cacheName, updatedUrl }= event.data.payload; // ... your code here ... }); // v5: // This listener should be added as early as possible in your page's lifespan // to ensure that messages are properly buffered. navigator.serviceWorker.addEventListener("message",(event)=>{ // Optional: ensure the message came from workbox-broadcast-update if(event.meta==="workbox-broadcast-update"){ const{ cacheName, updatedUrl }= event.data.payload; // ... your code here ... } });
어느 캐싱전략을 사용해도 상관없으나 오프라인 모드로 연결이 되어야한다.
국내 서비스일 경우 크게 느리지 않으므로 Network First Strategy 로 캐싱하는 걸 추천한다.
국외 서비스일 경우 로드되는 리소스까지 캐싱전략을 세워야될 수 있다.
여기서 start_url 에 querystring 을 추가해 사용하는 경우가 대부분일텐데 캐싱되는 URL 은 querystring 이 없다는 걸 감안해야한다.
예를 들어보자.
{ // 보통 fetch request 로 접근되는 경로는 다음과 같다. "start_url":"/", // 검색 파라미터가 달려있다면 이런 모양일 것이다. "start_url":"/?NaPm=", // 하지만 manifest.json 에 들어있는 경로는 다음과 같을 것이다. "start_url":"/?pwa=1&utm_source=pwa" }
유저가 접근시 ['NaPm', 'pwa', 'utm_source'] 등의 파라미터를 제거해야 경로가 캐시처리되며 오프라인 접근이 될 것이다.
name 속성은 스플래시 스크린에 사용되며, short_name 은 바로가기 앱 명에 사용된다.
name 속성에 빈 값이 들어갈 경우 (빈 값엔 space 및 'ㄱ' 한자 1키도 포함된다.) short_name 으로 대체된다.
두 속성이 모두 빈 값일 경우 홈 설치가 비활성화 된다.
이 기능은 스펙에 명시되어 있어서 변경 불가능하다.
크롬에선 스플래시 스크린 하단에 앱 이름이 노출되며 기타 브라우저에선 중앙에 노출된다.
최근에 하단으로 변경된 것으로 보인다.
크롬 빼고는 지원되는 브라우저에서 홈 설치시에 브라우저 아이콘이 모두 노출된다.
이러면 웹 푸쉬를 받을 시에 원래 브라우저에 뱃지가 생긴다고 보면 된다.
배너를 닫을 시에 재노출 기간이 비상식적으로 길다.
배너는 prompt() 메소드로 강제 노출이 불가능하며, 버튼을 클릭하는 액션이 있어야만 한다.
재노출일을 초기화할 시에는 브라우저의 데이터를 모두 삭제해야한다.
(서비스워커 삭제로 불가능, 계정 또는 브라우저에 저장되는 값으로 추정됨)
UC 브라우저는 문서도 있고 설치가 되었던 것 같은데 최근 설치가 되지 않는다.
Whale 는 크로미움 기반이라 설치가 되었던 것 같은데 최근 설치가 되지 않는다.