2

Android アプリケーションを開発している場合、受信メールに関するほぼリアルタイムの通知を取得する最も現実的な方法は何ですか? プッシュのような仕組みはありますか? IMAP 接続を長時間保持できますか? それとも IDLE コマンドを使用しますか?
ユーザーは OAuth を介して GMail サービスを使用する権限があり、IMAP サーバーを狂ったようにポーリングしたくないと考えてください。

アップデート:

  • 電話に設定されている Google アカウントを使用していません。OAuth を使用してセットアップされた別のアカウントがあります。
  • アプリで IMAP/SMTP に接続するためにApache Commons Netを使用しています。これは IMAP 用の最低限のライブラリですが、IMAP コマンド/拡張機能を追加するように変更できる可能性があります。
4

3 に答える 3

3

ContentObserverを GMail に登録できます。GMail で何かが変更されるたびに、オブザーバーが呼び出されます。

contentResolver.registerContentObserver(Uri.parse("content://gmail-ls"), true, myContentObserver ); 

onChangeGMail で何かが変更されたときに何かを行うには、ContentObserver でオーバーライドします。

于 2012-10-19T02:15:17.900 に答える
2

Google Cloud Messaging(GCM)をチェックします:

http://developer.android.com/training/cloudsync/gcm.html

私の理解では、これはユーザーのGoogleアカウントを必要とせずに機能し、認証を処理できるようになります。

ここでチュートリアルを参照してください:

http://www.techrepublic.com/blog/app-builder/implementing-googles-cloud-to-device-messaging/428

ただし、これを行うには、追加のサーバー側コードを実行する必要があります。

于 2012-10-23T21:00:54.620 に答える
2

IMAP はあらゆる種類のプッシュ通知をネイティブに提供しますが、Google 拡張機能も提供しないため、自分で実装する必要があります。

1 つの方法はIDLEリクエストを使用することです。これは、ポーリングを行う安価な方法です。もちろん、アプリが常に実行されているとは期待できないため、バックグラウンド サービスを使用する必要があります。ただし、「常時オン」のサービスは Android のアンチパターンであり、バッテリーの消耗が早く、星 1 つが多くなる可能性があります。さらに、システムはいつでもそれを強制終了することを決定できます。もう 1 つの方法はAlarmManager、サービスを定期的に開始するために使用することですが、数秒ごとに開始するのも同様に悪いことです。つまり、基本的に振り出しに戻ります: ポーリングです。

もう 1 つの方法は、GCM または同様のサービスを使用してプッシュ通知を取得することです。これにはサーバーが必要であり、サーバーはユーザーの認証情報を持っている必要があります (これは問題になる可能性があります) が、開いた接続を維持し、毎秒 IDLE を送信することに関する実際の制約はありません。Android の場合一方で、プッシュを自分で実装したい場合は、通知を受け取るためにソケットを開いたままにしておく必要があります。システム アプリ (上記を参照) でない場合、これを行うのは非常に簡単ではないため、GCM から離れます。使用する接続はシステム (Google Services フレームワーク) によって管理され、通常のアプリではできないことを実行できます。また、既に存在するため、基本的に無料で入手できます。「くすぐり」と呼ばれる何かをするときに、小さなデータを受け取ります。これらは、ブロードキャスト、Google Play の更新などをトリガーします。

だから、あなたの選択をしてください。または、あきらめて、アカウントを登録し、GMail とそのラベルAndroid APIを使用します。

于 2012-10-24T06:07:39.113 に答える