L'API de messagerie push nous permet d'envoyer des notifications à un utilisateur même lorsque le navigateur est fermé. De nombreux développeurs souhaitent pouvoir utiliser cette messagerie pour : de mettre à jour et de synchroniser le contenu sans que le navigateur soit ouvert, mais que l'API une restriction importante: vous devez toujours afficher une notification pour chaque un seul message push reçu.
Être capable d'envoyer un message push pour synchroniser les données sur l'appareil d'un utilisateur ou masquer une notification que vous aviez précédemment affichée peut être extrêmement utile pour les utilisateurs et développeurs, mais en permettant à une application Web de travailler en arrière-plan sans l'utilisateur est ouverte aux abus.
L'API Budget est une nouvelle API conçue pour permettre aux développeurs d'effectuer des tâches limitées en arrière-plan. sans en avertir l'utilisateur (par exemple, un push silencieux ou une mise en arrière-plan) récupérer. Dans Chrome 60 et versions ultérieures, vous pourrez commencer à utiliser cette API et la L'équipe Chrome souhaite recevoir les commentaires des développeurs.
Pour permettre aux développeurs de consommer les ressources d'un utilisateur en arrière-plan, le Web plate-forme introduit le concept de budget à l'aide de la nouvelle API Budget. Chaque chaque site recevra une quantité de ressources basée sur l'engagement utilisateur qu'il peut utiliser pour les actions en arrière-plan, comme une transmission silencieuse, où chaque opération épuise le budget. Lorsque les actions en arrière-plan ne peuvent plus être effectuées visibilité. Le user-agent sera chargé de déterminer le budget attribuée à une application Web en fonction de son heuristique (par exemple, une marge budgétaire) peut être lié à l'engagement utilisateur. Chaque navigateur peut décider de sa propre heuristique.
Résumé : l'API Budget vous permet de réserver un budget, de l'utiliser et d'obtenir une liste du budget restant et comprendre le coût des opérations en arrière-plan
Réservation du budget
Dans Chrome 60 et versions ultérieures, la méthode navigator.budget.reserve()
sera disponible
sans aucun indicateur.
La méthode reserve()
vous permet de demander un budget pour une opération spécifique.
il renverra une valeur booléenne pour indiquer
si le budget peut être réservé. Si
le budget a été réservé, il n'est pas nécessaire d'informer l'utilisateur de votre arrière-plan.
travail.
Dans l'exemple des notifications push, vous pouvez tenter de réserver le budget
"push silencieuse" opération et si reserve()
est résolu avec "true", l'opération est
autorisé. Sinon, la valeur renvoyée est "false", et vous devez afficher une notification
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);
});
Dans Chrome 60, "silent-push" est le seul type d'opération disponibles, mais vous pouvez trouver liste complète des types d'opérations dans la spécification. Il n'existe pas non plus de moyen simple d'augmenter votre budget pour les tests ou le débogage. une fois utilisée, mais comme solution temporaire, vous pouvez créer une nouvelle profil dans Chrome. Malheureusement, vous ne pouvez pas non plus utiliser le mode navigation privée L'API renvoie un budget de zéro en mode navigation privée (même s'il existe un bug entraînant une erreur pendant mes tests).
Vous ne devez appeler reserve()
que si vous avez l'intention d'effectuer l'opération que vous souhaitez
réserver à un moment donné dans le futur. Notez que si vous avez appelé "reserve" dans
dans l'exemple ci-dessus, mais qu'une notification s'affiche, le budget sera quand même utilisé.
Un cas d'utilisation courant qui n'est pas possible uniquement avec reserve()
est la possibilité
planifier une transmission silencieuse à partir d'un backend. L'API Budget dispose d'API à activer
ce cas d'utilisation, mais ils sont encore en cours d'élaboration dans Chrome
n'est disponible qu'avec des options et / ou une phase d'évaluation.
API Budget et phases d'évaluation
Une application Web peut utiliser deux méthodes, getBudget()
et getCost()
,
pour planifier l'utilisation de son budget.
Dans Chrome 60, ces deux méthodes sont disponibles si vous vous inscrivez à la phase d'évaluation. Sinon, pour les tests, vous pouvez les utiliser localement en activant Fonctionnalités expérimentales de la plate-forme Web (Ouvrez chrome://flags/#enable-experimental-web-platform-features dans Chrome).
Voyons comment utiliser ces API.
Obtenir votre budget
Vous pouvez déterminer votre budget disponible à l'aide de la méthode getBudget()
. Certains navigateurs
(comme Chrome) portera un "budget avec dépréciation" au fil du temps, afin de vous donner
visibilité renvoie un tableau de BudgetStates
indiquant le montant de votre budget
aura lieu à différents
moments dans le futur.
Pour répertorier les entrées de budget, nous pouvons exécuter la commande suivante:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
La première entrée correspond à votre budget actuel, et des valeurs supplémentaires s'affichent. votre budget à différents moments dans le futur.
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'.
L'un des avantages d'inclure les futures allocations budgétaires est que les développeurs peuvent partagent ces informations avec leur backend pour adapter son comportement côté serveur Par exemple, n'envoyez un message push que pour déclencher une mise à jour lorsque le client dispose d'un budget. pour une poussée silencieuse).
Obtenir le coût d'une opération
Pour connaître le coût d'une opération, l'appel de getCost()
renvoie une
indiquant le montant maximal du budget qui sera utilisé si vous appelez
reserve()
pour cette opération.
Par exemple, nous pouvons connaître le coût de l'absence de notification lorsque vous recevoir un message push (c'est-à-dire le coût d'une transmission silencieuse), avec les éléments suivants : code:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
Au moment de la rédaction de ce document, Chrome 60 affichera:
Cost of silent push is: 2
Avec les méthodes reserve()
et getCost()
, il est important de souligner que
Le coût réel d'une opération peut être inférieur au coût renvoyé par getCost()
.
Vous pouvez toujours réserver une opération si votre budget actuel est inférieur.
que le coût indiqué. Les détails spécifiques de la spécification sont les suivants :
suit:
Il s'agit de l'API actuelle dans Chrome. Comme le Web continue d'accepter de nouvelles API qui nécessitent la possibilité d'effectuer des tâches en arrière-plan, telles que l'extraction en arrière-plan, l'API Budget permet de gérer le nombre d'opérations que vous pouvez effectuer sans avertir l'utilisateur.
N'hésitez pas à nous faire part de vos commentaires à mesure que vous utilisez l'API sur le dépôt GitHub. ou signalez des bugs Chrome sur crbug.com.