服务器推送通知实现

18

小组:

我计划实现自己的服务器推送通知服务器到Android/iOS应用程序。因此,我的应用程序服务器(可能通过NodeJs实现)将联系那个通知服务器向设备推送消息。所以我在网上搜索到了下面的现有解决方案。

Google云消息传递

苹果推送通知服务

Firefox OS推送通知

Microsoft推送通知服务


Q1)
在它们各自的网站上,它们只是在告知如何使用他们的通知服务器。但我需要了解他们如何实现他们的服务器推送。

请告诉我,他们是否遵循以下任何一种?

轮询

长轮询

服务器发送事件

TLS,SSL或与客户端的TCP套接字连接

XMPP


Q2)

下面的两种方法声称,尽管我的应用程序没有运行,他们仍然能够向应用程序发送通知?这是如何实现的?

苹果推送通知服务

Firefox OS推送通知


Q3)

在Firefox OS推送通知中,他们已经通知了他们避免保持活动状态以节省电池寿命。我的问题是,在没有保持活动状态的情况下,如何确定连接是否仍然存在?


Q4)

这些(GCM/APNS/FireFox OS)实现全部都是服务器端推送,并且不接受客户端请求,我是正确的吗? 那么,我的服务器仍然需要处理除推送消息之外的数百万设备请求,对吧? 如果我在自己的通知服务器和客户端设备之间使用Websocket,则需要维护另一个Websocket连接以接收来自设备的请求吗?


苹果推送通知由iOS控制,而不是您的应用程序。因此,即使应用程序未运行,也可以使用此功能。要发送通知,您需要打开与苹果服务器的SSL连接并发送推送通知负载。由于iOS将处理所有内容,因此没有轮询或其他任何操作。 - rckoenes
@rckoenes 谢谢!那么,如果我想要实现自己的通知服务器,是否可以在iOS上编写代码以打开与我的服务器的SSL连接? - Kanagavelu Sugumar
1
不,你的服务器应该与苹果推送通知服务器进行通信。如果你打算编写自己的服务器,你就不能使用推送通知,因为你需要从自己的服务器拉取消息,这会耗费电池电量。苹果APNS由iOS控制,它会偶尔连接到苹果的服务器,并收集设备上所有应用程序的推送通知。 - rckoenes
1
@rckoenes,您能否将此添加为答案? - Kanagavelu Sugumar
团队,所有这些问题都与决定选择服务器推送通知有关。我认为这是寻找服务器推送技术的人们的一站式问题。请不要从这里创建四个不同的问题。 - Kanagavelu Sugumar
3个回答

9

互联网上有很多好的文章,你可以查阅,就会得到答案。但我想回答你的问题: 答案大多数是适用于安卓和谷歌服务器。

答案1) 他们有自己的监听器,您需要使用他们的库类在您的代码中使用它们。您不需要担心推送。您需要将消息发送到服务器,服务器将将消息推送到设备。他们使用OAuth。 关于协议,有两种方法使用CCS和XMPP。 CCS只使用XMPP作为经过身份验证的传输层,因此您可以使用大多数XMPP库来管理连接。要向设备发送通知,您可以编写代码在android应用程序中发送以及您的服务器代码。消息发送仅由您的代码完成。其余的将由Google Server在GCM情况下处理。 您可以在此链接中查看详细信息

http://developer.android.com/google/gcm/server.html

同时,为了安全问题

Google云消息传递安全性 https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

答案2) 是的,在您的应用程序未运行的情况下,设备仍然可以接收通知,因为您需要编写广播监听器的代码。在后台,它将侦听服务器,并在有任何消息数据包时将其作为通知接收消息。Android拥有服务,您不需要担心它。您只需使用这些资源,使用库类使您的工作更轻松,并让它们编写如果您的应用程序未运行,则仍会接收通知。显然,会有一些监听器使应用程序能够接收到消息。请查看此链接中的“接收消息”部分。

http://developer.android.com/google/gcm/client.html

答案3:Firefox OS推送通知的设计目的只是唤醒应用程序,而不涉及数据处理。请查看此链接。

https://hacks.mozilla.org/2013/07/dont-miss-out-on-the-real-time-fun-use-firefox-os-push-notifications/

答案4:不仅会接受来自开发者的请求,还会接受用户的请求。我不确定其他情况,但对于GCM而言,是可以的。请查看“发送消息”。

http://developer.android.com/google/gcm/client.html

希望这篇文章对你的问题有所帮助。

我想要实现自己的PUSH通知服务器,不想使用像GCM这样的第三方服务器... 我可以在我的通知服务器上使用websocket吗..? - Kanagavelu Sugumar

8

苹果推送通知由iOS控制,而不是您的应用程序。因此,即使应用程序未运行,也可以使用此功能。要发送通知,您需要打开与苹果服务器的SSL连接并发送推送通知负载。由于iOS将处理所有内容,因此没有轮询或任何其他操作。

如果您想编写自己的服务器,则无法使用推送通知,并且会耗尽电池,因为您需要从自己的服务器拉取消息。苹果APNS由iOS控制,它会定期连接到苹果服务器并收集设备上所有应用程序的所有推送通知。


3
你让苹果推送通知看起来像魔法,但实际上并不是。你可以使用一个空闲的单向持久连接到自己的服务器来复制相同的功能,在服务器想要时唤醒它。苹果推送通知的唯一优点是,你可以为所有应用程序/游戏共享一个空闲连接。我不能代表苹果推送通知,但从我在其他移动操作系统上使用推送服务的经验来看,它们都不太可靠。也有许多文章记录了这些问题。 - Alper Turan
作为一个经验法则,如果我需要构建一个可靠且可能安全的应用程序,我会选择自己开发推送系统。如果您构建多个应用程序,甚至可以在它们之间共享自己的空闲连接。 - Alper Turan
“没有轮询” - 似乎是错误的。你的意思是应用程序不需要轮询。每个设备上运行的iOS必须定期轮询某个服务器以接收通知,对吗?否则它怎么能被实现呢? - Sujay Phadke

1

除了技术细节外,还有各种第三方解决方案,例如Amazon SNS。每百万条通知的费用应该约为0.50美元。与实施自己的服务器/服务(时间、成本、可靠性)相比,这种微小的成本让我觉得你应该把时间花在项目的其他方面。


请考虑长远计划;需要发送数十亿条通知。现在它们的成本是0.50美元;不知道未来会怎样..?此外,我必须按照第三方系统理解/编写代码。 - Kanagavelu Sugumar
你可以获得很好的入门教程。当你发送了十亿条数据时,与部署自己的服务器集群、维护、修复错误等相比,成本是不可见的。在开始时逐步支付可能更明智,以更快地推出产品。当然,如果你已经有现有的设置可以使用,例如复制、故障转移、排队、负载均衡等,则另当别论。这些都可以作为各种流行语言的库提供。 - twb
好的,谢谢!让我考虑一下。 - Kanagavelu Sugumar
1
每百万次收费0.50美元。希望如果您的应用程序足够大,可以生成十亿条通知,那么您的收入足以支付500美元的费用。 - nobody
1
这是由AWS而非Google提供的。在我看来,即使它已经达到了每月500美元,与建立和维护自己的通知服务器集群以可靠地传递相比,它仍然可能非常具有成本效益。 - twb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接