我们是否应该将GCM(或新的FCM)与openfire用于离线推送通知消息?

时间:2016-10-10 08:05:16

标签: android firebase openfire smack firebase-cloud-messaging

它接口就像使用聊天应用程序,使用openfire和smack可以有两种方式,

第一种方式

  1. Smack与openfire服务器建立连接,只要连接到openfire服务器,它就可以接收并向服务器发送更新。如果它没有连接,那么openfire上的插件可以使消息保持脱机状态,并在客户端再次连接后发送它们。 在此方案中接收所有消息,

    • 1.1如果没有互联网,设备应该只与openfire断开连接。
    • 1.2用户退出
    • 1.3设备离线

    如果在任何其他情况下连接与服务器断开连接,则会导致邮件丢失。目前,应用程序正在使用此架构。

  2. 此方法存在问题:

    • 这个问题的主要问题是,如果由于任何崩溃或问题应用程序被完全杀死,它的非警报管理器任务也会被杀死。应用程序在应用程序再次打开之前未重新启动。
    • 第二个问题是,由于连续过程而消耗电池
    • 更新的OS应用程序进入深度睡眠,打盹模式,超级省电模式,后台

    第二种方式

    2.Smack与openfire服务器建立连接,只要连接到openfire服务器,它就可以接收并向服务器发送更新,直到应用程序处于前台。一旦进入后台,应用程序将完全与服务器断开连接。在这种情况下,当应用程序处于脱机状态时,openfire必须将所有消息发送到Firebase服务器,同一应用程序侦听firebase通知,当它从firebase接收通知时,它会重新连接到openfire并获取消息并显示或直接显示消息来自firebase(在这种情况下,此记录也会转到firebase服务器)。应用程序从gcm接收该通知,然后需要在应用程序中管理有关消息传递等。

    问题

    • 当应用程序进入backgound时断开与服务器的连接,处理其用例,因为应用程序在后台很长时间。应用程序是否在后台选择任何文件并使用此类案例。
    • 这使得代码和应用程​​序非常具有竞争性,并且还需要管理多个服务器。
    • 由于我不想与任何第三方共享我的应用程序消息数据,因此还可能存在更多安全漏洞。

    我的问题

    1. 哪种方式更好,更安全,更可靠?
    2. 我的应用程序正在使用方式1,我应该切换到第二种方式吗?
    3. 可以确定应用程序是否始终保持连接的原因是什么?并且它也消耗更少的击球手?

1 个答案:

答案 0 :(得分:2)

1-哪种方式更好,更安全,更可靠? 答:第二种方式

2-我的应用程序正在使用方式1,我应该切换到第二种方式吗? 答:你应该但显然需要Openfire技能来开发一个将消息路由到FCM的插件。

3-可以确定应用程序是否始终保持连接的可能原因是什么?它也消耗更少的面糊? 答:简单地说,如果我们减少XMPP流量,可以节省处理能力,从而减少电池消耗。但显然对于聊天应用程序来说,这不是一个选择。因此,为了保持应用程序的交互性和电池友好性,当应用程序转到后台并依赖推送通知(在服务器端集成)时,应断开XMPP。