android - 在 android 中创建聊天应用程序的最佳实践是什么

标签 android chat

<分区>

我要创建一个 Android 聊天应用程序。实际上,聊天将成为该应用程序的一项功能。我想知道有关 android 聊天应用程序的最佳做法是什么。我熟悉的两个选项是 C2MD 和每隔几秒对服务器数据库进行一次自定义轮询。

现在,我知道 C2MD 应该很棒,但据我所知,它并不那么可靠。我试图实现它,但它似乎没有用。此外,如果出于某种原因在 google 端发生某些事情(例如他们的服务器已关闭 - 不太可能但可能会发生)我无法联系他们,并且在他们的时间范围内。

现在,如果我做我自己的事情(我发送用户创建的消息的基本方法,然后定期检查服务器以查看是否有任何新消息到达)似乎没问题,除了,为了有一个体面的用户经验,我对我的服务器的轮询必须像每 5 秒左右一样,这将疯狂地消耗电池。这确实是我使用这种方法的主要缺点。

所以,我想知道有没有更好的方法,但我不知道。请任何帮助,架构结构,任何东西都会有所帮助。

最佳答案

您应该看看使用 XMPP。您可以在 StackOverflow 上搜索 Android XMPP,您可能最终会得到 here。建议使用 Smack 的某些变体(XMPP 客户端库)。

更新以解决评论:

首先,XMPP 是一种协议(protocol),而不是客户端或服务器。使用它的好处之一是可以广泛使用 XMPP 客户端和服务器实现。 Wikipedia article解决了您的大部分问题。

关于您对 gtalk 的评论:

The architecture of the XMPP network is similar to email; anyone can run their own XMPP server and there is no central master server.

关于投票:

XMPP could use HTTP in two ways: polling[21] and binding.[22] The polling method, now deprecated, essentially implies messages stored on a server-side database are being fetched (and posted) regularly by an XMPP client by way of HTTP 'GET' and 'POST' requests. With HTTP binding, the client uses longer-lived HTTP connections to receive messages as soon as they are sent. This push model of notification is more efficient than polling, where many of the polls return no new data.

它也可以使用 WebSockets。

关于 .NET 集成(如果您需要……如果不需要,您可以运行自己的 XMPP 服务器),您可以在 StackOverflow 中搜索 XMPP 和 .NET,然后您可以得到一些问题/想法.NET 服务器与 XMPP 服务器集成,例如这个问题:Opensource .Net Jabber/XMPP server?

关于android - 在 android 中创建聊天应用程序的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265610/

相关文章:

安卓图像按钮 : how to remove tinted rectangle around image?

android - 作业之间的 Firebase Job Dispatcher 间隔会随着时间的推移而增加

android - bootstrap css 源或本地 android glyphicon 区别

android - 读取所有联系人数据

android - 调用SurfaceHolder.setFixedSize()有什么用?

javascript - 通过 jQuery AJAX 设置和获取 PHP 变量

php - 使用 PHP 和 jQuery 进行实时聊天。在哪里存储信息? mysql还是文件?

javascript - 允许两个客户端在没有服务器的情况下进行交互

java - 使用 Java 的视频/语音聊天 Web 应用程序

ios - 从 Socket 接收批量数据时应用卡住。 iOS |套接字。 Realm swift