PushManager.getSubscription()
既存のプッシュ サブスクリプションを取得します。既存のサブスクリプションの詳細を含む PushSubscription オブジェクトに解決される Promise を返します。既存のサブスクリプションが存在しない場合、これは null 値に解決されます。
[...]
PushManager.subscribe()
プッシュ サービスにサブスクライブします。プッシュ サブスクリプションの詳細を含む PushSubscription オブジェクトに解決される Promise を返します。現在の Service Worker に既存のサブスクリプションがない場合は、新しいプッシュ サブスクリプションが作成されます。
pushManager
MDN のドキュメントによると。メソッドはほとんど同じですがgetSubcription()
、null 値で解決される可能性がある点が異なります。
私は基本的に、単に使用できることを理解してsubscribe()
おり、Service Worker は利用可能な場合はサブスクリプションを取得しようとし、利用できない場合は新しいサブスクリプションを作成します。
=>しかし、私は別のことをしようとしていました。null
I will try to subscribe itで解決した場合は、最初にサブスクリプションを取得してみます。
navigator.serviceWorker.register('./worker.js')
.then(function(reg) {
// Subscribe push manager
reg.pushManager.getSubscription()
.then(function(subscription) {
if(subscription){
// TODO... get the enpoint here
} else {
reg.pushManager.subscribe()
.then(function(sub){
// TODO... get the endpoint here
});
}
}, function(error) {
console.error(error);
})
});
しかし、その後、エラーが発生しました:
Uncaught (in promise) DOMException: サブスクリプションが失敗しました - アクティブな Service Worker がありません
紛らわしいので、これが Service Worker の Push API での Chrome の制限であるか、バグである可能性があるのではないかと疑っています。この奇妙な振る舞いについて何か情報を持っている人はいますか?