【问题标题】:How to be made aware of incoming emails on GMail without frequent polling?如何在不频繁轮询的情况下了解 GMail 上的传入电子邮件?
【发布时间】:2023-03-28 23:30:01
【问题描述】:

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

更新:

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

【问题讨论】:

  • 是否可以设置一个轮询服务器,然后使用例如 GCM 将其推送到设备?
  • 投票结束。服务器端解决方案已经出来了。手机本机电子邮件工具已经出局。你考虑过量子计算吗?
  • 感谢您的建议,但这是我的标准:1- 没有可能导致应用程序失败的外部依赖项(邮件服务器本身除外) 2- 不存储用户的数据或将其发送到其他地方(用户不如果他们无法看到和控制的服务器端组件可以读取他们的邮箱,他们会感到不舒服。他们拥有的应用程序的通信可以由他们控制/限制。) 3- 不锁定 GMail 或任何其他邮件服务器(主要电子邮件在 Yahoo 上的 Android 用户怎么样?)

标签: java android oauth gmail gmail-imap


【解决方案1】:

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

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

在您的 ContentObserver 中覆盖 onChange 以在 GMail 中的某些内容发生更改时执行某些操作。

【讨论】:

  • 这不是一个选项,因为我不使用手机的默认帐户。
【解决方案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

您需要运行额外的服务器端代码才能执行此操作。

【讨论】:

  • 这很好,但我宁愿不涉及服务器端组件以保持简单。
【解决方案3】:

由于 IMAP 本身提供任何类型的推送通知,而 Google extensions 也不提供,因此您必须自己实现它。

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

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

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

【讨论】:

  • 谢谢,我会仔细研究您所说的选项。你能详细说明一下“connection('trickle')”部分吗?
  • 我的意思是“挠痒痒”。请参阅更新的答案,但它基本上是一个始终打开(如果可能)的 TCP 连接。不过,它是 Google 的专有扩展,因此没有关于实际实现的真实文档。
  • 我建议不要尝试实现自己的推送服务。根据我们的经验,美国运营商可以通过防火墙干扰服务器发起的基于套接字的通信。设备 IP 在 3G、4G、WiFi 上也非常动态,您需要跟踪这些变化。
  • 看起来我将继续使用 IDLE(或 GCM,取决于身份验证机制)。作为一个用户,我对允许网络服务阅读我的收件箱感到不舒服。
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多