由于我想在移动应用中建立可靠的通信,我可以从第三方推送服务(C2DM,APN,城市飞艇)推送失败的报告(可能设备处于脱机状态)吗? 或者我们需要自己构建它?如何实现可靠的推送消息服务?
回答
Android C2DM的预期用途是为您的服务器应用程序发送信号,告知移动设备它希望开始可靠的通信。
您可以构造消息,以便每个新的C2DM都包含自从与服务器进行最后双向交互(即“来,拿到我所得到的东西”)以来发生的所有事情。您的失败投递报告隐含在移动设备没有及时响应(您可以这样做,因为您知道C2DM使用Intent激活您的应用程序)。
这是真的比保证每个消息在有损介质中传递更糟吗?好吧,更糟糕的是你还必须实施主要的沟通方式。但无论如何,你必须这样做,因为C2DM仅限入站,对吗?
我建议推送通知IBM MQTT协议。这足以支持推送通知。 请参阅演示https://github.com/tokudu/AndroidPushNotificationsDemo
感谢您的回复!大拇指首先为您的答案。 –
正如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
感谢您的回复!大拇指首先为您的答案。 –
这里是另一个用电比较,这次https:http://stephenndnicholas.com/archives/1217 – ralight
没有一个服务没有提供关于失败推送的报告。
未能推报告提出用APN/C2DM /氦
所有服务都旨在在所有情况下提供推送消息的小SENCE。 如果设备现在处于脱机状态,则当设备变为联机状态时将会发送推送。
此外,对于iOS推送消息只是一个用户通知,而不是一个应用程序!
简单案例将说明它: 假设应用程序关闭时收到推送。在这种情况下,会发生用户通知。但是,只有当用户点击该通知时,应用才会从推送中接收数据!如果用户点击应用程序的图标,则不会收到数据。
技术上来说,推送被传送到iOS设备并且应用程序已启动,但数据未被传送。
UrbanAirhip与APN和氦
你可以考虑实现自己的推运输。 MQTT似乎是一个不错的选择。 但在这种情况下,您必须处理keepalive,设备睡眠和电池优化。 Apple,Google和UrbanAirship的工程师已经完成了所有这些艰苦的工作。
根据您的业务需求,您可以更轻松地调整现有解决方案的架构,然后重新实现推送服务。
仔细观察一下UrbanAhiphip。事实上,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表中。
这很容易理解和维护,但我没有经验做另一种方式。
推送服务是一种高效可靠的方式来提醒您的用户。它们甚至允许后台应用程序实时通知用户新信息。推送服务广泛用于移动应用中的各种领域,例如天气更新,消息服务,邮件通知,优惠券服务等。推送服务不再是可选的,但已变得至关重要。
- 1. 服务器推送消息
- 2. 如何可靠地从服务器上的推送数据服务中检索消息?
- 3. UDP可靠的数据服务实现
- 4. 权衡实现可靠的异步消息访问服务的版本控制?
- 5. 推送消息给C2DM服务器
- 6. BlackBerry Android推送消息服务器
- 7. php推送服务器不能发送乘法推送消息
- 8. 实时推送消息
- 9. 用Azure服务总线中继消息推送消息
- 10. 使用GWTP实现服务器推送
- 11. 服务器推送通知实现
- 12. 推送通知服务器实现
- 13. 推送服务器实现技术?
- 14. 如何实现服务器的谷歌云消息发送推送通知android studio
- 15. 实现推送通知服务器:如何检查传递设备令牌的消息来自真实设备?
- 16. NodeJS/SocketIO消息未被可靠传送
- 17. 如何实现消息发送系统?
- 18. 通过node.js中的TCP实现可靠的消息传递
- 19. Apple的推送通知服务可靠吗?
- 20. 如何通过Rails实现基于websocket的推送服务?
- 21. 如何实现BlackBerry应用程序的推送服务?
- 22. 在PHP-JavaScript中实现消息服务
- 23. 在ASP.NET MVC中实现消息服务
- 24. 如何发送消息给服务?
- 25. 如何完全实现消息轮询的服务器发送事件
- 26. 我如何发送WAP推送消息?
- 27. 消费服务无限期推送SOAP消息?
- 28. GCM服务对大规模推送通知是否可靠?
- 29. APNS(苹果推送通知服务)可靠性
- 30. ios推送通知服务器可靠性
谢谢!我认为它适用于任何不可靠的基于推送的服务。我会评估每个答案,并奖励给我最好的一个。 –