2

如果我正在开发一个 Android 应用程序,获得关于收到电子邮件的近乎实时通知的最可行方法是什么?是否有类似推送的机制,或者我可以长时间保持我的 IMAP 连接,还是使用 IDLE 命令?
考虑到用户被授权通过 OAuth 使用 GMail 服务,我不想疯狂地轮询 IMAP 服务器。

更新:

  • 我没有使用手机配置的 Google 帐户。使用 OAuth 设置了另一个帐户。
  • 我在我的应用程序中使用Apache Commons Net连接到 IMAP/SMTP。它是 IMAP 的基本库,但我也许可以修改它以添加 IMAP 命令/扩展。
4

3 回答 3

3

您可以在 GMail 中注册一个ContentObserver,只要 GMail 中发生变化,就会调用观察者。

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

onChange当 GMail 中的某些内容发生更改时,在您的 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 扩展也不提供,因此您必须自己实现它。

一种方法是使用IDLE请求,这仍然是一种廉价的轮询方式。当然,您不能期望您的应用程序一直在运行,因此您需要使用后台服务。然而,“永远在线”服务在 Android 上是一种反模式,它会很快耗尽电池电量,并可能让您获得许多 1 星。此外,系统可能随时决定终止它。另一种选择是使用AlarmManager定期启动服务,但每隔几秒左右启动它同样糟糕。所以你基本上回到了第一点:轮询。

另一种方法是使用 GCM 或类似服务获取推送通知。这确实需要您拥有一个服务器,并且该服务器需要为用户提供身份验证信息(这可能是一个问题),但是在保持打开的连接和每秒发送 IDLE 等方面没有真正的限制。在 Android 上侧面,如果你想自己实现推送,你需要保持一个打开的套接字来获取通知。如果您不是系统应用程序(见上文),这不是很容易做到,所以离开 GCM。它使用的连接由系统(谷歌服务框架)管理,它可以做普通应用程序不能做的事情,而且你基本上可以免费获得它,因为它已经在那里了。当有事情要做时,它会接收小块数据,称为“tickles”。这些反过来又会触发广播、Google Play 更新等。

所以,任君挑选。或者干脆放弃,注册帐户并使用 GMail 及其标签Android API

于 2012-10-24T06:07:39.113 回答