Para implemnetar a funcionalidade de adicionar um PWA à área de trabalho usando a interface beforeinstallprompt em uma aplicação Vue, é necessário configurar alguns elementos básicos inicialmente. Primeiro, crie um arquivo manifest.json na raiz do projeto com metadados essenciais, como nome da aplicação, ícones e configurações de exibição. Exemplo simplificado:
{
"nome_aplicativo": "Meu App",
"nome_curto": "App Curto",
"exibicao": "tela_cheia",
"cor_fundo": "#ffffff",
"cor_tema": "#333333",
"inicio_url": "/index.html",
"icone_principal": [
{
"caminho": "assets/icone-192.png",
"tamanho": "192x192",
"formato": "image/png"
},
{
"caminho": "assets/icone-512.png",
"tamanho": "512x512",
"formato": "image/png"
}
]
}
Em seguida, adicione as referências necessárias no cabeçalho HTML para vincular o manifesto e definir metadados relevantes: ```
O evento `beforeinstallprompt` é disparado pelo navegador quando detecta que o site atende aos critérios de instalação como PWA. Para utilizar esse evanto em JavaScript puro, adicione um botão oculto na interface e configure um ouvinte para capturar o evento. Ao interagir com o botão, chame o método `prompt()` do objeto do evento para exibir o diálogo de instalação. ```
<button id="instalar-app" style="display:none;">Instalar Aplicativo</button>
<script>
let eventoPrompt = null;
const botaoInstalar = document.getElementById('instalar-app');
window.addEventListener('beforeinstallprompt', (evento) => {
evento.preventDefault();
eventoPrompt = evento;
botaoInstalar.style.display = 'block';
});
botaoInstalar.addEventListener('click', async () => {
if (!eventoPrompt) return;
const resultado = await eventoPrompt.prompt();
console.log(`Resultado da instalação: ${resultado.outcome}`);
eventoPrompt = null;
botaoInstalar.style.display = 'none';
});
</script>
Em uma aplicação Vue, a lógica deve ser integrada nos hooks de ciclo de vida adequados. Para a API de Opções, utilize o hook created ou beforeMount para registrar o ouvinte do evento, pois o hook mounted pode não capturá-lo a tempo. Armazene o objeto do evento em uma propriedade reativa e controle a visibilidade do botão com base nisso. ```
<button v-if="mostrarBotaoInstalacao" @click="executarInstalacao">Adicionar à Área de Trabalho
Para a API de Composição (Vue 3), utilize refs e a função `onBeforeMount` para gerneciar o estado e o evento. Defina variáveis reativas para o evento e para a visibilidade do botão, e implemente funções para lidar com a instalação e a limpeza do estado. ```
<template>
<button v-if="exibirBotao" @click="iniciarInstalacao">Instalar como PWA</button>
</template>
<script setup>
import { ref, onBeforeMount } from 'vue';
const eventoPrompt = ref(null);
const exibirBotao = ref(false);
const iniciarInstalacao = async () => {
if (!eventoPrompt.value) return;
const resultado = await eventoPrompt.value.prompt();
console.log(`Status da instalação: ${resultado.outcome}`);
limparPrompt();
};
const limparPrompt = () => {
eventoPrompt.value = null;
exibirBotao.value = false;
};
onBeforeMount(() => {
window.addEventListener('beforeinstallprompt', (evento) => {
evento.preventDefault();
eventoPrompt.value = evento;
exibirBotao.value = true;
});
});
</script>