A API Push Messaging permite enviar notificações para um usuário mesmo quando o navegador está fechado. Muitos desenvolvedores querem poder usar essa mensagem para atualizar e sincronizar conteúdo sem abrir o navegador, mas a API uma restrição importante: você deve sempre exibir uma notificação para cada uma única mensagem push recebida.
Enviar uma mensagem push para sincronizar dados no dispositivo de um usuário ou ocultar uma notificação mostrada anteriormente pode ser extremamente útil para usuários e desenvolvedores, mas permitir que um app da Web funcione em segundo plano sem que o usuário saber está aberto a abusos.
Com a API Budget, é uma nova API projetada para permitir que os desenvolvedores realizem trabalhos em segundo plano limitados sem notificar o usuário, por exemplo, no envio silencioso ou na execução de um segundo plano buscar. No Chrome 60 e superior, você poderá usar essa API e a A equipe do Chrome está ansiosa para receber feedback dos desenvolvedores.
Para permitir que os desenvolvedores consumam os recursos de um usuário em segundo plano, os recursos da Web plataforma está introduzindo o conceito de orçamento usando a nova API Budget. Cada site receberá uma quantidade de recursos com base no engajamento do usuário pode consumir para ações em segundo plano, como um push silencioso, em que cada operação esgota o orçamento. Quando o se o orçamento for gasto, as ações em segundo plano não poderão mais ser realizadas sem usuários visibilidade. O user agent será responsável por determinar o orçamento atribuído a um aplicativo da Web com base em sua heurística, por exemplo, uma cota de orçamento pode estar vinculada ao engajamento do usuário. Cada navegador pode definir sua própria heurística.
Texto longo, leia o resumo: a API Budget permite reservar e usar o orçamento, além de conseguir uma lista do orçamento restante e entender o custo das operações em segundo plano
Reservando o orçamento
No Chrome 60 e em versões mais recentes, o método navigator.budget.reserve()
estará disponível
sem sinalizações.
O método reserve()
permite solicitar um orçamento para uma operação específica e
ele retornará um booleano para indicar se o orçamento pode ser reservado. Se
o orçamento foi reservado, não é necessário notificar o usuário sobre seu plano de fundo
funcionam.
No exemplo das notificações push, você pode tentar reservar um orçamento para um
"envio silencioso" operação e se reserve()
for resolvido com verdadeiro, a operação será
permitido. Caso contrário, ele vai retornar "false", e você vai precisar mostrar uma notificação
self.addEventListener('push', event => {
const promiseChain = navigator.budget.reserve('silent-push')
.then((reserved) => {
if (reserved) {
// No need to show a notification.
return;
}
// Not enough budget is available, must show a notification.
return registration.showNotification(...);
});
event.waitUntil(promiseChain);
});
No Chrome 60, "envio silencioso" é o único tipo de operação disponíveis, mas também é possível encontrar lista completa de tipos de operação na especificação. Além disso, não há uma maneira fácil de aumentar seu orçamento para testes ou depuração. após a utilização, mas como solução temporária, é possível criar uma nova no Chrome. Infelizmente, não é possível usar o modo de navegação anônima para isso, porque a opção "Orçamento" a API retornará um valor de zero na navegação anônima (embora haja bug que resulta em erro durante meus testes).
Chame reserve()
apenas quando tiver a intenção de realizar a operação
reservando em algum momento no futuro. Se você chamou a reserva no
acima, mas ainda tiver exibido uma notificação, o orçamento ainda será usado.
Um caso de uso comum que não é ativado apenas pelo reserve()
é a capacidade de
agendar um push silencioso de um back-end. A API Budget não tem APIs para permitir
esse caso de uso, mas eles ainda estão sendo resolvidos no Chrome e estão
disponível apenas com flags e / ou um teste de origem.
Testes de origem e API Budget
Há dois métodos, getBudget()
e getCost()
, que podem ser usados por um app da Web
para planejar o uso do orçamento.
No Chrome 60, esses dois métodos estarão disponíveis se você se inscrever no teste de origem caso contrário, para testes, é possível usá-los localmente ativando o Recursos experimentais da plataforma Web flag (Abra chrome://flags/#enable-experimental-web-platform-features na Chrome).
Vamos conferir como usar essas APIs.
Receba seu orçamento
É possível encontrar o orçamento disponível com o método getBudget()
. Alguns navegadores
(como o Chrome) terão "redução" no orçamento com o tempo, por isso, para ter
A visibilidade retorna uma matriz de BudgetStates
, que indica seu orçamento
serão feitas em vários momentos no futuro.
Para listar as entradas de orçamento, podemos executar:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
A primeira entrada será seu orçamento atual, e os valores adicionais serão exibidos qual será o seu orçamento em vários pontos no futuro.
At 'Mon Jun 05 2017 12:47:20' you will have a budget of '3'.
At 'Fri Jun 09 2017 10:42:57' you will have a budget of '2'.
At 'Fri Jun 09 2017 12:31:09' you will have a budget of '1'.
Um dos benefícios de incluir futuros benefícios orçamentários é que os desenvolvedores podem compartilham essas informações com o back-end para adaptar o comportamento do lado do servidor (Por exemplo, só envie uma mensagem push para acionar uma atualização quando o cliente tiver orçamento disponível para um empurrão silencioso).
Obter o custo de uma operação
Para descobrir o custo de uma operação, chamar getCost()
retornará uma
número que indica o valor máximo do orçamento que será consumido se você ligar
reserve()
para essa operação.
Por exemplo, podemos descobrir o custo de não mostrar uma notificação quando você recebem uma mensagem push (ou seja, o custo de um push silencioso), com as seguintes código:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
No momento em que este artigo for escrito, o Chrome 60 imprimirá:
Cost of silent push is: 2
Algo a destacar com os métodos reserve()
e getCost()
é que o
o custo real de uma operação pode ser menor que o custo retornado por getCost()
.
Você ainda poderá reservar uma operação se o orçamento atual for menor.
que o custo indicado. Os detalhes específicos da especificação são
segue:
Essa é a API atual no Chrome e, à medida que a Web continua a suportar novas APIs, que exigem a capacidade de realizar trabalho em segundo plano, como busca em segundo plano, a API Budget pode ser usada para gerenciar o número de operações que você pode realizar sem notificar o usuário.
Ao usar a API, envie feedback no repositório do GitHub (link em inglês). ou registre bugs do Chrome em crbug.com.