如果我正在开发Android应用程序,那么接收有关传入电子邮件的实时通知的最可行方法是什么?是否有推式机制,或者我可以长时间保持IMAP连接,还是使用IDLE命令?
考虑用户有权通过OAuth使用GMail服务,我不想疯狂地轮询IMAP服务器。
更新:
答案 0 :(得分:3)
你可以用GMail注册一个ContentObserver,只要GMail发生变化,就会调用观察者。
contentResolver.registerContentObserver(Uri.parse("content://gmail-ls"), true, myContentObserver );
覆盖您的ContentObserver中的onChange
,以便在GMail中的内容发生变化时执行操作。
答案 1 :(得分: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
您需要运行其他服务器端代码才能执行此操作。
答案 2 :(得分:2)
由于IMAP本身提供任何类型的推送通知,而Google extensions也没有,因此您必须自己实现。
一种方法是使用IDLE
请求,这仍然是一种廉价的轮询方式。当然,您不能指望您的应用始终在运行,因此您需要使用后台服务。然而,“永远在线”服务是Android上的一种反模式,可以快速耗尽电池,并可能为您带来许多1星级。此外,系统可以决定随时杀死它。另一种方法是使用AlarmManager
定期启动服务,但每隔几秒左右启动一次也同样糟糕。所以你基本上回到原点:民意调查。
另一种方法是使用GCM或类似服务获取推送通知。这确实需要你有一个服务器,服务器需要有用户的身份验证信息(这可能是一个问题),但是没有关于保持打开连接和每秒发送IDLE的真正限制,等等。在Android上另外,如果你想自己实现推送,你需要保持一个打开的套接字来获取通知。如果您不是系统应用程序(见上文),这不是很容易做到的,所以离开GCM。它使用的连接由系统(Google服务框架)管理,它可以做常规应用程序无法做到的事情,你基本上可以免费获得它,因为它已经存在。当有事情要做时,它会收到一小段数据,称为“痒痒”。这些反过来会触发广播,Google Play更新等。
所以,请选择。或者只是放弃,注册帐户并使用GMail及其标签Android API。