聊天应用程序android指导

时间:2016-04-29 14:01:24

标签: android mysql

我正在尝试创建聊天应用程序,我需要一些指导。我有一个正在运行的登录系统。用户登录/注册,一切都存储在服务器上的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的好教程。我找到了一些,但他们不清楚。

编辑:为什么这个问题会减少投票?它有什么问题?

3 个答案:

答案 0 :(得分:0)

  

我使用socket服务进行聊天。所以,我建议你使用socket   那。与其他相比,它会得到快速响应,而且你所有的一切   想。

答案 1 :(得分:0)

我不得不面对与此前相同的情况。我在研究中发现的是:

  1. Use Telegram API :电报是一个很好的整合开源应用程序,用于聊天消息,它处理它的所有方面,包括安全性和所有UI的东西。但是,它的许可证也会使您的代码也开放;
  2. 使用Google Cloud Message服务:GCM允许您使用REST或XMPP向许多设备发送推送。即使你正在使用GCM,你也必须自己实施很多。我认为这是最好的解决方案;
  3. 实施套接字以将客户端与应用服务器连接:这将需要大量工作,从同步到管理应用消耗的功能,我不建议您关注这;
  4. 了解基础知识......

    • Extensible Messaging and Presence Protocol (XMPP):

        

      是基于消息的中间件的通信协议   XML(可扩展标记语言)。1它支持近实时   在任何两个或更多之间交换结构化但可扩展的数据   网络实体

    • REST

        

      是一种由一组协调的建筑风格组成的   应用于组件,连接器和数据的体系结构约束   元素,在分布式超媒体系统中。 REST忽略了   组件实现和协议语法的详细信息   关注组件的角色,对组件的约束   与其他组成部分的互动及其解释   重要的数据元素。4通过REST的应用   建筑约束某些建筑属性   诱导:性能,可扩展性,简单性,可修改性,   可见性,可移植性和可靠性。4

    从上面我们可以理解,REST和XMPP只不过是您可能最终使用的协议,以便通过架构的组件传递数据。 XMPP是用于即时消息通信的最优化协议,但实现起来要复杂一些。幸运的是,GCM支持这两种协议。

    可能的架构......

    即时消息应用程序就像任何其他客户端 - 服务器应用程序一样。对他们来说至关重要的是需要通知客户端服务器中发生的更新。为此,您需要一种正确的方式来与两个客户进行通信。通常这是通过一个通用的应用服务器。如果您决定采用GCM方法(我的建议),您将拥有以下组件:

    • GCM App Server :负责管理令牌生成并将收到的消息转发给目标;
    • 自定义应用服务器:您实施的系统的后端;
    • 客户端:将接收推送通知的网络,Android或iOS设备;

    当客户端打开应用程序时,它将全部启动,然后它将直接向GCM发出呼叫以请求令牌。一旦拥有令牌,设备就应该将其与自定义应用服务器同步 - 因此它知道连接到系统的每个人以及如何到达它们。自定义应用服务器在DB中维护令牌信息。当设备想要向另一个设备发送消息时,它将向自定义应用服务器发送请求,该请求将依次检索目标的令牌并将请求转发给GCM应用服务器。然后它将推动目标。

    一个真实的例子......

    正如我所说的,我必须按照上面的描述做一个类似的解决方案。我的工作成果可以在以下存储库中找到:

    1. Instachat Android:包含使用GCM的应用程序的源代码 - 它看起来很像Whats App;
    2. Instachat Core:使用Spring Boot实现的后端;
    3. 上面的两个应用程序都使用GCM和REST协议进行了一对一对话的测试,但是,我仍然在研究它并且存在许多错误,但代码可以用作参考以便理解拟议的架构。

      希望我能提供帮助。

答案 2 :(得分:-1)

您可以使用GCM发送和接收消息。 您只需要通过GCM将消息发送到接收设备,即使接收设备处于离线状态,它也会处理它。