ひとりぶろぐ

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

Push for GmailとMail.appを連動させるGmailPushFetcher

      2016/03/16

Push for GmailとMail.appを連動させるGmailPushFetcherというものを作ってみました。

下掲の動画は、Push for Gmailのダイアログが表示された瞬間、Mail.appで受信が始まっている瞬間を捉えています。Mail.appがバックグラウンド動作中でも動きます。

 

Gmailへの新着メールを知らせるPush Notificationが来たらMail.appで受信開始させたい

iOSのPush Notificationは、無くてはならない便利なものですが、機能的に少々物足りないと思わなくもありません。

特に、メール着信系のPush Notificationの場合、通知を出すぐらいなら、同時にメールを受信開始してほしいと思うはずです。

gmailpushfetcher-figure01.png

でも、Gmailの着信を知らせる何らかのPush Notification対応アプリケーションをインストールし、Push Notificationが着信しても、もちろんMail.appは受信開始しません。(続きは[MORE]から)

Push for Gmailってのがあります

Push for Gmail App
カテゴリ: 仕事効率化
価格: ¥230

gmailpushfetcher02.PNG

Push for Gmailというアプリケーションがあります。

現在、moyashiがGmailのPush Notification用に使っているものです。

これはもう、いつ買ったか忘れたぐらい、随分前に買いました。

このアプリケーションはモバイル版のGmailに機能を付加したようなもので、全体をWeb Viewが占めています。

最初にPush Notificationの設定をしたら、アプリケーションを起動することはありません。

しかし、Push Notificationは安定していて速く、Push Notification用としてはもう元を取りすぎているといえます。

「Gmailにメール来る→Push Notificationで通知」さえこなしてくれれば問題はないので、特に不満はありません。

App Storeで「Push Gmail」でググって見ましたが、現在でも有力な選択肢になりそうですかね。

GmailPushFetcherの働き

今回作ったGmailPushFetcherを導入するとどうなるでしょう? こうなります。

gmailpushfetcher-figure02.png

GmailPushFetcherを導入すると、Push for GmailのPush Notificationが着信した時点でMail.appが受信を開始するようになります。

基本的に、GmailPushFetcherのやることはこれだけ。

Push Notificationの表示時に、何のPush Notificationのダイアログなのかを判定して、Mail.appに受信開始の指令を送ります。

バッテリの持ちへのインパクトは、受信するメール数によります。
これまでのフェッチ回数より多くなるなら、バッテリの持ちは悪くなります。

GmailPushFetcherを導入すると、こんな効能も

また、GmailPushFetcherは Push Notificationのダイアログにある「View」ボタンを押したときの挙動も変更します。

gmailpushfetcher-figure03.png

普通は「View」を押すと、必ずPush for Gmailを起動します。

gmailpushfetcher03.PNG

設定「Mail Client」でリダイレクト先に「Mail App」を選んだ場合はPush for Gmailを経由してMail.appを起動します。

しかし、Mail.appをURL Schemeで起動した場合の仕様で必ず新規メールを開いてしまうので、この設定は実質使いものになりません。

これは他のメール受信Push Notification系のアプリケーションでも同じでしょう。

忸怩たるものがあります。

なぜ、なぜ二人の間にはこんなにも障害が!?

GmailPushFetcherを導入するとどうなるか?

gmailpushfetcher-figure04.png

Push for Gmailが出したPush Notificationのダイアログの「View」ボタンを押すと、Push for Gmailを経由せず、直接Mail.appを起動するようになります。

また、起動したMail.appが新規メールを開く動作も抑制しています。

こうなってはPush for Gmailの立場がありませんが、これなら使える!

設定

野良リポジトリからGmailPushFetcherをインストール後、「設定>メール/連絡先/カレンダー>データの取得方法>フェッチ」を「1時間ごと」に設定します。

gmailpushfetcher06.png gmailpushfetcher07.png

これは、Mail.appを常駐させておくための処置です。Mail.appを常駐させておかないとGmailPushFetcherは安定して機能しません。

「設定>メール/連絡先/カレンダー>データの取得方法>プッシュ」の方は「オフ」にしています。元々、GmailPushFetcherは、僕のプッシュ嫌いから作ったという経緯があります。

この設定に異存が無ければ、これで設定は終了です。もちろん、Push for Gmailの設定は別途済ませてくださいね。

折角のプッシュ受信なのに、何でフェッチをオンにしなきゃならないんだよ、という人のための設定

「設定>GmailPushFetcher」からGmailPushFetcherの設定ができます。

gmailpushfetcher08.png gmailpushfetcher09.PNG

唯一「Launch Mail Anywhere」という項目があります。

これは一体どういう意味でしょうか?

さきほど「これは、Mail.appを常駐させておくための処置です。Mail.appを常駐させておかないとGmailPushFetcherは機能しません」と書きましたが、「設定>メール/連絡先/カレンダー>データの取得方法」でプッシュもフェッチもオフにしていると、Mail.appが起動していない状態が発生します。

この状態ではもちろんMail.appにメールを受信開始させることができないので、GmailPushFetcherはMail.appの起動を試みます。

そのときの起動の仕方を決めるのがこの「Launch Mail Anywhere」です。

「Launch Mail Anywhere」がオンの状態でPush for GmailからのPush Notificationのダイアログが着信したら、構わずMail.appを起動します。

その結果、いきなりMail.appがムワっと前面に出てきて、その時に使っていたアプリケーションはバックグラウンドに回ります。

「Launch Mail Anywhere」をオフにしていた場合は、iPhoneを使用中、別の言い方をすればロック中でなければMail.appの起動をしません。Push for GmailのPush Notificationのダイアログが出てそれでおしまいとなります。

「Launch Mail Anywhere」がオンでもオフでも、ロック中にPush for GmailのPush Notificationが着信したときにはMail.appの起動を試みます。

しかし、パスコードロックをかけているとロック中でもMail.appの起動に失敗します。

Mail.appの起動に使っているAPIが、ロック中だとアンロックの動作を伴うからです。

かように、非常に大きな制約を伴うので、おとなしくフェッチをオンにしてください。設定できる最大のフェッチ間隔でいいです。

なぜこんな制約があるのか

Mail.appをフォアグラウンドに回さず、バックグラウンドのまま起動する方法が分からないからです。文句があるなら方法教えろ!

想定ツッコミ: ていうかそもそもGmailはプッシュ設定できるじゃん

GmailをExchangeとして設定するとプッシュ受信ができます。

しかし、これだと受信時の通知が地味で物足りないのです。

物足りないってか気づかない。

Fetchの間隔を長くした場合と比較して、電池が持たなくなるのもいただけません。

やっぱりGmailにもPush Notificationという結論になるので、Push Notificationの通知時に受信が開始されるのが一番いいことになります。

Push Notificationで受信が開始されるなら、GmailをExchangeとして設定する必要もまたなくなります。

動作確認環境

  • iOS 4.2.1

既知の不具合

  • 「折角のプッシュ受信なのに、何でフェッチをオンにしなきゃならないんだよ、という人のための設定」の項、「なぜこんな制約があるのか」の項を参照

履歴

  • 0.1-1 2011.05.21 初版

免責

GmailPushFetcherを使ったこと、使えなかったことによる一切の結果について、責任を負いません。

自己責任にてお使いください。

インストール

まず、

Push for Gmail App
カテゴリ: 仕事効率化
価格: ¥230

をインストールしてください。その上でGmailPushFetcherをインストールしてください。

New野良リポジトリに置いておきました。
「GmailPushFetcher」で検索してください。

 - iPhone, Jailbreak