ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

Boxcarのメール通知ダイアログ表示時に自動でメール受信するBoxcarPushFetcher

      2011/04/14

BoxcarのメールのPush Notification。
これが表示されたときにMail.appのメール受信が自動的に始まったら、と思ったことありませんか。

それを実現するのがBoxcarPushFetcherです。(続きは[MORE]から)

動作に必要な設定

2011.04.14追記

BoxcarPushFetcherは、BoxcarのPush Notificationの中からメールのPush Notificationを判別するために、ダイアログに表示される定型フォーマットのテキストを利用しています。

正常に動作させるためには、BoxcarのSettingsのメールの項目で、Alertのフォーマットを「Full Message」にする必要があります。

解説

BoxcarPushFetcherをインストールすると、BoxcarのメールのPush Notificationが到着するやいなや、Mail.appに設定されている全アカウントのメール受信処理を開始するようになります。
従って、次にMail.appを起動するときには、既に受信の終わったメールをすぐに読むことができるわけです。

Mail.appがバックグラウンドで起動していない場合の動作

メールの受信を開始するためにはMail.appがバックグラウンド(ないしはフォアグラウンド)で起動していないとなりません。
BoxcarPushFetcherは、基本的にMail.appをバックグラウンドで起動させておいて使うことを前提にしています。

Mail.appをバックグラウンドで常時起動させるには、「設定>メール/連絡先/カレンダー>データの取得方法」のプッシュないしはフェッチのいずれかを有効にする必要があります。

プッシュ、フェッチの両方をオフにしておくと、Mail.appは自動的に起動することはありません。
この場合の動作を二つ選べます。

Launch Mail Anywhereがオフ(デフォルト)

デフォルトではMail.appがバックグラウンドで起動していない状態でメール受信告知ダイアログが表示された場合、ロック中のみMail.appを起動して、メールの受信を開始します。ロック中でなければ、ただメール受信告知ダイアログが表示されるだけで終わります。

Launch Mail Anywhereがオン

「設定>BoxcarPushFetcher」に「Launch Mail Anywhere」というオプションがあります。

 

これをオンにすると、ロック中でなくともメール受信告知ダイアログが表示されるやいなやMail.appを起動して、メールの受信を開始します。
メール受信告知ダイアログが表示されたのが例えばゲーム中だった場合、Mail.appがいきなり割り込んできてゲームを中断させられることになります。

一番いいのはメールが届いたときに最前面のアプリケーションを中断しないようMail.appをバックグラウンドで起動させることですが、この方法が分からないので半端な二者択一になっているわけです。

こういう制約があるので、BoxcarPushFetcherは、基本的にMail.appがバックグラウンドで起動させておいて使うことを前提にしているのです。

使っているメールを全部Boxcarの転送アドレスに転送しておけば、1時間間隔のフェッチで十分ということになります。


想定質問: BoxcarPushFetcherを使うとバッテリの減りが早いのですが、バグですか?

BoxcarPushFetcherを使うことが即ちバッテリの消耗につながるわけではありません。
結果としてMail.appがどれだけの頻度でメール受信をすることになるか、それによってバッテリの消費度が決まります。

BoxcarPushFetcherに対して疑心暗鬼になっている人もいるかもしれませんので、仕組みを説明しましょう。

BoxcarPushFetcherのしくみ

BoxcarPushFetcherはPush Notification、そしてMail.appの動作を変更し、Push NotificationからMail.appにメッセージを送信できるようにします。

BoxcarPushFetcherというアプリケーションがどこかに新たに起動するというようなことはありません。
普段は何もしません。BoxcarのPush Notificationの着信時に初めて変化が現れます。

BoxcarPushFetcherによって改変されたPush Notificationは、自らの表示の直前でMail.appにメッセージを送信するべきかどうか判断します。

いろいろなPush Notificationの中からBoxcarによって呼び出されたものを判定し、さらにダイアログに表示されるメッセージのフォーマットからBoxcarのメールのPush Notificationであるかどうかを判定してMail.appにメッセージを送信しています。

Boxcarのメールなのか、Boxcarのそのほかのサービスなのかの判定は、非常に原始的な方法で実現しています。それはメッセージの中に「Mail From: 」と「Subject: 」が含まれているかどうか。こういった具合なので、判定を誤るケースもあるかもしれません。

Mail.appは、Push Notificationからのメッセージを受け取ると、メール受信処理を開始します。

仕組みとしては基本的にはこれだけです。

BoxcarPushFetcherでバッテリの消費は増えも減りもする

冒頭に述べた通り、最終的にMail.appがどれぐらいの頻度でメール受信処理をするか。それにかかっています。

本来であれば、BoxcarのPush Notification表示時に毎回Mail.appがメール受信処理を開始するというようなことはありませんから、その意味では増える傾向になるといえます。

一方で、BoxcarPushFetcherによって必要なときにだけメール受信処理をすればよくなるともいえ、頻繁なフェッチ、また一般的に電池を消費する傾向にあるプッシュに頼らなくてもよくなるため、それとのプラスマイナスで結果としてバッテリを消費しなくなることもあるでしょう。

逆に、Mail.appの設定でフェッチを最短の15分間隔、プッシュが有効なアカウントを設定した上でBoxcarPushFetcherを導入したら、メール受信処理の機会は単純にオンされるので、バッテリの消費は確実に増えるでしょう。

既知の不具合

  • 他のPush Notification系Tweakとの併用時に問題が出る可能性あり。

動作確認環境

  • iOS 4.2.1 (iPadでは動作未確認)

インストール

New野良リポジトリに置いておきました。

「BoxcarPushFetcher」で検索してください。

無保証です。

履歴

  • 0.3-1 2011.04.10 BoxcarのメールPush NotificationからMail.appに直接リダイレクトするように。またMail.appにリダイレクトした際、新規メールを開かないように
  • 0.2-1 2011.04.08 初版

 - iPhone, Jailbreak, ガジェット