AndroidのGCMでニコ生アラートを受信してみる
ニコニコ生放送の通知が携帯のキャリアメールにしか届かないので Android で受け取る方法を調べてみた。
ニコ生アラート API
PCアプリ用のニコニコのサーバから生放送開始を受け取る WebAPI があるようです。
ざっくり説明すると
- http://live.nicovideo.jp/api/getalertinfo でサーバの IPアドレス と ポート番号 が XML で取れる。
- IPアドレス:ポート番号 に生ソケットで繋げて リクエストXML を1つ投げると生放送の開始が XML で落ちてくる。
- a) ソケットは繋ぎっぱなしで生放送の開始は PUSH で落ちてくる。
- b) ログインしても全放送の開始が PUSH されてくる。
- https://secure.nicovideo.jp/secure/login?site=nicolive_antenna でログインして
- http://live.nicovideo.jp/api/getalertstatus でユーザの参加コミュニティを取ってくる。
- 2 で PUSH されてくるデータを自前でフィルタリング。
となります。
ここで問題が1つ発生。
全放送の情報が落ちてくると10件/秒くらいのペースとなり、
Android にバックグラウンド処理させるのは無理が有りすぎます。
実際、Google Play 上がっている非公式のニコ生アラートのアプリは電池があっという間に無くなるとコメントが入っていました。
サーバを使う
放送開始の受信はサーバで行うしか無いと言うのが結論です。
幸い、家には 24時間稼働の RasipberryPi
が有るのでここで受信とフィルタリングを行い必要な通知のみ
GCM メッセージで Android に送ります。
Android アプリは GCM メッセージを受信した時に Android の通知に変換するサービスだけとなるので電池を消耗しません。
実装してみる
得に技術的に新しい事はしていないのでソースの解説とかははしょります。
ソースのSVNだけ置いておきます。
- サーバ:https://kotemaru.googlecode.com/svn/trunk/NicoNamaAlert
- クライアント:https://kotemaru.googlecode.com/svn/trunk/androidNicoNamaAlert
新しいトピックとしては GCM のサーバがバグっていてアプリのアンインストールに 対応できていないことが分かりました。(2014年4月現在)
どういう事かと言うとAndroid側でアプリがアンインストールされてもサーバにそれが通知されない為、
自動でユーザ登録の削除等が行えません。
一度、修正されたようですがその後ロールバックされた状態のようです。
もう一つ、GCM のメッセージは大きく遅延する事が有るのが分かりました。 通常は数秒で届きますが時々数分の遅延が発生します。 最大20分の遅延を確認しています。
実行結果
ユーザ登録します。
ちゃんと参加中のコミュニティの生放送の通知が届きました。
タップすると生放送のURLを起動するのでニコ動の公式アプリがインストールされていればそのまま生放送が見れます。
試して見たい方用に野良ビルドのアプリを上げて置きます。(ご利用は自己責任で)
デフォルトの設定で我が家の RaspberryPi に接続されるのでサーバは不要です。
※アンインストール前には必ず登録解除を行ってください。
※サーバは予告無く停止する事が有ります。ご了承ください。
所感
iPhone のニコ動公式アプリでは通知がサポートされているようなので Android でもいずれサポートされると思いますが 取り合えず今必要だったので作ってみました。