Uygulama rozeti nasıl oluşturulur?

Rozetler, kullanıcıya acil olmayan bilgileri aktarmak için kullanılır. Örneğin, bir uygulamanın durumunu veya okunmamış öğelerin sayısını belirtmek için kullanılırlar. Uygulama rozeti oluşturmanın klasik yolu, site simgesine bir sayı eklemektir. Modern tarayıcılarda, bir uygulama yüklendikten sonra, işletim sisteminin görev çubuğundaki uygulama simgesine rozet eklemenin yerleşik bir yolu vardır.

navigator.setAppBadge() yöntemini kullanma

navigator.setAppBadge() yöntemi, yüklü uygulamayla ilişkilendirilmiş simge üzerinde bir rozet ayarlar. Yöntem, rozetin değeri olarak kullanılacak bir tamsayı olan isteğe bağlı tek bir bağımsız değişken alır. Sayı 0 olarak ayarlanırsa uygulama rozeti temizlenir. Bağımsız değişken sağlanmadığında genellikle renkli bir nokta şeklinde gösterilen genel bir rozet ortaya çıkar.

Rozet değeri olarak 3 rakamıyla gerçek simgeyi gösteren uygulama simgesi

Tarayıcı Desteği

  • 81
  • 81
  • x
  • 17

Kaynak

Klasik yöntem

Site simgesine numara ekleme

Uygulama henüz yüklenmediyse site simgesine bir numara ekleyebilirsiniz. Bunu yapmanın birçok yolu vardır. Örneğin, site simgesini dinamik bir şekilde rozet bilgisi eklenmiş bir tuvale çizebilir ve bunu Blob URL'si olarak gösterebilir ya da rozet bilgisiyle veri URL'si olarak bir SVG resmi oluşturabilirsiniz.

Rozet değeri olarak 5 rakamıyla birlikte gerçek simgeyi gösteren site simgesi.

Progresif geliştirme

Aşağıdaki snippet, <favicon-badge></favicon-badge> özel öğesi kullanır. Bu özel öğe, geliştiricinin badge özelliğine tam sayı ileterek src özelliği aracılığıyla belirtilen site simgesinde bildirimli şekilde bir rozet ayarlamasına olanak tanır. Kullanıcı uygulamayı yüklediğinde, rozet yerel işletim sistemi rozetine "yükseltilir".

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
();
 
});
}

Daha fazla bilgi

Demo

<!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 `