Misskey: (API) /api/sw/unregister

Created on 30 Aug 2018  ·  5Comments  ·  Source: syuilo/misskey

プッシュ通知が不要になったら購読を解除したいですが、それに相当するAPIがまだありません


Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

✨Feature 🤖Service Worker 🧩API

Most helpful comment

そうですね、userIdとendpointだけ見て削除してもまあ困らないと思います。authやpublickeyを変えたい場合でも削除して再登録すればよいはずです。ただし(authやpublickeyが異なるなど)削除対象が複数になる場合がありえます。

All 5 comments

現在の購読状態を調べるAPIもありません。

アプリからはこんな感じの制御になってしまいます。

  • 購読が必要な場合、現在の購読状態が分からないので定期的に購読APIを呼びなおす。結果としてサーバは無駄にDBを更新する ただし userId、endpoint、auth、publickey が同じ既存の購読があればそれが使われ、新しく作られることはない。
  • 購読が不要になった場合、サーバがそれを知る方法は通知コールバックが410を返すことだけである。それまでサーバは通知を送り続ける。受け取った端末はスリープから起こされるが通知はアプリ内部のフィルタで除去される。結果としてクライアントとサーバはバッテリーと通信量を無駄に使う。 コールバックを待たずに明示的に解除する方法が欲しい。

SubwayTooterはendpoint URLにいくつかの情報を埋め込んでいるため、割と頻繁にendpoint URLが変化する。
それによりMisskeyサーバ上のプッシュ購読数が増える場合がある。
現状ではFCMのデバイストークンのリフレッシュにより アプリサーバからFCMへのリクエストが410を返すまで解決されない。

可能な対応:

  • Misskeyサーバに購読解除APIがあれば、アプリからそれを呼び出す
  • またはクライアントアプリがアプリサーバ上に状態を保持して、不要になったendpointへのアクセスに410を返す。

SubwayTooter 3.9.8 以降はhttps://github.com/tateisu/SubwayTooter/commit/df18fd6d3655043a9d3c9fff5671771c53720892
https://github.com/tateisu/PushToFCM/commit/63e6eb9bd8db5daa6596ab22c4e0be2fad936311 で、あるacctとFCM device ID の組み合わせに対して endpoint URL を一つだけアプリサーバに保持して、endpoint がマッチしない通知コールバックに対して410を返すようになった。

sw/unregisterのパラメータは

  • endpoint (required)

だけあれば足りそうですかね?

つまり
既知のendpointを指定されたら該当ユーザーの該当endpointを解除できる
全件解除は出来ない

そうですね、userIdとendpointだけ見て削除してもまあ困らないと思います。authやpublickeyを変えたい場合でも削除して再登録すればよいはずです。ただし(authやpublickeyが異なるなど)削除対象が複数になる場合がありえます。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

syuilo picture syuilo  ·  3Comments

tamaina picture tamaina  ·  3Comments

2vg picture 2vg  ·  3Comments

tamaina picture tamaina  ·  3Comments

tosuke picture tosuke  ·  3Comments