如何在应用程序未运行时通知用户收到的GTalk聊天

时间:2015-01-04 04:10:28

标签: android xmpp smack asmack google-talk

我使用GTalk服务器和(a)Smack库实现了聊天客户端。到现在为止还挺好。现在,我无法解决的问题是,当应用程序关闭时,如何通知用户收到的聊天记录,就像所有其他聊天应用程序一样。我正在阅读推送通知,但我找到的所有示例都有一个服务器组件,我显然不会这样,因为我的应用程序只是GTalk的客户端。

我应该使用GCM并为此实现服务器端吗?我是否应该尝试启动一个在启动时侦听传入消息的服务(类似于this example)?

3 个答案:

答案 0 :(得分:2)

服务绝对是可行的方法,您可以保持运行,以便您的XMPP连接保持打开状态。

从服务器您可以接收消息,通过广播接收器,您可以在应用程序关闭时显示通知,在打开应用程序时,您禁用以前的广播接收器并注册新的广播接收器以管理消息以你的活动为例。

这几乎是我的实施。

赞赏赞赏!

享受

答案 1 :(得分:1)

答案 2 :(得分:0)

您已拥有侦听邮件,维护网络连接等服务, Google Messaging Service。您想重新发明轮子,并复制现有功能。当您使用没有谷歌或其他供应商服务的设备时,这是有道理的,但在典型的设备上,您的服务将与谷歌(亚马逊,诺基亚)共存,并且维护多个网络连接将会做更多的CPU唤醒,浪费内存和这会导致电池耗尽。

因此,使用GCM / GMS是必须的。也许回退到自制服务将帮助您在没有GCM的情况下使用设备。

注意" GTalk客户端"。您的应用程序无法成为全功能的GTalk客户端:Google Talk是Google平台的部分(现已更名为环聊)。它使用了许多Google专有的XMPP扩展程序,您无法从第三方客户端使用这些扩展程序:您无法访问消息历史记录/同步,分组图,您无法在GCM中为GTalk注册设备通知,语音/视频功能只能部分访问。 GTalk的弃用支持环聊 - 您也失去了基本的XMPP兼容性,并且根本没有现代API。

因此,如果您要构建消息/ voip应用程序,应该拥有自己的服务器,拥有自己的用户数据库,身份验证(您的应用仍然可以将用户身份验证为Google用户并导入他们的也是联系人),消息存储和同步,当然,您的消息服务器应该在GCM中注册用户,并在您的客户端应用未连接时将消息转发给Google服务。

有一些商业平台(例如Parse,但我还没有测试过它),它为您提供了第三方服务器组件"和SDK你应该插入你的客户端应用程序,他们将关心所有"服务器端"您项目的一部分,包括GCM。