HBFav 2.6、バックグラウンドフェッチによるタイムラインの自動更新
HBFav を 2.6 にバージョンアップしました。新機能としてタイムラインの自動更新機能を追加しました。
これまではタイムラインなどで新着記事を取得する場合、都度、手動で Pull to Refresh (引っ張って更新) を行う必要がありましたが、新しいバージョン 2.6 からはその必要がなくなります。ただし新ユーザーページ設定がオンの場合にのみ限り、本機能が有効になります。
我ながら、本機能でずいぶんと使い勝手が良くなったなあと思いました。特にプッシュ通知と併用すると、プッシュで配信されたエントリが HBFav を開いたときにはもう反映されるようになり、もはやネットワークの通信待ちすら発生しません。これは想像以上に快適で、あるエントリを読んでる間に配信されてきたブックマークもすぐにチェックできるので中毒性が増・・・ じゃなかった、とても便利です。
なお、プッシュが有効じゃなくても更新されるように配慮していますので、プッシュ通知は要らないなあという方もぜひ(新ユーザーページを有効にして)本機能をご利用くださいませ。
以下は新機能の詳細です。ちょっとややこしい所もあるので段階的に説明していきます。とりあえず使えればいいや、という方ははじめのセクションだけ参考にして下さい。
では、今後も HBFav をご贔屓に。気に入っていただけた方は Twitter でつぶやいたり App Store でレビューしたりすると、主に作者が喜びます。
新機能の概要がとりあえず知りたい方
- タイムライン、人気/新着エントリーが自動で更新されます。強制的に読み込みたい時以外、手動更新の必要がなくなります
- 本機能を利用する場合は以下の設定を行ってください
- はてなブックマーク本体で新ユーザーページに移行してください
- 且つ HBFav の設定から新ユーザーページを有効にしてください
- さらに iOS 7 を使っていて且つ HBFav のプッシュ通知を設定しているとより良い感じで自動更新が行われます
- HBFav のプッシュ通知については、設定方法含めこちら
はてなブックマーク本体で新ユーザーページが有効になっているユーザーにのみ有効な API を利用している都合上、自動更新にはこの設定が必須になります。
HBFav 側の設定は以下の画面です。
はてなブックマーク本体を旧ユーザーページのまま HBFav 側で本設定を行ってしまうと、タイムラインが正常に取得できませんのでご注意ください。
どんな契機にアップデートが行われるか等の仕様を知りたい方
基本、以下の契機にタイムラインの自動更新が行われます
- アプリをバックグラウンドから立ち上げたとき
- 他のアプリケーションから HBFav にアプリを切り替えたとき
- タイムラインに限り、アプリがフォアグラウンドでアクティブな場合は2分間に一回更新
更に、以下の条件でも自動更新が行われます
- iOS 7 でプッシュ通知を有効にしている場合は、プッシュ通知が着信した時
従って
- HBFav 2.6 を利用
- iOS 7 を利用
- 新ユーザーページ設定を有効
- プッシュ通知を設定
すると最も理想的な状態で自動更新が行われるようになります
タイムラインの更新にあたっては意図しない場面で勝手に画面が書き換えられてしまうことがないよう配慮しました。具体的には、新着の更新に当たってその時点で画面に表示していたブックマーク一覧を維持したまま画面外上方に新着ブックマークを挿入するようにしました。
なお、自分のブックマークだけは、自動更新に今のところ対応していません。
どうやって実現しているかを知りたい方
アプリの切り替え時の更新は、素直に iOS のアプリを切り替えた契機にタイムラインを更新するよう実装しています。2分に一回の更新も、タイマーでポーリングをしているだけです。
一方、プッシュ通知からの更新は、iOS 7 で新しく追加されたプッシュ通知からの Background Fetch 機能を利用して実現しています。
iOS 6 までは、アプリ内で何か特定の処理をバックグラウンドであらかじめ実行しておくという処理は実装が不可能だったのですが、iOS 7 からプッシュ通知を契機にしたバックグラウンドジョブの実行が可能になました。この新 API を使って、プッシュ通知が届いたタイミングでフィードを再取得し、新着ブックマークをタイムラインに挿し込むようにしています。
プッシュと iOS 7 を併用している場合にのみ限り、理想的な状態で更新が行われるのは以上が理由です。
はてなの中の方
Background Fetch にあたって、毎回フィード新着 25 件を取得してしまっているので since パラメータがあると嬉しいですね。あと、until パラメータの実装、とても助かってます。