Push Messaging API を使用すると、ユーザーがリクエストまたは ブラウザが閉じられます。多くのデベロッパーは、このメッセージを使用して、 ブラウザを開かずにコンテンツを更新、同期できますが、 重要な制限が 1 つあります。1 つの重要な制限は、通知を表示するたびに 単一のプッシュ メッセージを受信します。
プッシュ メッセージを送信して、ユーザーのデバイス上のデータを同期したり、非表示にしたりできる 以前に表示した通知はユーザーにとって非常に有益で ウェブアプリはバックグラウンドで動作できるようにする一方で、 不正行為の可能性があると判断できます。
Budget API は、デベロッパーが限定的なバックグラウンド処理を実行できるようにするために設計された新しい API です。 サイレント プッシュやバックグラウンド実行など、ユーザーに通知することなく 取得しますChrome 60 以降では、この API と Chrome チームではデベロッパーの皆様からのフィードバックをお待ちしています。
開発者がユーザーのリソースをバックグラウンドで消費できるように、 で導入され、新しい Budget API を使った予算のコンセプトが導入されました。各 サイトにアクセスしたユーザー エンゲージメントに応じて一定量のリソースが バックグラウンド アクション、 たとえばサイレント プッシュでは、各オペレーションでバジェットが枯渇します。Google 予算を使い切ると、バックグラウンド処理はユーザーなしでは実行できなくなります 可視化。ユーザー エージェントが予算の決定を担当します。 ウェブアプリに割り当てられるリソースです。 ユーザーエンゲージメントに 結び付く可能性があります各ブラウザが独自のヒューリスティックを決定できます。
要約 Budget API を使用すると、予算の予約、予算の使用、リストの取得が可能 バックグラウンド処理のコストを把握する
予算を予約しています
Chrome 60 以降では、navigator.budget.reserve()
メソッドを使用可能
指定する必要があります。
reserve()
メソッドを使用すると、特定のオペレーションの予算をリクエストできます。
予算が予約可能かどうかを示すブール値が返されます条件
予算が予約されている場合は、ユーザーにバックグラウンドを通知する必要はありません。
説明します。
プッシュ通知の例では、
「サイレント プッシュ」reserve()
が true で解決された場合、オペレーションは実行されます。
できます。そうでない場合は false が返されます。この場合は、通知を表示する必要があります。
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);
});
Chrome 60 の「サイレント プッシュ」これが唯一のオペレーション タイプで、 確認できますが、 仕様のオペレーション タイプの完全なリスト。 また、テストやデバッグの予算を増やす簡単な方法もない 使用しても意味はありませんが、一時的な回避策として、新しい ID プロバイダを 。残念なことに、この質問にもシークレット モードで予算を使うことはできません。 シークレット モードでは、API は予算 0 を返します(ただし、 エラーの原因となる 。
reserve()
は、実行する操作を実行する場合にのみ呼び出す
予測することを思い出してくださいなお、
上の例で通知が表示されている場合、予算は引き続き使用されます。
reserve()
だけでは実現できない一般的なユースケースの一つとして、
バックエンドからのサイレント push をスケジュールします。Budget API には、この API を有効にするための API が
Chrome での取り組みが進行中で
フラグやオリジン トライアルでのみ利用可能です。
Budget API とオリジン トライアル
ウェブアプリで使用できるメソッドは getBudget()
と getCost()
の 2 つです。
予算の消化状況をプランニングします
Chrome 60 では、オリジン トライアルにお申し込みいただくと、両方の方法を使用できます。 それ以外の場合は、テストのために ウェブ プラットフォームの試験運用版機能 フラグ(chrome://flags/#enable-experimental-web-platform-features を Chrome)。
これらの API の使用方法を見てみましょう。
予算を確認する
使用可能な予算は getBudget()
メソッドで確認できます。一部のブラウザ
(Chrome など)予算が「減衰」する時間の経過とともに入れ替わるため、
visibility は、BudgetStates
の配列を返します。これは、予算
今後さまざまな状況になると予想されます
予算エントリを一覧表示するには、次のコマンドを実行します。
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
最初のエントリは現在の予算で、追加の値が表示されます。 将来のさまざまな時点での予算の見積り
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'.
将来的な予算の余裕を持たせるメリットの 1 つは、デベロッパーが この情報をバックエンドと共有して、サーバー側の動作を適応させる (つまり、クライアントに予算がある場合のみ、プッシュ メッセージを送信して更新をトリガーする) (サイレント プッシュ)です。
オペレーションの費用の取得
オペレーションの費用を確認するには、getCost()
を呼び出すと
これは、API 呼び出しで消費される最大予算額を示す数値です。
そのオペレーションの reserve()
。
たとえば、通知を表示しなかった場合に発生する費用は、 プッシュ メッセージ(サイレント プッシュのコスト)を受信し、 コード:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
本ガイドの執筆時点では、Chrome 60 では以下の内容が出力されます。
Cost of silent push is: 2
reserve()
メソッドと getCost()
メソッドに関して注意すべき点は、
オペレーションの実際の費用は、getCost()
で返される費用より低くなることがあります。
現在の予算がそれより少ない場合でも、オペレーションを予約できる可能性があります
を超える可能性があります仕様の具体的な詳細については、
フォローできます。
これは Chrome の現在の API であり、ウェブでは新しい API のサポートが続いています。 バックグラウンド処理(バックグラウンド取得など)が必要なアプリケーションの場合、Budget API を使用して ユーザーに通知せずに実行できるオペレーションの数を管理する。
API を使用する際は、GitHub リポジトリでフィードバックをお寄せください。 crbug.com で Chrome のバグを報告してください。