* 仕様書

[REFS[
- [62] [CITE@en-US[Push API]], [TIME[2020-02-04 16:21:34 +09:00]] <https://w3c.github.io/push-api/>
-- [63] [CITE@en-US[Push API]], [TIME[2020-02-04 16:21:34 +09:00]] <https://w3c.github.io/push-api/#dfn-web-push-protocol>
]REFS]

* プロトコル

[FIG(short list)[ [59] [[Web Push]]
- [[アプリケーション]]
- [[アプリケーションサーバー]]
- [[利用者エージェント]]
- [[プッシュサービス]]
- [[Web Push Protocol]]
- [CODE[aes128gcm]]
- [[VAPID]]
- [CODE[application/webpush-options+json]]
]FIG]

[64] [[Push API]] は[[利用者エージェント]]、
[[アプリケーションサーバー]]、
[[プッシュサービス]]の3者間の通信に
[[Web Push Protocol]]
を使うと規定しています。
他のプロトコルを使うこともできるとしており、
その場合[[意味論]]的に互換性のあることが期待されています。
[SRC[>>63]]
実際初期の [[Push API]] の実装は [[GCM]]
のような既存の[[独占的]]プロトコルが使われていました。

* API

[FIG(short list)[ [65] [[Push API]]
- [CODE[ServiceWorkerRegistration]]
- [CODE[PushManager]]
- [CODE[PushSubscription]]
- [CODE[PushEvent]]
- [CODE[PushMessageData]]
- [CODE[PushSubscriptionChangeEvent]]
]FIG]

* 実装

[16] [[Chrome]] と [[Firefox]] が対応しています。 (ただし[[プラットフォーム]]によっては未対応です。)

* 歴史

[60] [[スマートフォンアプリ]]では、
[[Apple]] ([[iOS]]) の [[APNs]]
や、
[[Google]] ([[Android]]) の [[GCM]] (後に [[FCM]])
で[[プッシュ通知]]が送信できるようになっていました。
[[Webアプリケーション]]も対応が期待されていました。

[61] [[Webプラットフォーム]]には既に [CODE[Notification]]
が追加されていましたが、これだけでは
[[Webブラウザー]]で開いているときにしか通知を表示できませんでした。

** Chrome の Push Notifications

[SEE[ [[GCM]] ]]

[13] [CITE@en[Chromium Blog: Reaching and re-engaging users on the mobile web]] ([TIME[2015-11-19 09:28:34 +09:00]] 版) <http://blog.chromium.org/2015/04/reaching-and-re-engaging-users-on.html>

[12] [CITE@en[Chromium Blog: Streamlining Notifications on Desktop]]
([TIME[2015-11-19 09:28:34 +09:00]] 版)
<http://blog.chromium.org/2015/10/streamlining-notifications-on-desktop.html>


** Push API

[1] [CITE@en[Push API]]
( ([TIME[2012-06-05 08:43:23 +09:00]] 版))
<http://dvcs.w3.org/hg/push/raw-file/default/index.html>

