[6]
PushManager
の
subscribe
メソッドは、
次のようにしなければなりません。
>>5
[9] 非同期的に、次のようにしなければなりません。 >>5
[43]
PushManager
インターフェイスの
getSubscription
メソッドは、
次のようにしなければなりません。
>>42
[46] 非同期的に、次のようにしなければなりません。 >>42
[81]
利用者エージェントは、
プッシュ購読の作成を、
PushSubscriptionOptions
オプション群について、
次のようにしなければなりません。
>>73
[56] プッシュサービス資源の URL の決定については、 プッシュサービスの発見を参照。
[57] 利用者エージェントは、いつでも新しいプッシュメッセージ購読を作成できなければなりません。 >>1 8.2.
[58]
利用者エージェントは、
新しいプッシュメッセージ購読を作成する際、
プッシュサービス資源に
POST
要求を送信します。
>>1 4.
[16]
利用者エージェントは、
以前の要求に対する応答でプッシュメッセージ購読集合が指定されていたら、
要求にリンク関係型
urn:ietf:params:push:set
でこれを指定するべきです。
>>1 4.
Link:
HTTPヘッダーで記述できます。
[17] 利用者エージェントは、 プッシュメッセージ購読の寿命の間、 プッシュメッセージを集約して受信することができないなら、 プッシュメッセージ購読集合を省略して構いません。 利用者エージェントが他のプッシュメッセージ受信者のかわりにプッシュメッセージ購読を監視するような場合に、 その必要があるかもしれません。 >>1 4.1.
[71]
利用者エージェントは、
VAPID で制限されたプッシュメッセージ購読を作成したい場合、
公開鍵を指定します。
Content-Type:
は
MIME型
application/webpush-options+json
、
要求本体は
RFC 7159 JSONオブジェクトとします。
その
vapid
の値は、
公開鍵を
X9.62 uncompressed form
で
RFC 7515
base64url
符号化したものとします。
>>27
[70] プッシュサービス資源は、 プッシュメッセージ購読を作成します。 プッシュメッセージ購読資源とプッシュ資源が作成されます。 プッシュメッセージ購読集合を必要なら作成し (要求で指定されていればそれを選択し) て、 作成したプッシュメッセージ購読を追加します。
[19]
プッシュサービス資源は、
要求で指定されたプッシュメッセージ購読集合が非妥当なら、
400
応答を返さなければなりません。
>>1 4.1.
異なる利用者エージェント用のプッシュメッセージ購読集合が指定されるのは不適当でしょうし、
プッシュメッセージ購読集合でないものが指定された場合もそうでしょう。
[20]
プッシュサービス資源は、
プッシュメッセージ購読集合の指定のない要求を、
429
応答で拒絶して構いません。
>>1 4.1.
同じ利用者エージェントがいくつもプッシュメッセージ購読を作成し、
プッシュメッセージ購読集合にまとめられないのは不適当で不審な挙動と考えられます。
[69] 同じ利用者エージェントであるかどうかの判断方法は、 実装依存です。 >>1 4.1. 現在の Webブラウザーの配布形態は、 特別な利用者登録なしに自由に実行できるものとなっていますから、 事前交換情報に基づく認証による確実な識別ができません。 IPアドレスその他から推測することになりますが、 どの方法であれ確実とはいえません。 おそらく、 Webブラウザー依存の方法で利用者エージェントを識別する何らかの情報を Webブラウザー側で保持しておき、 これを毎回要求に追加して同一性判定に供することになるのでしょう。 プッシュサービスは任意の方法で認証できます >>1 8.3.。
[66]
application/webpush-options+json
以外の要求本体は、
無視しなければなりません。
>>27
[67]
application/webpush-options+json
要求本体のうち、
理解できない
JSONオブジェクトのメンバーは無視しなければなりません。
>>27
[68] 要求本体がJSONオブジェクトでないときどうするべきか不明です。
[64]
プッシュサービスは、
公開鍵を必須にできます。
201
応答を返します
>>1 4.。Location:
ヘッダーに、
作成されたプッシュメッセージ購読資源の URL
を指定しなければなりません。
>>1 4.urn:ietf:params:push
で記述しなければなりません。
>>1 4.
Link:
ヘッダーで記述できます。urn:ietf:params:push:set
で記述して構いません。
>>1 4.1.
Link:
ヘッダーで記述できます。[63] 本体については何ら規定がありません。 すべての情報は HTTPヘッダーで記述されるので、 省略し無視するのが適当と思われます。
[62]
プッシュサービスは、負荷対策のため他のサーバーに分散させられます。
利用者エージェントは、
307
応答に対応しなければなりません。
>>1 7.1.
明記されていませんが、
Location:
でリダイレクトされた URL
に POST
し直すことが期待されていると思われます。
同じ起源とは限らない (違うサーバーなので違う可能性も高い)
と思われますが、
任意の外部サーバーへのリダイレクトを認めてよいのか、
利用者エージェントの設計上注意が必要かもしれません。
[74] Chrome は違う
applicationServerKey
で既に subscribe 済みなら拒絶します・
[72] Chrome は
userVisibleOnly
が偽なら拒絶します。
[55]
Chrome でなぜか
subscribe
メソッドの Promise
が解決されなくなることがあります。
なぜか全然応答しなくなり、固まっているようにみえます。
通知の許可を変更したり、リセットしたりしても解決しません。
Chrome
を再起動するとあっさり治ります。