22

我正在开发针对网络,Android和iOS的聊天系统。做我的研究,我发现GCM和APNS如何处理推送通知存在差异。推送通知或Socket.io?或两者?

如果我通过GCM向Android设备发送推送通知,设备能够决定是否通知用户该设备,或者如果不通知用户,它不会告诉用户。它可能只是数据的更新,用户不需要通知。另一方面,如果我通过APNS向iOS设备发送推送通知,设备无法决定是否显示通知,则必须显示通知。另外,当iOS设备收到通知时,通知数据必须包含要显示给用户的字符串。在Android上,设备可以生成该字符串。

所以,我想创建一个系统,对于iOS和Android以及网站(基于API)都是一样的。那是当我发现Socket.io。 Socket.io让我可以自由地向设备发送数据(无论是iOS还是Android),以便设备决定是否显示所做的更改(可能是用户更新,新消息,邀请,或许多其他“事件”)。但是,在我的研究中,我发现了一些关于使用Socket.io的缺点。设备必须连接到插座,以便信息在客户端和服务器之间流动,但现实世界中的智能手机始终连接到不同网络并断开连接,并断开套接字连接。另外,通过在后台打开连接,服务器和客户端之间会发生乒乓,以验证连接是否仍处于打开状态,并最终导致消耗大气(在我的国家,我们支付每一个我们使用的大型计算机,我们还没有统一费率),还有美食生活。我不确定消费是否显着。

在网络端,它必须与Socket.io一起工作,所以这根本不是问题。

最后,知道两种选择的优点和缺点,我发现我可以混合使用这两种选择,这可能最终成为我的最佳选择。例如,当应用程序打开时,它使用Socket.io,关闭时使用APNS或GCM(取决于设备的操作系统)。但是,这是一种好的做法吗?或者,坚持使用1种解决方案而不是混合两种方法会更好?为什么?

非常感谢您花时间阅读本文,甚至更多地回答。

+2

这是一个很好的问题,因为这里必须要有一个平衡点。阅读本文后,我确实受到启发,因为我现在正在通过应用程序构建通知。我将使用node.js socket.io首先检测它们是否在线。如果是这样,请使用socket.io来通知,否则使用android/ios的通知。谢谢! –

+0

@PDK你最终使用两个? – ralphgabb

+1

@ralphspoon如果你想做正确的事情,我不得不同时使用这两种方法。但最后,处理这个系统很麻烦,所以我最终转向了Firebase。 – PDK

回答

8

您已经准确列出了正反两面。使用这两种方法可以为您提供更多的维护方面的工作,同时也会带来更多的复杂性,但会为您提供灵活性。它会归结为您的要求。

此外,您可能会发现在iOS后台进程中打开一个socket.io连接会很麻烦。与Android相比,iOS在后台运行的任务要严格得多。

+0

感谢您的回答,很高兴听到我正朝着正确的方向前进。 – PDK