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



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

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

服务绝对是要走的路,您可以保持它运行,以便您的 XMPP 连接保持打开状态。

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

这几乎是我的实现。

大拇指赞赏!

享受

您应该使用保存 XMPPConnection 的 Android 服务。

另请参阅:- aSmack 即服务- https://github.com/Flowdalic/asmack/wiki/Should-applications-using-aSmack-use-foreground-Services%3F

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

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

关于"GTalk 客户端"的说明。您的应用程序不能是功能齐全的GTalk客户端:Google Talk是Google Platform(现在更名为Hangouts)的一部分。它使用许多Google专有的XMPP扩展,您无法从第三方客户端使用:您无法访问消息历史记录/同步,群聊,您无法在GCM中注册设备以获取GTalk通知,语音/视频功能只能部分访问。随着GTalk的弃用,转而使用环聊 - 您也失去了基本的XMPP兼容性,并且根本没有现代API。

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

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

最新更新