我正在尝试创建聊天应用程序,我需要一些指导。我有一个正在运行的登录系统。用户登录/注册,一切都存储在服务器上的mysql数据库中。我知道如何处理发布请求并发回东西。我有一个可以显示消息的recyclerView,但我的问题如下:
假设我有2个Android设备:Android1和Android2。 Android1向Android2发送消息。消息将存储到服务器。如何告诉服务器将该消息定向到Android2,以及如何让Android2接收消息。
如果Android2当时处于离线状态怎么办。我是否会通过手机创建某种响应来告诉服务器该消息是否已发送,以便可以再次发送?现在我如何编程服务器再次发送消息?
消息表应该是 - senderId,receiverId,message;或者最好的设计方法是什么?
我发现我可以通过使用GCM,PHP和MYSQL http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat-app-part-1/以及我可以使用XMPP来做到这一点。哪种方法最好?我更喜欢第一个,因为我理解它并且很容易实现。我不知道XMPP发生了什么。我使用firebase创建了一个Windows服务器,但我还能以某种方式使用我的php吗?连接也让我感到困惑。我已经实现了facebook登录。有没有关于xmpp + android的好教程。我找到了一些,但他们不清楚。
编辑:为什么这个问题会减少投票?它有什么问题?
答案 0 :(得分:0)
我使用socket服务进行聊天。所以,我建议你使用socket 那。与其他相比,它会得到快速响应,而且你所有的一切 想。
答案 1 :(得分:0)
我不得不面对与此前相同的情况。我在研究中发现的是:
Extensible Messaging and Presence Protocol (XMPP):
是基于消息的中间件的通信协议 XML(可扩展标记语言)。1它支持近实时 在任何两个或更多之间交换结构化但可扩展的数据 网络实体
REST :
是一种由一组协调的建筑风格组成的 应用于组件,连接器和数据的体系结构约束 元素,在分布式超媒体系统中。 REST忽略了 组件实现和协议语法的详细信息 关注组件的角色,对组件的约束 与其他组成部分的互动及其解释 重要的数据元素。4通过REST的应用 建筑约束某些建筑属性 诱导:性能,可扩展性,简单性,可修改性, 可见性,可移植性和可靠性。4
从上面我们可以理解,REST和XMPP只不过是您可能最终使用的协议,以便通过架构的组件传递数据。 XMPP是用于即时消息通信的最优化协议,但实现起来要复杂一些。幸运的是,GCM支持这两种协议。
即时消息应用程序就像任何其他客户端 - 服务器应用程序一样。对他们来说至关重要的是需要通知客户端服务器中发生的更新。为此,您需要一种正确的方式来与两个客户进行通信。通常这是通过一个通用的应用服务器。如果您决定采用GCM方法(我的建议),您将拥有以下组件:
当客户端打开应用程序时,它将全部启动,然后它将直接向GCM发出呼叫以请求令牌。一旦拥有令牌,设备就应该将其与自定义应用服务器同步 - 因此它知道连接到系统的每个人以及如何到达它们。自定义应用服务器在DB中维护令牌信息。当设备想要向另一个设备发送消息时,它将向自定义应用服务器发送请求,该请求将依次检索目标的令牌并将请求转发给GCM应用服务器。然后它将推动目标。
正如我所说的,我必须按照上面的描述做一个类似的解决方案。我的工作成果可以在以下存储库中找到:
上面的两个应用程序都使用GCM和REST协议进行了一对一对话的测试,但是,我仍然在研究它并且存在许多错误,但代码可以用作参考以便理解拟议的架构。
希望我能提供帮助。
答案 2 :(得分:-1)
您可以使用GCM发送和接收消息。 您只需要通过GCM将消息发送到接收设备,即使接收设备处于离线状态,它也会处理它。