앱 배지를 만드는 방법

배지는 사용자에게 긴급하지 않은 정보를 전달하는 데 사용됩니다. 예를 들어 앱의 상태 또는 읽지 않은 항목의 수를 나타내는 데 사용됩니다. 앱 배지를 만드는 기본적인 방법은 파비콘에 번호를 추가하는 것입니다. 최신 브라우저에서는 앱을 설치한 후 운영체제 작업 표시줄에 있는 앱 아이콘에 배지를 추가하는 방법이 내장되어 있습니다.

navigator.setAppBadge() 메서드는 설치된 앱과 연결된 아이콘에 배지를 설정합니다. 이 메서드는 배지 값으로 사용되는 정수인 단일 인수(선택사항)를 선택적으로 사용합니다. 숫자를 0으로 설정하면 앱 배지가 삭제됩니다. 인수를 제공하지 않으면 일반적으로 색상 점으로 표시되는 일반 배지가 표시됩니다.

배지 값으로 숫자 3이 표시된 실제 아이콘을 보여주는 앱 아이콘

브라우저 지원

  • 81
  • 81
  • x
  • 17

소스

기존의 방식

파비콘에 번호 추가

앱이 아직 설치되지 않은 경우 파비콘에 번호를 추가할 수 있습니다. 이를 위한 여러 가지 방법이 있습니다. 예를 들어, 배지 정보가 추가된 캔버스에 파비콘을 동적으로 그리고 Blob URL로 표시하거나, 배지 정보를 데이터 URL로 사용하여 SVG 이미지를 만들 수 있습니다.

숫자가 5인 실제 아이콘을 배지 값으로 보여주는 파비콘

점진적 개선

아래 스니펫은 개발자가 정수를 badge 속성에 전달하여 src 속성을 통해 지정된 파비콘에 선언적으로 배지를 설정할 수 있는 맞춤 요소 <favicon-badge></favicon-badge>를 사용합니다. 사용자가 애플리케이션을 설치하면 배지가 기본 운영체제 배지로 '업그레이드'됩니다.

import 'https://unpkg.com/favicon-badge@2.0.0/dist/FavIconBadge.js';

// DOM references.
const favicon = document.querySelector('favicon-badge');
const installButton = document.querySelector('button');

// Feature detection.
const supportsAppBadge = 'setAppBadge' in navigator;

let setAppBadge
;

// For the demo simply set the badge between [0, 9].
let i
= 0;
const getAppBadgeValue = () => {
 
if (i > 9) {
    i
= 0;
 
}
 
return i++;
};

// Set the badge on the favicon.
const setAppBadgeFavicon = (value) => {
  favicon
.badge = value;
};

// Set the native operating system badge.
const setAppBadgeNative = (value) => {
  navigator
.setAppBadge(value);
}

// If the app is installed and the Badging API is supported,
// set the badge on the native operating system. Else, fall
// back to the favicon.
if (
  matchMedia
('(display-mode: standalone)').matches &&
  supportsAppBadge
) {
  setAppBadge
= setAppBadgeNative;
} else {
  setAppBadge
= setAppBadgeFavicon;
}

// Set a new badge every second.
setInterval
(() => {
  setAppBadge
(getAppBadgeValue());
}, 1000);

// If installation is supported…
if ('BeforeInstallPromptEvent' in window) {
  let installEvent
= null;
 
const onInstall = () => {
   
// After installation, "upgrade" to the native operating system badge.
    installButton
.disabled = true;
    installEvent
= null;
   
if (supportsAppBadge) {
      favicon
.badge = false;
      setAppBadge
= setAppBadgeNative;
   
}
 
};

 
// …listen for the `beforeinstallprompt` event.
  window
.addEventListener('beforeinstallprompt', (event) => {
    event
.preventDefault();
    installEvent
= event;
    installButton
.disabled = false;
 
});

 
// Deal with installation.
  installButton
.addEventListener('click', async () => {
   
if (!installEvent) {
     
return;
   
}
    installEvent
.prompt();
   
const result = await installEvent.userChoice;
   
if (result.outcome === 'accepted') {
      onInstall
();
   
}
 
});

 
// Listen for the `appinstalled` in case the user installs the app manually.
  window
.addEventListener('appinstalled', (event) => {
    onInstall
();
 
});
}

추가 자료

데모

<!DOCTYPE html>
<html lang="en">
 
<head>
   
<meta charset="utf-8" />
   
<meta name="viewport" content="width=device-width, initial-scale=1" />
   
<link rel="manifest" href="manifest.json" />
   
<title>How to create an app badge</title>
   
<link rel="stylesheet" href="style.css" />
   
<!-- TODO: Devsite - Removed inline handlers -->
   
<!-- <script>
      if ('serviceWorker' in navigator) {
        window.addEventListener('load', async () => {
          const registration = await navigator.serviceWorker.register(
            'sw.js',
          );
          console.log(
            'Service worker registered for scope',
            registration.scope,
          );
        });
      }
    </script>
    <script src="script.js" type="module"></script> -->

 
</head>
 
<body>
   
<h1>How to create an app badge</h1>
   
<ol>
     
<li>
        Watch the favicon. You should see a counter that updates each second
        integrated into the favicon.
       
<img
         
src="../favicon.png"
         
style="width: 250px; height: auto"
         
width="528"
         
height="74"
         
alt="Favicon with counter."
       
/>
     
</li>
     
<li>
        Install the app by clicking the button below. After the installation,
        the button is disabled.
       
<p>
         
<button disabled type="button">Install</button>
       
</p>
     
</li>
     
<li>
        Watch the app icon in your operating system's task bar. You should see a
        counter that updates each second as an app badge.
       
<img
         
src="../app-badge.png"
         
style="width: 80px; height: auto"
         
width="282"
         
height="388"
         
alt="App badge with counter."
       
/>
     
</li>
   
</ol>
   
<favicon-badge src="../favicon.svg" textColor="#fff" badge="" />
 
</body>
</html>

        html
{
 
box-sizing: border-box;
 
font-family: system-ui, sans-serif;
 
color-scheme: dark light;
}

*, *:before, *:after {
 
box-sizing: inherit;
}

body
{
 
margin: 1rem;
}

img
{
 
height: auto;
 
max-width: 100%;
 
display: block;
}
       

       
import 'https://unpkg.com/favicon-badge@2.0.0/dist/FavIconBadge.js';

// The `