[3] プッシュメッセージ購読は、 利用者エージェントとプッシュサービスの間で確立されたメッセージ配送文脈であって、 アプリケーションサーバーと共有されるものです。 プッシュメッセージはすべてあるプッシュメッセージ購読と関連付けられています。 >>2 1.1. プッシュサービス資源により作成されます。
[74] プッシュ購読は、 利用者エージェントとプッシュサービスの間に、 Webアプリケーションにかわって確立されたメッセージ配送文脈です。 >>73
[4] プッシュメッセージ購読集合の要素です。
[5] RFC 8030 が message subscription、 subscription とだけ言っているものも、 プッシュメッセージ購読を意味すると思われます。
[125]
PushSubscription
インターフェイスは、
プッシュ購読を表します。
文書環境とワーカー環境に晒されます。
SecureContext
のみ利用可能です。
>>123
[134]
PushSubscription
インターフェイスの
getKey
メソッド >>123 は、
次のようにしなければなりません。
[159] PushEncryptionKeyName
は、
p256dh
か
auth
です。
>>123
[156] 鍵の取得は、 プッシュ購読、名前について、 次のようにします。 >>123
[131]
PushSubscription
インターフェイスの
options
属性の取得器は、
次のようにしなければなりません >>123。
[114]
PushSubscriptionOptions
インターフェイスは、
文書環境とワーカー環境に晒されています。
SecureContext
のみ利用可能です。
>>113
対応する辞書
PushSubscriptionOptionsInit
>>118
があります。
PushSubscriptionOptionsInit
はプッシュ購読の追加のオプションを表します >>118。
利用者エージェントは、
利用者に express permission
を求める時にこれを考慮できます >>118, >>105。
考慮するオプションについては、
プッシュメッセージ受信時にこれを適用するべきです
>>118。
プッシュ購読作成後にオプションを変更する方法はなく、
unsubscribe
して subscribe
しなおすほかありません >>118。
[122] 利用者エージェントのオプションへの対応は任意選択です。 対応しないオプションは晒してはなりません >>118。
[116]
PushSubscriptionOptions
インターフェイスの
userVisibleOnly
属性の取得器 >>113 は、
次のようにしなければなりません。
[119]
PushSubscriptionOptionsInit
辞書の
userVisibleOnly
は、
boolean
で、既定値は偽です。
>>118
[120]
userVisible
が真のとき、
当該プッシュ購読は、
利用者に表示されるプッシュメッセージのみに使われることを表します。
利用者に表示とは、例えば
Web Notification のようなものをいいます。
>>118
偽のとき、そうとは限らないことを表します。
プッシュメッセージを表示といっても、
その内容がそのまま
Webブラウザーにより自動的に表示されるのではなく、
アプリケーションが適宜処理する必要はあります。
[152]
PushSubscription
インターフェイスの
toJSON
メソッドは、
次のようにしなければなりません。
>>123
[32] プッシュメッセージ購読集合は、 利用者エージェントとプッシュサービスの間で確立されるメッセージ配送文脈であって、 複数のプッシュメッセージ購読を集めて集合としたものです。 >>2 1.1.
[33] RFC は「subscription set」と省略して表記することもあるようです。
[34] プッシュメッセージ購読を集めて集合化することで、 プッシュサービスと利用者エージェントにとって効率化できます。 >>2 4.1.
[35] プッシュサービス資源を使ったプッシュメッセージ購読作成時に、 利用者エージェントは要求でプッシュメッセージ購読集合を指定し、 そこに作成したプッシュメッセージ購読を所属させることができます。
[36] プッシュサービス資源を使ったプッシュメッセージ購読作成時に、 プッシュサービスは応答でプッシュメッセージ購読集合を示すことができます。
[8] まず、利用者エージェントは、 新しいプッシュメッセージ購読を作成します。 >>2 2. 作成にはプッシュサービス資源を使います。
[13] 作成したプッシュメッセージ購読は、 アプリケーション依存の方法で、 アプリケーションサーバーへ配布します。 >>2 2., 4. 特にプッシュ資源の URL の配布は、 秘密の保護や、アプリケーションサーバーの認証を講じて漏らさないようにしなければなりません。 >>2 4.
[9] アプリケーションサーバーは、 プッシュメッセージ購読に対し、 プッシュ資源を使って、 利用者エージェントに配送するプッシュメッセージを、 プッシュサービスへと送信します。 >>2 2., 2.1., 5.
[10] 利用者エージェントは、 プッシュメッセージ購読を使って、 到着プッシュメッセージがないかプッシュサービスを監視します。 >>2 2.
[11] プッシュメッセージ購読はアプリケーションに、 1対1で配布して使うことが期待されています。 しかしこれはプロトコル上の制約ではなく、 1つのアプリケーションが複数のプッシュメッセージ購読を作ることもできますし、 複数のアプリケーションが1つのプッシュメッセージ購読を共有することもできます。 ただ、共有するとセキュリティーやプライバシーの問題になりかねないことには要注意です。 >>2 2.
[18] プッシュ購読は、
プッシュエンドポイント >>77
を持ちます。
プッシュ資源
(リンク関係型 urn:ietf:params:push
) >>2 2.
と呼ばれるのも同じものです。
(資源はエンドポイントと実質同じ意味の IETF 語です。厳密にはそれぞれを参照。)
[16] プッシュ資源はプッシュ購読と1対1対応関係があり >>2 2.1.、 プッシュサービス資源がプッシュ購読を作成したとき、 同時にプッシュサービス上に作成されます。 プッシュ購読が削除されるとき、同時に削除されます。
[76]
プッシュエンドポイント (プッシュ資源の URL) は、
プッシュサービスが晒した絶対URLであって、
アプリケーションサーバーがプッシュメッセージの送信先とできるものでなければなりません。
プッシュエンドポイントは、
プッシュ購読を固有に識別するものでなければなりません。
>>77
https:
URL でなければなりません。
[59] プライバシーのため、 プッシュエンドポイントは特定利用者エージェントへの通信と関係付けられるものであってはなりません。 利用者や装置に関する情報を含めてはなりません。 複数のプッシュエンドポイントから相互の関係を知れるものであってはなりません。 同じ利用者エージェントのプッシュエンドポイントから利用者エージェントとの関係を知れるものであってはなりません。 >>2 8.2. 非活性化済みのプッシュエンドポイントを再利用してはなりません >>105。
[127]
PushSubscription
インターフェイスの
endpoint
属性の取得器は、
次のようにしなければなりません
>>123。
USVString
です。[19] プッシュエンドポイントは次のように使われます。
POST
要求を送信します。
>>2 2., 2.1.
[26] プッシュエンドポイントの URL の実例 (実例を基にした架空の例)
https://android.googleapis.com/gcm/send/dxUydhng19o:ARAkukSNm67R9rk4XiNJf5WsXegtNRGZWuToMsOfCyJx8L0E1Q9mTSbbHr5OidZHeEtpTvbXd9qL5UY4fbNJ800oZCRigNtZUrdVrG8iuWIyNKviWkoc-F54KnFtje_z4eLtifaa1aH6
https://fcm.googleapis.com/fcm/send/a76z3yHPgwJ:APAOflhvo4lNXLCjSDBdXqacUUxQQ5AsgklIf91bHVzfabs64TLUVglBmb1f9TPZ2WpRGJXvhvnrkIyGUwr0-gn8ilZW0Zk0aB7eukV6icVOlWzSti2OwuKBy6_kuSEbP_piWWZ_fK0a
https://updates.push.services.mozilla.com/wpush/v1/xSsd66AAABXZW8_0Ug9RKAqVt8whjcTT5ls_WLIabvelYDIAGp7OIXHw61Ul5uCaxqxU2F9xCkTiZ220pe5kJuYNtsHREc-toyC849O6gNRFbUQz81SueZSOx4OPCMp7H-U1a7GvH7P6
https://updates.push.services.mozilla.com/wpush/v2/xW2OB6JH76gAAAAAgGwdqmCRdWx_JdM3AVDyobT38r8eKJgQFbaL_iR2hM2UrO96kyLmFWQb6eEkdM6OJain1Cr3MLH5cQ2OdlukkV1ZkGhINLPVGAiSa63sE8t8A_oxFa52dp_YfLCVtVBJgyjX-b0l3Z8wZGE6A84VfppcYwUSHpqwMNaOPke
https://sg2p.notify.windows.com/w/?token=BRxFrpp6w1ecDQYAAdCVf69xCTF7pB2P8eod9b83D3Ibg719zX7FATNOJ8uwlGhGmrH3VwmCNPVnj70yR4GxodG9zv97uxPmoyfAtvdH%2b5DhdcLVI59yAAkM698usDNiSimulLAsQNqC4gy61lrWtM8cIHbU9kZ6qr%2fV2IcVplUFqQa8%2bvA5KQAX8R7xXXPT5nrj0NF8JMAJM8b%2bBJH2XQ7S1iFVNvlr5P1sXmA9Q7vyHc0hERz%2fopXtDHxTMXS92slcezjhKe2ybGshO2JiIoy%2f6pVzkTrhGUvwZveHJ0GN1BstGepEy7qr0D8j0kiljnSvadr1hxoGQMn%2f8wkU%2bg%2fTXvf%2b
https://par02p.notify.windows.com/w/?token=BRxFrpp6w1ecDQYAAdCVf69xCTF7pB2P8eod9b83D3Ibg719zX7FATNOJ8uwlGhGmrH3VwmCNPVnj70yR4GxodG9zv97uxPmoyfAtvdH%2b5DhdcLVI59yAAkM698usDNiSimulLAsQNqC4gy61lrWtM8cIHbU9kZ6qr%2fV2IcVplUFqQa8%2bvA5KQAX8R7xXXPT5nrj0NF8JMAJM8b%2bBJH2XQ7S1iFVNvlr5P1sXmA9Q7vyHc0hERz%2fopXtDHxTMXS92slcezjhKe2ybGshO2JiIoy%2f6pVzkTrhGUvwZveHJ0GN1BstGepEy7qr0D8j0kiljnSvadr1hxoGQMn%2f8wkU%2bg%2fTXvf%2b
[6] 購読資源、 プッシュメッセージ購読資源は、 プッシュメッセージ購読からプッシュメッセージを受信したり、 プッシュメッセージ購読を削除したりするため使います。 >>2 2., 2.1. 利用者エージェントにのみ使えるものです。 >>2 2.1.
[37]
プッシュメッセージ購読集合資源
(リンク関係型 urn:ietf:params:push:set
)
は、
プッシュメッセージ購読の集成に対する読み取りや削除のアクセスを提供します。
利用者エージェントは、
集合中すべてのプッシュメッセージ購読のプッシュメッセージを受信できます。
>>2 2.1.
[21] プッシュメッセージ購読資源はプッシュ資源と1対1対応関係を持ちます。 >>2 2.1. プッシュメッセージ購読集合資源は、 利用者エージェント単位で複数のプッシュメッセージ購読資源を集約したようなものです。
[22] プッシュメッセージ購読資源とプッシュメッセージ購読集合資源は、 次のように使われます。
GET
要求を送信します。
DELETE
要求を送信します。
[112]
アプリケーションは、
subscribe
メソッドによって新しいプッシュ購読を作成できます。
既に作成済みの場合、
subscribe
メソッドや
getSubscription
メソッドによって、
プッシュ購読を取得できます。
[25] プッシュ購読を使って、
プッシュメッセージを送信したり、
受信したりできます。
[89] プッシュ購読やプッシュメッセージ購読集合は、 無効化されることがあります。 満期 (寿命到来) による場合、 利用者エージェントの指示による場合 (>>55)、 その他プッシュサービスの事情による場合があり得ます。 >>2 2., 7.3., 7.3.1.
[56] プッシュメッセージ購読が満期になったり削除されたりした場合、 プッシュメッセージ購読集合からも削除しなければなりません。 >>2 7.3.1.
[57] プッシュメッセージ購読集合が満期になったり削除されたりした場合、 所属するプッシュメッセージ購読もすべて満期・削除しなければなりません。 >>2 7.3.1.
[12] 利用者エージェントやアプリケーションサーバーは、 これに対応する準備が必要です。 >>2 2., 7.3.
[88] プッシュ購読は、 購読満期時刻 を持つことができます。 その場合、 ミリ秒Unix timeであって、 プッシュ購読が非活性化される時刻を表すものでなければなりません。 >>78
[129] PushSubscription
の
expirationTime
属性の取得器は、
次のようにしなければなりません
>>123。
DOMTimeStamp
です。
なければ null
を返します。[55]
利用者エージェントは、
プッシュメッセージ購読資源に
DELETE
要求を送信して、
削除を要求できます
>>2 7.3.。
その場合所属するプッシュメッセージ購読集合からも削除されます。
同様にプッシュメッセージ購読集合資源に
DELETE
要求を送信して、
削除を要求できます
>>2 7.3.1.。
その場合所属するすべてのプッシュメッセージ購読が同時に削除されます。
[91] 利用者エージェントやプッシュサービスは、 いつでも、例えば一定時間経過後、 プッシュ購読を更新することができます。 >>90
[99] 利用者エージェントは、 プッシュ購読を更新できない場合、 定期的にこれを再試行するべきです。 >>90
[79] 利用者エージェントは、 プッシュ購読の購読満期時刻の到来前に、 プッシュ購読の更新を試みるべきです。 >>78
[92] 利用者エージェントは、旧プッシュ購読の更新時、 次のようにしなければなりません。 >>90
options
について、
プッシュ購読を作成した結果に設定します。
非同期的に待ちます。pushsubscriptionchange
イベントを発火します。[97] アプリケーションサーバーの移行を待つべく、 しばらく旧プッシュ購読を受け付け続けて構いません。
[100] 利用者エージェントは、 満期その他の理由でプッシュ購読プッシュ購読が最早利用できないとき、 次のようにしなければなりません。 >>90
pushsubscriptionchange
イベントを発火します。null
[106]
利用者は permission を失効できます。
pushsubscriptionchange
イベントを発火して構いません。null
[139]
PushSubscription
インターフェイスの
unsubscribe
メソッドは、
次のようにしなければなりません >>123。
[145] 非同期的に、 次のようにしなければなりません >>123。
[102] 利用者エージェントやプッシュサービスは、 プッシュ購読が非活性化されたとき、 その詳細情報を削除しなければなりません。 >>103 それ以後当該プッシュ購読に対するプッシュメッセージを配送してはなりません。 >>103, >>123
[150] 利用者エージェントは、 プッシュサービスに対するプッシュ購読の非活性化の要求が失敗した時、 十分な時間再試行するべきです。 >>123
unsubscribe
の場合にのみこれを規定していますが、
それ以外の事由でもそうなるべきはずです。[104] サービスワーカー登録が登録解除されたとき、 プッシュ購読は非活性化しなければなりません >>105。 それより早く非活性化しても構いません。 >>103
[31]
pushsubscriptionchange
イベントは、
プッシュ購読がアプリケーションの預かり知らぬところで変更されたことを示します。
>>160
[163]
ServiceWorkerGlobalScope
インターフェイスの
onpushsubscriptionchange
属性は、
イベントハンドラーIDL属性です。
>>160
[38]
pushsubscriptionchange
イベントを発火するには、
サービスワーカー登録登録、
プッシュ購読または null
旧購読、
プッシュ購読または null
新購読について、
次のようにしなければなりません。
>>160
[40]
PushSubscriptionEvent
インターフェイスは、
ExtendableEvent
インターフェイスを継承したイベントインターフェイスです。
サービスワーカー環境に晒され、
SecureContext
でのみ利用可能です。
イベントコンストラクターがあります。
PushSubscriptionEventInit
辞書は、
PushSubscriptionEvent
インターフェイスに対応する辞書で、
ExtendableEventInit
を継承しています。
>>160
PushSubscriptionEvent
インターフェイスメンバー, PushSubscriptionEventInit
辞書メンバー[42]
PushSubscriptionEvent
インターフェイスの
oldSubscription
属性の取得器 >>160 は、
次のようにしなければなりません。
oldSubscription
を返します。
PushSubscription
または
null
です。 >>160[44]
PushSubscriptionEventInit
の
oldSubscription
は、
PushSubscription
または
null
です。
既定値は
null
です。
>>160
[48] oldSubscription
で指定された PushSubscription
は、それ以上使うべきではありません。
データベース破損など利用者エージェントが詳細を提供できないとき、
null
となることがあります。
>>160
[45]
PushSubscriptionEvent
インターフェイスの
newSubscription
属性の取得器 >>160 は、
次のようにしなければなりません。
newSubscription
を返します。
PushSubscription
または
null
です。 >>160[47]
PushSubscriptionEventInit
の
newSubscription
は、
PushSubscription
または
null
です。
既定値は
null
です。
>>160
[82] 利用者エージェントは、 プッシュ購読プッシュ購読について、 何らかの理由で鍵を変更せざるを得ないとき、 次のようにしなければなりません。 >>73
pushsubscriptionchange
イベントを発火します。[1] Define exposure of the Push API interfaces (beverloo著, ) https://github.com/w3c/push-api/commit/350ee328178b1635f141412831892b16cb711305
aes128gcm
を使わない場合も一応想定されているので、 仕様書の記述はここで示したものより抽象的な形になっています。 すなわち、非対称鍵ペアなら公開鍵を直列化したもの、 対称鍵ならそれを直列化したもので、 該当なければnull
です >>123。 秘密鍵にアクセスする方法はありません。