[2] [CITE@en[Push API]]
( ([TIME[2012-10-18 03:40:08 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-push-api-20121018/>

[3] [CITE@en-US[Push API Patent Advisory Group Charter]]
( ([TIME[2013-05-30 05:59:49 +09:00]] 版))
<http://www.w3.org/2013/03/push-pag-charter.html>

[4] [CITE@en[W3C Launches Patent Advisory Group for Push API]]
( ([[Ian Jacobs]] 著, [TIME[2013-05-30 06:03:44 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2013AprJun/0802.html>

[5] [CITE@en[Push API]]
( ([TIME[2013-08-14 23:07:07 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-push-api-20130815/>

[6] [CITE[IRC logs: freenode / #whatwg / 20131203]]
( ([TIME[2013-12-04 20:03:08 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20131203#l-704>

[7] [CITE[''''''[''''''dispatch'''''']'''''' Charter Proposal: Web Push]]
( ([TIME[2014-06-19 13:50:11 +09:00]] 版))
<http://www.ietf.org/mail-archive/web/dispatch/current/msg05560.html>

[8] [CITE@en[Push API]]
( ([TIME[2014-10-07 02:44:36 +09:00]] 版))
<http://www.w3.org/TR/2014/WD-push-api-20141007/>

[9] [CITE@en[Chromium Blog: Chrome 42 Beta: Push Notifications, Promoting Add to Home Screen and ES6 Classes]]
([TIME[2015-03-14 09:17:20 +09:00]] 版)
<http://blog.chromium.org/2015/03/chrome-42-beta-push-notifications_12.html>

[10] [CITE[Push Notifications on the Open Web | Web Updates - Google Developers]]
([TIME[2015-11-20 02:42:52 +09:00]] 版)
<https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web>

[11] [CITE@en-US[Using the Push API - Web APIs | MDN]]
([TIME[2015-10-26 16:40:17 +09:00]] 版)
<https://developer.mozilla.org/en/docs/Web/API/Push_API/Using_the_Push_API>


[18] [CITE@en[Google Chrome pushManager.subscribe does not return a subscription ID and hangs · Issue #94 · OneSignal/OneSignal-Website-SDK]]
( ([TIME[2016-10-21 12:21:34 +09:00]]))
<https://github.com/OneSignal/OneSignal-Website-SDK/issues/94#issuecomment-232448100>

[19] [CITE@en[623062 - PushManager.subscribe doesn't return a subscription id - chromium - Monorail]]
( ([TIME[2016-10-21 12:24:14 +09:00]]))
<https://bugs.chromium.org/p/chromium/issues/detail?id=623062>

[20] [CITE@en[New editor for Push API]]
([[Léonie Watson]]著, [TIME[2016-11-08 23:18:56 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2016OctDec/0025.html>

[21] [CITE@en[RFC 8030 - Generic Event Delivery Using HTTP Push]]
([TIME[2016-12-09 04:15:21 +09:00]])
<https://tools.ietf.org/html/rfc8030>

[22] [CITE[Web Push Parameters]]
([TIME[2016-12-13 03:16:02 +09:00]])
<https://www.iana.org/assignments/webpush-parameters/webpush-parameters.xhtml>

[23] [CITE@en-US[Push API]]
([TIME[2017-02-22 22:21:23 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170222/>

[24] [CITE@en-US[Push API]]
([TIME[2017-03-29 06:37:15 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170328/>

[25] [CITE@en-US[Push API]]
([TIME[2017-04-19 02:17:41 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170418/>

[26] [CITE@en[Re: Update on Push API]]
([[Peter Beverloo]]著, [TIME[2017-04-19 02:09:10 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2017AprJun/0036.html>

[27] [CITE@en-US[Push API]]
([TIME[2017-04-19 20:52:45 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170419/>

[28] [CITE@en-US[Push API]]
([TIME[2017-04-26 01:26:44 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170425/>

[29] [CITE@en-US[Push API]]
([TIME[2017-04-28 01:12:07 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170427/>

[30] [CITE@en[Requesting accessibility review of Push API]]
([[Léonie Watson]]著, [TIME[2017-05-03 23:28:55 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2017AprJun/0069.html>

[31] [CITE@en[Requesting i18n review of Push API]]
([[Léonie Watson]]著, [TIME[2017-05-03 23:30:11 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2017AprJun/0070.html>

[32] [CITE@en[Requesting TAG review of Push API]]
([[Léonie Watson]]著, [TIME[2017-05-03 23:36:38 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2017AprJun/0072.html>

[33] [CITE@en-US[Push API]]
([TIME[2017-05-04 06:55:32 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170503/>

[34] [CITE@en-US[Push API]]
([TIME[2017-05-09 01:27:57 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170508/>

[35] [CITE@en-US[Push API]]
([TIME[2017-06-23 01:58:17 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170622/>

[36] [CITE@en-US[Push API]]
([TIME[2017-06-23 20:29:08 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170623/>

[37] [CITE@en-US[Push API]]
([TIME[2017-07-06 00:08:53 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170705/>

[38] [CITE@en[Add note about single push service per user agent (#244)]]
([[msporny]]著, [TIME[2017-07-06 00:06:05 +09:00]])
<https://github.com/w3c/push-api/commit/bf31ea169766d15cef22e7d421c8cca396866c05>

[39] [CITE@en-US[Push API]]
([TIME[2017-08-14 08:48:10 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170813/>

[40] [CITE@en-US[Push API]]
([TIME[2017-08-22 09:26:38 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170822/>

[41] [CITE@en-US[Push API]]
([TIME[2017-08-23 09:15:15 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20170823/>

[42] [CITE@en-US[Push API]]
([TIME[2017-10-27 07:40:41 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20171026/>

[43] [CITE@en-US[Push API]]
([TIME[2017-12-16 08:41:47 +09:00]])
<https://www.w3.org/TR/2017/WD-push-api-20171215/>

[44] [CITE@en[Update on Push?]]
([[Léonie Watson]]著, [TIME[2018-04-11 22:59:42 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2018AprJun/0006.html>

[46] [CITE@en[RFC 8292 - Voluntary Application Server Identification (VAPID) for Web Push]]
([TIME[2018-12-23 23:07:53 +09:00]])
<https://tools.ietf.org/html/rfc8292>

[47] [CITE@en[RFC 8291 - Message Encryption for Web Push]]
([TIME[2018-12-30 17:45:08 +09:00]])
<https://tools.ietf.org/html/rfc8291>

[48] [CITE[RFC Errata Report » RFC Editor]]
([TIME[2019-01-03 21:50:40 +09:00]])
<https://www.rfc-editor.org/errata_search.php?rfc=8291>

[49] [CITE[ServiceWorker Cookbook]]
([TIME[2018-07-31 22:09:35 +09:00]])
<https://serviceworke.rs/>

[50] [CITE@ja[ウェブアプリへのプッシュ通知の追加  |  Web  |  Google Developers]]
([TIME[2018-07-17 09:28:45 +09:00]])
<https://developers.google.com/web/fundamentals/codelabs/push-notifications/?hl=ja>

[52] [CITE[Web Pushのサーバ認証VAPIDを試してみる (旧題: GCMの登録が不要になったChromeのWeb Pushを試してみる) - Qiita]]
([TIME[2019-01-04 10:20:51 +09:00]])
<https://qiita.com/tomoyukilabs/items/9346eb44b5a48b294762>

[55] [CITE@ja[ウェブアプリへのプッシュ通知の追加  |  Web  |  Google Developers]]
([TIME[2019-09-26 14:35:33 +09:00]])
<https://developers.google.com/web/fundamentals/codelabs/push-notifications/?hl=ja>

[56] [CITE@en[Introduction to Push Notifications  |  Web  |  Google Developers]]
([TIME[2019-09-26 14:43:26 +09:00]])
<https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications>

[57] [CITE@en[Web Push Interoperability Wins  |  Google Developers]]
([TIME[2019-06-27 10:21:42 +09:00]])
<https://developers.google.com/web/updates/2016/07/web-push-interop-wins>

[58] [CITE@ja[Firebase Cloud Messaging の HTTP プロトコル  |  Firebase]]
([TIME[2019-12-04 20:35:31 +09:00]])
<https://firebase.google.com/docs/cloud-messaging/http-server-ref>


[14] 送信先として登録される主要な[[起源]] (令和7年時点)

- [15] [CODE[https://fcm.googleapis.com]]
-[45] [CODE[https://android.googleapis.com]]
-[51] [CODE[https://updates.push.services.mozilla.com]]
-[17] [CODE[https://sg2p.notify.windows.com]]
-[53] [CODE[https://wns2-sg2p.notify.windows.com]]
-[54] [CODE[https://wns2-pn1p.notify.windows.com]]
-[66] [CODE[https://web.push.apple.com]]
