この記事は、 Bluesky Advent Calendar 2023 の 10 日目の記事 カスタムフィードのゲームへの応用〜迷路フィードの実装顛末記〜の追記です。
Henoya @henoya.com
Bluesky公式クライアントのフィードジェネレータへのアクセス挙動の変更 #
この記事 カスタムフィードのゲームへの応用〜迷路フィードの実装顛末記〜を書いて公開した直後くらいに、Bluesky公式クライアント v1.59 が公開されました。
最初は気づかなかったのですが、カスタムフィード(というかフィードジェネレータ)への公式クライアントからのアクセスが変更されたようで、この記事のフィードに対するアクセスで選択肢を判定するという動作が正常に働かなくなりました。
これまでの挙動 #
- カスタムフィードのURLへのリンクを踏むと、そのフィードの読み込み処理が1回実行され、フィードの表示が更新される
- フィードジェネレーターへのパラメータとして、1画面分のポストに相当する limit=30 という30件までのポストリストを返すようにというリクエストが送られてきました。
- カスタムフィードの更新は、画面下にスクロールした場合は、フィードジェネレーターの返却情報として cursor を何かしら設定していれば、その cursor がパラメータとして付いて、続きの表示を返すようにリクエストされる。
- カスタムフィード自体に、新しいポストが追加されても、通知はおこなわれず、フィード画面を下に引っ張って更新すると、再度表示リクエストが送られ、新規表示となる。
新しい挙動 #
- 最初のカスタムフィードへのアクセス時
- これまでと同様に、そのフィードの読み込み処理が1回実行され、フィードの表示が更新される。 limit=30 というパラメータが付く
- その後、(おそらく新規ポストがないかどうかのチェックのため)定期的に、limit=1 という一件だけ取得するリクエストが送られてくる。
- この limit=1 のリクエストに対して、以前と違うポストを返すと、新規ポストありとして、更新ボタンが表示される。
- この動作は、他のフィードを表示してもバックグラウンドでおこなわれる
- 一度表示したカスタムフィードへのリンクは、2回目を踏んでも、そのフィード画面がクライアント内で再表示されるだけで、フィードジェネレータにはリクエストは送られない。
- この時点で、当初の期待していたフィードのリンクを踏むと、表示が更新されるという動作が起きない
- フィード画面を下に引っ張って更新すると、フィードジェネレーターへ limit=30 というアクセスがくる
- このレスポンスとして cursor を設定すると、続きがあると判定されて、複数回 cursor パラメータ付きの limit=30 リクエストがくる
公式クライアント(アプリ版Web版共通)の作りとして、
- カスタムフィードを含めた各画面は、最初の表示の時に表示する内容が構成される。
- 他の画面やフィードに切り替えても、メモリ中にその構成(DOMというとわかるひとはわかるでしょう)が残っている。
- 他の画面から一度表示した画面の戻ったときは、前に表示したDOMが残っていて、特に更新する必要がなければ、そのまま再表示する。
現在のところ、フィードジェネレーターへのリクエストは、
- limit=1 のリクエストは、新規更新がないタイプのカスタムフィードの場合(内容が固定のタイプ)は、同じ内容を1ポスト分だけ返すと良さそう。
- limit=30 のリクエストは、真面目に返す。
- cursor は、適当な(nowなどの値)を返すと、続きがあると見なされるので、真面目に返した方がいい。
フィードジェネレーターへのアクセスが、リンクアクセスによるものなのか、更新によるものなのか判別できない。
この挙動は、v1.59 時点のものなので、今後変更される可能性はあります。
特に、limit=1 のリクエストで新規更新が有りと判断された場合は、将来的には、そのフィードに切り替えた時に更新がかかる可能性もあります。