Android 如何实现可靠的推送消息服务?
由于我想在移动应用程序中建立可靠的通信,我能否从第三方推送服务(C2DM、APN、城市飞艇)获得推送失败报告(可能设备处于脱机状态)?Android 如何实现可靠的推送消息服务?,android,ios,push-notification,Android,Ios,Push Notification,由于我想在移动应用程序中建立可靠的通信,我能否从第三方推送服务(C2DM、APN、城市飞艇)获得推送失败报告(可能设备处于脱机状态)? 或者我们需要自己构建它?我建议使用推送通知IBM MQTT协议。这足够用于推送通知。 正如Vinay所说,MQTT可以为您提供所需的功能。当客户端连接到服务器时,它可以向服务器注册“最后遗嘱”消息。如果客户端意外断开连接,服务器会将此消息发送到指示其执行的主题 在这个方案中,您的客户机可以向client//status之类的东西发送“online”消息,并将“o
或者我们需要自己构建它?我建议使用推送通知IBM MQTT协议。这足够用于推送通知。
正如Vinay所说,MQTT可以为您提供所需的功能。当客户端连接到服务器时,它可以向服务器注册“最后遗嘱”消息。如果客户端意外断开连接,服务器会将此消息发送到指示其执行的主题 在这个方案中,您的客户机可以向client//status之类的东西发送“online”消息,并将“offline”消息注册为同一主题的LWT。然后,您可以拥有一个服务器本地客户端,该客户端监听主题client/+//status,它将知道哪些客户端处于联机状态,哪些处于脱机状态 我想说的是,德库都的演示并不是最好的地方。戴尔·莱恩(Dale Lane)的这篇博文深入了解了在Android上使用MQTT的情况:在 有适合IOS和Android的客户端实现,请参见的预期目的是为您的服务器应用程序提供一种节省电池的方式,以向移动设备发出信号,表明它希望启动可靠的通信 您可以对消息进行结构化,以便每个新的C2DM包含自上次与服务器双向交互以来发生的所有事情(即,“来获取我所拥有的一切”)。您的交付失败报告隐含在移动设备没有及时响应中(您可以这样做,因为您知道C2DM会有意激活您的应用程序)
这真的比保证在有损介质中传递每条消息更糟糕吗?好吧,更糟糕的是,你还必须实现一个主要的通信方法。但无论如何,您必须这样做,因为C2DM只入站,对吗?没有一个服务不提供有关推送失败的报告 推送失败报告与APN/C2DM/Hemium没有什么关系 所有服务都旨在在任何情况下传递推送消息。 如果设备现在处于脱机状态,则当设备联机时将提供推送 此外,对于iOS,推送消息只是针对用户的通知,而不是针对应用程序 简单的例子可以说明这一点: 假设在应用程序关闭时收到推送。在这种情况下,将向用户发出通知。但,只有当用户点击该通知时,应用程序才会从推送接收数据!若用户点击应用程序的图标,那个么数据将不会被接收 因此,从技术上讲,推送到iOS设备并启动应用程序,但不传送数据 带有APN和氦气的城市航空
您可以考虑为推送实现自己的传输。MQTT似乎是一个不错的选择。 但在这种情况下,您必须处理保持活动、设备睡眠和电池优化。 苹果、谷歌和UrbanAirship的工程师已经完成了所有这些艰苦的工作
根据您的业务需要,可以更轻松地将您的体系结构调整为现有解决方案,然后重新实现推送服务仔细看看城市航空。事实上,C2DM有一些限制,有时推送消息的传递时间太长。因为UA已经实现了他们自己的传输——氦,所以它工作得相当好。氦是一种付费服务,但UA提供了良好的SLA。我做了类似的事情,我有一个数据库跟踪已知订户的推送队列,并在失败时报告。这很简单,就像这样
The schema was like so:
pushMessages
messageID , GUID, PK
message , nvarchar (256),
expires , datetime
messageQueues
subscriberID , GUID, PK
messageID , GUID PK
failedPushMessages
subscriberID, GUID, PK
messageID , GUID PK
(subscriber table omitted)
一旦客户端成功接收到消息,客户端将ping回推送服务器,并通过它在推送通知中收到的唯一queueItems ID通知它。还将有一个每日数据库进程来检查过期的推送消息。找到后,它将对与messageID匹配的queueMessages进行联接,然后将它们从messagesQueues表中删除,并将它们复制到failedPushMessages表中
这很容易理解和维护,但我没有用另一种方法进行操作的经验。推送服务是一种高效可靠的提醒用户的方法。它们甚至允许后台应用程序实时通知用户新信息。推送服务广泛应用于移动应用程序的各个领域,如天气更新、消息服务、邮件通知、优惠券服务等。推送服务不再是可选的,而是必不可少的。感谢您的回复!首先竖起大拇指回答问题。谢谢回复!首先竖起大拇指,看看你的答案。下面是另一个用电量比较,这次是https:谢谢!我认为它适用于任何不可靠的基于推送的服务。我将对每个答案进行评估,并为自己选出最佳答案。发送到Android设备的通知可能非常不可靠()。考虑Puxy(),它是一个高度可靠的推送通知网关,旨在通过使用底层MQTT套接字连接来传递通知来解决这个问题。充分披露——我发现了进取心。