Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は、インストール済みウェブアプリケーション がアプリケーションバッジを設定できるAPIを定義します。アプリケーションバッジは通常、デバイスのホーム画面やアプリケーションドックでアプリのアイコンの隣に表示されます。
このセクションは、本書が公開された時点でのステータスを示します。現在の W3C の出版物一覧や、この技術レポートの最新改訂版は W3C 標準と草案のインデックスでご覧いただけます。
本仕様は作業途中です。
この文書は、Web Applications Working Group によって 勧告トラックを利用して作業草案として公開されました。
作業草案として公開されたことは、W3C およびその会員による支持を意味するものではありません。
この文書はドラフトであり、今後随時更新、差し替え、または廃止される可能性があります。進行中の作業以外として引用することは不適切です。
この文書は、 W3C 特許ポリシーのもとで運営されるグループによって作成されました。 W3C は 本グループによる特許開示の公開リスト を管理しており、そのページには特許を開示するための指示も含まれています。ある個人が、必要クレームを含むと認識する特許について事実を知っている場合は、W3C 特許ポリシー第6節に従い情報を開示しなければなりません。
この文書は 2025年8月18日 W3C プロセス文書に従って管理されています。
このセクションは規範的ではありません。
バッジは一部のユーザーに通知疲れを引き起こす可能性があります。そのため、 著者は本当にユーザーの注意やアクションを必要とする状態のみにバッジを使用し、 マーケティングやエンゲージメント目的の安易な利用は避けてください。
気を散らす要因や認知負荷を高めるような、頻繁に変化する値の表示は避けてください。
バッジを認知できない、あるいはシステムレベルでバッジを無効にしているユーザーをサポートするために、 著者は同じ状態をアプリケーションUI上にアクセシブルなパターン(例:明確にラベル付けされたアプリ内ステータス表示)で提示するよう推奨されます。
このセクションは規範的ではありません。
async function updateMailBadge() {
// APIがサポートされているか確認します。
if (!navigator.setAppBadge) return;
const unreadCount = await getUnreadMailCount();
// アプリバッジの設定を試みます。
try {
await navigator.setAppBadge(unreadCount);
} catch (e) {
// バッジがサポートされていない場合や、ユーザーがバッジ設定を拒否した場合
}
}
バッジはオペレーティングシステム上のアプリケーションのアイコンに表示される場合があります。同じアプリケーション内で複数回APIを使ってバッジを設定 またはクリアした場合、最新のものが有効となり、アプリケーションが閉じられた後でも表示が継続することがあります。
async function showPlayerTurn(playerTurnId) {
if (playerTurnId === localPlayerId)
await navigator.setAppBadge();
else
await navigator.clearAppBadge();
}
一部のオペレーティングシステムでは、バッジを設定するにはユーザーの許可が必要な場合があります。この場合、開発者は "notifications"
権限の状態を確認してからバッジを設定する必要があります。許可が与えられていない場合、開発者は
Notification
.requestPermission
()
を使って許可を求める必要があります。
async function checkPermission() {
permission = await navigator.permissions.query({
name: "notifications",
});
const button = document.getElementById("permission-button");
if (permission.state === "prompt") {
// ユーザーに許可を求めるダイアログを表示します。
button.hidden = false;
button.addEventListener("click", async () => {
await Notification.requestPermission();
checkPermission();
}, { once: true });
return;
}
button.hidden = true;
}
badgeは、インストール済みのWebアプリケーションが、ユーザーに注意を促す必要のある新しいアクティビティがあることを通知したり、未読数などの少量の情報を示すためのメカニズムとして意図されています。
badgeは、次のvaluesのいずれかを持つことができます。
0
より大きいことを示します。
インストール済みのウェブアプリケーションには、関連付けられたbadgeがあり、初期値は"nothing"です。オペレーティングシステムがバッジ値を保存・管理し、ユーザーエージェントがOSへのバッジ変更通知の仲介役を担います。
ユーザーエージェントは任意で(再)アプリケーションのバッジを "nothing"に設定してもよい(例えば、システムの慣例に従う場合など)。
アプリケーションのバッジが設定されている場合、ユーザーエージェントまたはオペレーティングシステムは推奨 アプリケーションのバッジを、ユーザーのオペレーティングシステム上のアプリケーションの主なアイコン表示と並べて表示するべきです(例: デバイスのホーム画面でアプリケーションのアイコン上に小さなオーバーレイとして表示するなど)。
ユーザーエージェントは任意でユーザーから明示的な許可を得て バッジを設定することができます。ユーザーエージェントがそのような 許可を必要とする場合は、 推奨として "通知"の許可と関連付けるべきです。
バッジが"flag"に設定されている場合、ユーザーエージェントまたはオペレーティングシステムは推奨として 非特定のシンボル(例: 色付きの円)でインジケーターを表示するべきです。プラットフォームが"flag"バッジの表示に対応していない場合、ユーザーエージェントは推奨として バッジの存在を示す最も近い表現(例: 値 "1" など)で表示し、バッジを完全にクリアしないことが望ましいです。
バッジの値が"nothing"に設定された場合、 ユーザーエージェントまたはオペレーティングシステムは 推奨としてクリアし、バッジの表示をやめるべきです。
バッジが数値に設定された場合、number、ユーザーエージェントまたはオペレーティングシステムは以下を行うべきです:
オペレーティングシステムごとにバッジ表示の能力は異なります。最終的な表示動作はOSによって制御され、ユーザー設定やシステム慣習によってさらに変更される場合があります。OSにバッジ情報を通知する際、ユーザーエージェントは推奨としてバッジ要求の意味的な意図を保持するべきです:
プラットフォームオブジェクト context のアプリケーションバッジを、オプションの unsigned long long
contents の値に設定するには、次の手順を実行します。
Window
オブジェクトの場合:
Document
とする。
InvalidStateError
"
DOMException
で返す。
SecurityError
" DOMException
で返す。
granted
"
でない場合、
グローバルタスクをキューし、
ユーザー操作タスクソース
global で promiseを拒否し、
NotAllowedError
でこのアルゴリズムを終了する。
undefined
を返す。
このAPIは設計上書き込み専用です。サイトが以前に設定したバッジの値を読み戻す方法はなく、アプリケーションバッジがストレージやフィンガープリント手段として利用されるのを防ぎます。
ユーザーエージェントやオペレーティングシステムは任意で バッジを クリアすることができ、 システムの慣例(例:システムリセット時)に従って行うことがあります。
ユーザーエージェントは、バッジの設定 やクリアをレート制限することができる(MAY)。これは、注意をそらすアニメーションを防ぎ、リソース使用量を低減するためです。しかし、ユーザーエージェントは一般的にレート制限をオペレーティングシステムに任せるべき(SHOULD)です。オペレーティングシステムの方が、システム負荷、ユーザー設定、アクセシビリティの観点から適切な制限を判断できるためです。
アプリケーションバッジは、ユーザーの注意を要するステータスを伝えます。 バッジはしばしばウェブコンテンツ領域外(たとえば、ドック内のアプリアイコン上など)で表示されるため、 ユーザーエージェントは、情報がプラットフォームのアクセシビリティ機能やユーザーの設定を通じて アクセス可能かつ制御可能な状態を保つ必要があります。
ユーザーエージェントは現在のvalue( "flag" と number の区別を含む)をプラットフォームのアクセシビリティAPI経由で公開し、 支援技術が必要に応じて(たとえば、ユーザーがアプリアイコンにフォーカスした際など)提示できるようにすべきです(SHOULD)。
ユーザーエージェントはバッジの変更を自動的に通知すべきではありません(SHOULD NOT)。 その代わり、予期しない中断を避けるためにプラットフォームの慣習に従うべきです(SHOULD)。
このセクションは規範的ではありません。
バッジは通常、基盤となるプラットフォームによって描画されるため、 視覚的な工夫も基本的にそこで対処されます。それでもなお、ユーザーエージェントやプラットフォームは次の点を考慮する必要があります:
ユーザーエージェントはプラットフォームのアクセシビリティ設定やテーマと統合すべきです(SHOULD)。
ユーザーエージェントはOSレベルのアプリごとのバッジ設定(たとえば、OSがアプリのバッジを無効化している場合など)を反映すべきです(SHOULD)。
非規範と明記されているセクションだけでなく、この仕様書のすべての著作ガイドライン、図、例、および注記も非規範です。それ以外の内容はすべて規範的です。
この文書中のキーワード MAY、MUST、MUST NOT、SHOULD、SHOULD NOT は、すべて大文字で記載されている場合に限り BCP 14 [RFC2119] および [RFC8174] の定義に従って解釈されます。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: