2012-05-24 32 views
16

由于我想在移动应用中建立可靠的通信,我可以从第三方推送服务(C2DM,APN,城市飞艇)推送失败的报告(可能设备处于脱机状态)吗? 或者我们需要自己构建它?如何实现可靠的推送消息服务?

回答

4

Android C2DM的预期用途是为您的服务器应用程序发送信号,告知移动设备它希望开始可靠的通信。

您可以构造消息,以便每个新的C2DM都包含自从与服务器进行最后双向交互(即“来,拿到我所得到的东西”)以来发生的所有事情。您的失败投递报告隐含在移动设备没有及时响应(您可以这样做,因为您知道C2DM使用Intent激活您的应用程序)。

这是真的比保证每个消息在有损介质中传递更糟吗?好吧,更糟糕的是你还必须实施主要的沟通方式。但无论如何,你必须这样做,因为C2DM仅限入站,对吗?

+0

谢谢!我认为它适用于任何不可靠的基于推送的服务。我会评估每个答案,并奖励给我最好的一个。 –

2

正如Vinay所说,MQTT可能会为您提供所需的功能。当客户端连接到服务器时,它可以向服务器注册“最后的遗嘱”消息。如果客户端意外断开连接,服务器会将此消息发送给它被指示执行的主题。

在这个方案中,你的客户端可以发送消息“在线”给客户端//状态之类的东西,并将消息“脱机”注册为同一主题的LWT。然后,您可以拥有一个服务器本地客户端,该客户端可以监听主题客户端/ + /状态,并知道哪些客户端在线以及哪些客户端处于离线状态。

我建议tokudu演示不是最好看的地方。本博客文章由戴尔巷深入分析了在Android上使用MQTT:http://dalelane.co.uk/blog/?p=1599并没有在http://stephendnicholas.com/archives/219

有客户端实现,以满足这两个IOS和Android MQTT电量(再次在Android)的审查,看http://mqtt.org/software

+0

感谢您的回复!大拇指首先为您的答案。 –

+3

这里是另一个用电比较,这次https:http://stephenndnicholas.com/archives/1217 – ralight

2

没有一个服务没有提供关于失败推送的报告。

未能推报告提出用APN/C2DM /氦

所有服务都旨在在所有情况下提供推送消息的小SENCE。 如果设备现在处于脱机状态,则当设备变为联机状态时将会发送推送。

此外,对于iOS推送消息只是一个用户通知,而不是一个应用程序!

简单案例将说明它: 假设应用程序关闭时收到推送。在这种情况下,会发生用户通知。但是,只有当用户点击该通知时,应用才会从推送中接收数据!如果用户点击应用程序的图标,则不会收到数据。

技术上来说,推送被传送到iOS设备并且应用程序已启动,但数据未被传送。

UrbanAirhip与APN和氦

你可以考虑实现自己的推运输。 MQTT似乎是一个不错的选择。 但在这种情况下,您必须处理keepalive,设备睡眠和电池优化。 Apple,Google和UrbanAirship的工程师已经完成了所有这些艰苦的工作。

根据您的业务需求,您可以更轻松地调整现有解决方案的架构,然后重新实现推送服务。

仔细观察一下UrbanAhiphip。事实上,C2DM有一些局限性,有时推送消息的传递时间太长。由于UA已经实施了自己的交通工具 - 氦气,它运行得非常好。氦气是一种付费服务,但UA提供良好的SLA。

1

我做了类似的事情,我有一个数据库跟踪已知订户的推送队列,并在失败时进行报告。这是非常简单的,去这样的事情...

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表中。

这很容易理解和维护,但我没有经验做另一种方式。

0

推送服务是一种高效可靠的方式来提醒您的用户。它们甚至允许后台应用程序实时通知用户新信息。推送服务广泛用于移动应用中的各种领域,例如天气更新,消息服务,邮件通知,优惠券服务等。推送服务不再是可选的,但已变得至关重要。