AppleのiPhoneでGmailを使う場合、色々な方法でセットアップすることができます。そこで、次に挙げる2つの観点でいくつかの方法を比較してみました。
- 通知のリアルタイム性(メール到着からiPhoneに通知が来るまでの時間の短さ)
- 省エネ性(いかにバッテリー消費を節約できるか)
私なりの結論は、Googleが提供しているiOS向け「Gmail」アプリをメインで使用しつつ、標準の「メール」アプリで1時間おきにメールを受信する構成がベストとなりました。以下、私が調べて分かったことなどを記しておきます。
なお技術的には、ここでの「iPhone」は「iOS 6」と読み替えるとより正確です。
はじめに
私はiPhoneを購入するよりも前から、携帯電話用のメールアドレスとしてGmailを使ってきました。すると携帯電話のメール(以後、ケータイメール)と同等の機能が欲しくなってきます。ケータイメールの優れた機能の中でも、とりわけ私が魅力を感じるのはメール到着をリアルタイムに通知してもらえる機能、いわゆる「プッシュ通知」です。また、携帯電話で使うのですからバッテリー消費量への影響も気になります。仮に、通知のリアルタイム性を完璧に実現する代わりにバッテリが3時間しか持たなくなる方法があったとしても、使いたくはありませんからね 😉
ということで、通知のリアルタイム性を追求しつつ、バッテリー消費量がさほど増加しない方法を調べました。調査した方法は、以下の3種類です。
- 標準の「メール」アプリで「Gmail」アカウントとして使用
- 標準の「メール」アプリで「Exchange」アカウントとして使用
- Googleの「Gmail」アプリで使用
標準の「メール」アプリで「Gmail」アカウントとして使う
1つ目の方法は、iPhoneに標準でインストールされている「メール」アプリを使う方法で、かつメールアドレスを普通に「Gmail」のアカウントとして設定します。標準で使えますので、多くの方がこの方法で使われているのではないかと思います。
この方法では、技術的にはIMAP [1]と呼ばれる一般的なEmail用の規格でGmailを使うことになります(設定項目から推測)。実はIMAPでもプッシュ通知を実現する方法[2]は存在するのですが、残念ながら2013年5月現在のiPhoneでは対応していないようです。そのためiPhoneでこの設定を用いた場合、メール到着をリアルタイムに知ることはできず、一定間隔でメール到着を確認する形になります。
この方法では、リアルタイム性が低いと言わざるを得ません。しかし、省エネ性については非常に高いと考えて良いでしょう。何せ、メールが到着しようが何が起ころうが、設定された分数が経過するまで何もしないわけですから。なおメール到着を確認する間隔は15分、30分、60分のいずれかです。
以上より、省エネ性は高いと思われますが、通知のリアルタイム性が皆無に等しいため私的にはイマイチな方法です。
標準の「メール」アプリで「Exchange」アカウントとして使用
2つ目の方法は、iPhoneに標準でインストールされている「メール」アプリを使う方法なのですが、メールアドレスを「Microsoft Exchange」のアカウントとして登録する点が異なります。こちらはインターネット上で様々な方がプッシュ通知を実現するための方法として紹介されているため、この設定にされている方も多くいらっしゃると思います。なお、この方法はGoogleがサポートを停止しています。したがって基本的にこの方法は使えないと思ってください。
この方法では、技術的にはMicrosoftのActiveSync®という規格でGmailを使うことになります。現在ActiveSyncは携帯電話、パソコン、PDAなど様々な端末上のメールやスケジュールのデータを同期するために使われており、その機能を提供するサーバ製品で一番有名なものがMicrosoftのExchange Serverです。Exchange ServerにはDirect Push[3]という機能があり、これを使うとメール到着やスケジュール情報の更新などを各端末にプッシュ通知できます。iPhoneでも「Microsoft Exchange」のアカウントとしてメールアドレスを登録すれば、Direct Pushを利用できます。Direct Pushについては「余談」の章をご参照ください。
この方法ではリアルタイム性が非常に高くなります。その一方で、省エネ性については若干不利だと思われます。まずMicrosoftの文書で技術的概要[3]を読む限り本仕様の処理効率は高いと思います。しかしこの規格には接続を維持しなければならないというポイントがあるため、電波状況が悪いと頻繁にメールサーバとの接続が切断され、再接続を繰り返す必要が出てくると想定されます。さらにActiveSyncでは接続時の処理負荷が比較的高いHTTPS接続を使うため、接続の頻繁なリトライはバッテリーの保ちへの悪影響はあるだろうと考えています。あくまで予想でしかありませんが、ネット上でちらほら見かける「バッテリの保ちが悪くなる人もいる」という話は、電波状況などが絡んで起こっている話なのかもしれないと思います。
以上より、この方法では高いリアルタイム性を確保することができますが、省エネ性は低めであると考えるべきでしょう(電波状況が悪いとなおさら)。
Googleの「Gmail」アプリで使用
3つ目の方法は、GoogleがiPhone向けに提供しているGmailというその名の通りのアプリを使う方法です。無料のアプリであり、ラベルなどのGmail独自機能も使用でき、かつ何と言っても「Google製」ですので存在を知った方の多くはインストールした方も多いのではないかと思います。ただ2011年9月リリース(iPhone 4Sのリリースが2011年10月)と比較的新しいアプリであるため使い方が確立してしまった古参ユーザは知らないままかもしれません。また、知っていてもユーザインタフェースがiOS的でない点に違和感を覚えて使わない方もいらっしゃるかもしれません。
技術的にはこの方法、私には何を使っているか分かりません。ただし一般的なIMAPなどのプロトコルではGmail独自の機能は使えませんので、おそらく独自の通信プロトコルを使っているのだろうと思います。技術的詳細が不明ですので「私が作るなら」という開発者的視点から特性を推測しますと、まずメール到着の通知には絶対Apple Push Notification Service[4](以後APNs、詳細後述)を使うでしょう。また、通知以外の部分はIMAP等をパクれば良いのでIMAPと同じ程度には効率的な仕様になります。ということで、負荷という観点では通知はAPNs、その他はIMAPと同等、と仮定して話を続けていきます。
APNsを使えば、メール到着の通知をリアルタイムに届けられます。また省エネ性も高いと考えられます。というのも、単独でプロトコル仕様を比較すればAPNsとDirect Pushは電波障害時の再接続処理の負荷という同じ問題が出て来るはずです。しかしAPNs用のHTTPS接続は「すべてのアプリで共用する」ため、通知センターでプッシュ通知を受け取るアプリを一つでも使っていれば追加コストはゼロです。そして標準状態でいくつかのプッシュ通知がONになっていますから、メールアカウント設定の違いによる影響は無いと考え、省エネ性を高いと判断しています。
以上より、この方法ではリアルタイム性は非常に高く、省エネ性も非常に高いと考えられます。
まとめ
GmailをiPhoneで使う場合で、通知のリアルタイム性と省エネ性の2点を重視した場合、両方に優れているGoogleのGmailアプリを使う方法が最善な選択肢だと思います。ただし、Gmailアプリは2013年5月現在、オフラインでのメール閲覧機能がありません(過去一定期間のメールをiPhoneにダウンロードすることでインターネットにアクセスできない環境でも読めるようにする機能が無い)。そのため、平時はGmailアプリを使うようにしておくと同時に、標準の「メール」でも一時間おきにメールを受信するように設定して(できればさらに通知センターには該当メアドに関する通知を一切出さないよう設定して)、電波の届かない緊急時(?)のメール確認を可能にしておくのが良いと思います。
余談
APNsはまさにその名の通りプッシュ通知を実現するためのサービスです。技術的詳細はAppleの技術資料[4]を参照してください。以下、仕組みをGmailに絞って乱暴に記します。まずGmailのサーバはメール到着を検出すると、APNsのサーバに「このメールアカウントを使っているGmailアプリに到着を知らせてくれ」とメッセージを送信します。続いてAPNsのサーバは該当するGmailアプリをリストアップし、それらがインストールされているiOSデバイス上で動作している通知サービス(daemon)へ「そのデバイスにインストールされているGmailアプリにこの通知を届けてくれ」とメッセージを送信します。デバイス上の通知サービスは、受信したデータからメッセージの文面を取り出して通知センターに登録し、通知が完了します。ここで、Gmailアプリ宛に行われた通知だというのにGmailアプリが出てこないのがポイントです。もしGmailアプリが通知処理に関わっていると、Gmailアプリが起動していなければ通知を受けられませんし、バックグラウンドに回って強制的にアプリがスリープしてしまっても通知を受けられません。APNsは、通知処理からアプリをあえて切り離すことでアプリの起動状態に関する制限を克服しています。何とも優れた仕様だと思います。なおAPNsの「Android版」はGoogle Cloud Messagingです。ざっと調べた限りはAPNsとまったく同じですね。
Direct Pushの技術的概要は[3]を参照ください。乱暴に記すと、まずクライアントがExchange ServerにHTTPS接続を行うと、サーバ・クライアント双方は接続を切断せず維持し続けます。その後メールの到着があるとサーバからクライアントにそれを知らせる応答メッセージが返信され、クライアントは通常のメール受信処理に入ります。もし接続後にメール到着が無いまま15分が経過したら、サーバ側から「メールの到着は無かった」という意味の返信を行い、それを受けたクライアントは一度接続を切断して、再び接続して応答待ちの状態に入ります。接続の維持には永続的接続 (HTTP Persistent Connection) を使用し、応答待ち状態では通信が発生しないので原則的には処理コストがゼロです。しかし先に記した通り、接続が強制的に切断されれば再接続せざるを得ませんから、電話状況が悪い場合は重くなるかもしれません。
また、関連技術ということでIMAP IDLEについても調査しました。結論としてはDirect Pushと大差ありません。Direct Pushでは接続をリフレッシュするために15分ごとに再接続が必要になりますが、IMAP IDLEでは29分に一回です(ともに標準値)。それ以外では、アーキテクチャがウリ二つですから、処理効率も同じでしょう。
GMAILアプリは通知のプレビューを消す方法が無いので、セキュリティ的にアウトです。
何かいい方法は無いですかね…
なるほど、確かに消せないですね…。とりあえずフィードバックしておきました。アプリ側でしか対応できないので、対応されることを祈りましょうか…