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

Posted

技术标签:

【中文标题】如何在应用未运行时通知用户收到的 GTalk 聊天【英文标题】:How to notify the user about received GTalk chats when the app is not running 【发布时间】:2015-01-04 04:10:27 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

服务绝对是要走的路,你可以让它保持运行,这样你的 XMPP 连接就保持打开状态。

您可以从服务器接收消息,并通过广播接收器在应用程序关闭时显示通知.

这几乎是我的实现。

赞一个!

享受

【讨论】:

为什么需要广播接收器来显示通知? 我真的不需要它,只是我希望我的服务在应用程序关闭时显示通知,并在应用程序打开时执行一些其他操作,所以我创建了两个具有相同过滤器的广播接收器实现我的目标 您如何使服务始终有效?从我一直在阅读的内容来看,应该制作一个粘性服务,但是很多 android 版本都存在错误并且不会重新启动它们......你是如何解决这个问题的? 这是另一个问题,我敢肯定 Stack OverFlow 上有更详细的解释......无论如何我已经把它粘起来了,我已经覆盖了 onTaskRemoved() 方法添加了一些代码重新启动它。竖起大拇指表示赞赏!【参考方案2】:

您应该使用保存 XMPPConnection 的Android Service。

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

【讨论】:

【参考方案3】:

您已经拥有侦听消息、维护网络连接等的服务,它 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,他们会关心所有“服务器-side" 项目的一部分,包括 GCM。

【讨论】:

我所读到的关于 GCM 的所有内容都表明它可以与发送通知的自定义服务器端应用程序一起使用。我误解了吗? 使用 GCM 不是必须的。 @Flow 唯一可以避免使用 GCM 的情况是构建自己的基于 android 的平台和自制的生态系统,就像亚马逊和诺基亚一样。在大多数其他情况下,您的应用程序将成为用户投诉的第一个候选对象。 GCM 是否必须使用自定义服务器? @vitalyster 我明白你的意思,我认为你是对的。但是看到我的目标不是建立一个 WhatsApp 杀手,而只是为我正在制作的超级简单的游戏提供一种方法,以便学习 Android 开发以在用户之间发送消息,构建一个完整的基础设施将是我头疼的事情。

以上是关于如何在应用未运行时通知用户收到的 GTalk 聊天的主要内容,如果未能解决你的问题,请参考以下文章

收到推送通知且应用程序在前台时如何防止弹出警报

当用户在聊天屏幕上时,如何使 FCM 通知不显示通知消息?

iOS 如何在应用未运行时处理 FCM

重定向以查看 IOS 通知栏中的点击推送消息

应用程序运行时如何在android中以编程方式关闭通知?

无法使用 Gtalk 应用程序的 asmack api 获取离线消息