ログオフ時にすべてのプッシュサブスクリプションを削除しない

また、ユーザーがログアウトすると、すべてのプッシュサブスクリプションが削除されるようです。そのため、ユーザーが複数のデバイス(スマートフォン、ブラウザ、タブレット)でログインしている場合、そのうちの1つのデバイス/セッションからログアウトすると、他のデバイスのプッシュサブスクリプションも削除されて通知が届かなくなります。

これは、更新時にどのサブスクリプションを置換する必要があるか、およびログアウト時にどのサブスクリプションを削除すべきかを把握することに関連しているため、触れておきます。

「いいね!」 6

ええと、今日Metaからログアウトされて、ログインしたらあなたの投稿のプッシュ通知が来ましたね… ユーザーがログインを始めた場合のコードパスでのみ表示されるのでしょうか🤔

「いいね!」 6

ユーザーがフォーラムに戻ってきたり(またはログインしたり)すると、ブラウザのプッシュサブスクリプションが再送信され、再作成されます。しかし、ログアウトした場合はサブスクリプションが削除され、そのユーザーがそのデバイスからフォーラムにアクセスするまでプッシュ通知は配信されません。

これは、ログイン後にプッシュ通知を受け取ったとおっしゃっている内容と矛盾しません。

コード参照:

「いいね!」 6

なるほど、まさに私が疑っていた通りですね。

見つけたね!これは絶対に修正しないといけないね!

問題は、現在、特定のサブスクリプションがどのデバイスに紐付いているかを保存していないことだ…

「いいね!」 8

Push API には、プッシュサブスクリプションを無効化するための unsubscribe 関数が存在します:

ログアウト時にこれを呼び出す(クライアントサイドで)ことで、サーバー上のそのサブスクリプションを無効化し、他のサブスクリプションには影響を与えません。

実際、クライアントには「ライブ通知」設定でこれを行う unsubscribePushNotification 関数が既に存在します。解決策として、ライブ通知が有効な場合にログアウト時にこれをクライアントサイドで呼び出すことが考えられます。サーバーから単に削除するのではなく、クライアントサイドのサブスクリプションキーを無効化するのが良いプラクティスでしょう。

「いいね!」 2

つまり、修正は以下の 2 段階で行うことができます:

  1. サーバー側のクリーンアップコードを削除する
  2. クライアント側で購読を解除する新しいコードを追加する。
「いいね!」 5

完了しました

https://meta.discourse.org/t/ios-android-push-notifications-on-self-hosted-discourse-docker/394149/18?u=falco

「いいね!」 1

このトピックは 4 日後に自動的に閉鎖されました。新しい返信は許可されていません。