Compartilhar via


Reengaja os usuários com selos e notificações

AS PWAs (Aplicativos Web progressivas) são capazes de funcionar quando o aplicativo não está em execução, como atualizar dados no cache ou enviar mensagens quando o dispositivo recupera a conectividade. Para fazer isso, use as seguintes APIs, que são descritas em Sincronizar e atualizar um PWA em segundo plano:

  • API de Sincronização em Segundo Plano
  • API de sincronização de plano de fundo periódico
  • API de busca em segundo plano

Para reengatar o usuário com o aplicativo após a conclusão de uma tarefa em segundo plano, você pode usar notificações e selos. Para fazer isso, use as seguintes APIs:

  • API de Falsificação de Aplicativos
  • API de Notificações

Os selos são amigáveis ao usuário e podem ser usados com frequência. Os selos não interrompem o fluxo de trabalho do usuário e são úteis para exibir uma pequena quantidade de informações, como o número de mensagens recebidas.

As notificações são úteis para os aplicativos participarem da central de notificação do sistema e exibirem imagens e informações de texto. As notificações são úteis para alertar o usuário sobre uma alteração importante de estado em seu aplicativo. No entanto, as notificações raramente devem ser usadas, pois tendem a ser disruptivas para o fluxo de trabalho do usuário.

Exibir um selo no ícone do aplicativo

As PWAs podem exibir um selo no ícone do aplicativo usando a API de Falsificação de Aplicativos. O selo pode estar vazio ou pode conter um número.

Verificar se há suporte

Antes de usar a API de Falsificação de Aplicativos, primeiro marcar se a API de Badging de Aplicativo tem suporte no mecanismo do navegador em que seu aplicativo é executado, da seguinte maneira:

if (navigator.setAppBadge) {
    console.log("The App Badging API is supported!");
}

Exibindo o selo

Para definir o selo, use o código a seguir do front-end do aplicativo ou do trabalho de serviço.

// To display an empty badge
navigator.setAppBadge();

// To display a number in the badge
navigator.setAppBadge(42);

Um ícone PWA na barra de tarefas do Windows, com um selo mostrando o número 42

A setAppBadge função retorna uma Promessa, que pode ser usada para saber quando o selo foi adicionado e para capturar possíveis erros, da seguinte maneira:

navigator.setAppBadge(42).then(() => {
    console.log("The badge was added");
}).catch(e => {
    console.error("Error displaying the badge", e);
});

Limpar o selo

Para remover o selo no ícone do aplicativo, use o seguinte código do front-end ou do trabalho de serviço:

navigator.clearAppBadge();

O clearAppBadge também retorna uma Promessa que pode ser usada para lidar com possíveis erros.

Outra maneira de limpar um selo é chamar setAppBadge novamente, mas passar 0 como o valor, desta vez:

navigator.setAppBadge(0);

Exibir notificações no centro de ações

As PWAs podem exibir notificações usando a API de Notificações.

Verificar se há suporte

Antes de usar a API, marcar que ela tenha suporte, da seguinte maneira:

if ("Notification" in window) {
    console.log("The Notifications API is supported");
}

Permissão de solicitação

A API de Notificações só pode ser usada depois de ter solicitado a permissão do usuário para exibir mensagens. Para solicitar permissão, use a requestPermission função, conforme mostrado abaixo.

A solicitação de permissão só deve ser feita em resposta a uma ação do usuário. Essa é uma prática recomendada, para evitar interromper o usuário com prompts de permissão quando o usuário ainda não interagiu com um recurso que usa notificações.

button.addEventListener("click", () => {
    Notification.requestPermission().then(permission => {
        if (permission === "granted") {
            console.log("The user accepted");
        }
    });
});

Você pode marcar a permissão status novamente mais tarde:

if (Notification.permission === "granted") {
    console.log("The user already accepted");
}

Exibir a notificação

Depois de saber que a API tem suporte e que o usuário aceitou notificações, você pode exibir uma notificação criando um Notification objeto:

const notification = new Notification("Hello World!");

Uma notificação somente texto

O código acima exibe uma mensagem de notificação somente texto, mas você também pode personalizar a mensagem incluindo propriedades adicionais body e icon :

const notification = new Notification("Hello World!", {
    body: "This is my first notification message",
    icon: "/assets/logo-192.png",
});

Uma notificação com algum texto e uma imagem

Você também pode exibir notificações do trabalho de serviço do seu aplicativo. Isso é útil porque o trabalhador do serviço pode estar trabalhando enquanto seu aplicativo não está em execução. Para enviar uma notificação do seu funcionário de serviço, use a ServiceWorkerRegistration.showNotification função:

self.registration.showNotification("Hello from the service worker!");

A showNotification função dá suporte aos mesmos argumentos que o Notification construtor usado no exemplo anterior. A showNotification função também dá suporte à actions propriedade, que é descrita na seção a seguir.

Adicionar ações às notificações

Em uma notificação, é possível adicionar ações para o usuário executar. Isso só tem suporte em notificações persistentes que são mostradas usando a ServiceWorkerRegistration.showNotification função.

self.registration.showNotification("Your content is ready", {
    body: "Your content is ready to be viewed. View it now?",
    icon: "/assets/logo-192.png",
    actions: [
        {
            action: "view-content",
            title: "Yes"
        },
        {
            action: "go-home",
            title: "No"
        }
    ]
});

Uma notificação com algum texto, uma imagem e duas ações

Quando o usuário clica em um dos botões de ação, seu PWA pode lidar com o clique ouvindo o notificationclick evento. Quando um notificationclick evento for recebido, feche a notificação e execute algum código:

self.addEventListener('notificationclick', event => {
    // Close the notification.
    event.notification.close();

    // React to the action.
    if (event.action === 'view-content') {
        console.log("view-content action was clicked");
    } else if (event.action === 'go-home') {
        console.log("go-home action was clicked");
    } else {
        console.log("main body of the notification was clicked");
    }
}, false);

Para saber mais sobre ações de notificação, consulte Notification.actions no MDN.