如何使用GCM实现对iOS的可靠传送?

时间:2015-07-21 05:39:11

标签: ios push-notification google-cloud-messaging

我正在尝试为iOS设备设置可靠的推送通知,而我正在寻找有关推荐的方法将使用Google Cloud Messaging的指导。我的应用程序是一个消息传递应用程序,但这可能适用于其他类型的应用程序。

目前,我正在通过HTTP连接服务器使用GCM,我发现如果iOS设备丢失服务或关闭,则不会传递所有消息。我认为这是预期的性能,因为GCM使用的是Apple的APNS,它不能保证传送,而且每个应用程序在队列中最多只能保存一个通知。

我希望(希望?)GCM会拥有自己的队列来解决这个问题。也许它确实如此,我只是做得不对劲?

我遇到的其他可能性:

  • Non-collapsible messages。不幸的是,文档让我感到困惑,我是否能够用它来实现我的需要。
  • delivery_receipt_requested标志。这至少可以(虽然增加了我的复杂性)用于确定消息是否到达。我看到它需要XMPP。但是,如果我在具有多个registration_ids的单个HTTP请求上设置标志,那么我可能会收到多个XMPP响应吗?我愿意转而使用XMPP。如果这是推荐的路径,那么有关如何实现这一点的一些建议是什么?此外,这些送货单是否可靠?

任何帮助将不胜感激!在此先感谢!!

2 个答案:

答案 0 :(得分:1)

不幸的是,除非您在设备中实现回送,否则您无法告诉您推送通知是否已发送到iOS设备。但是这对你来说也不会有任何帮助,因为设备可能连接不良并且仍然收到通知但是你的回送请求可能无法通过,你的用户也可以转向后台获取,这将使回环变得不可能

因此,您无法完全解决问题 - 但使用环回是大多数用户解决此问题的最佳选择。

在通知中,您必须设置content-available:1https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

并在AppDelegate中实现以下方法,并向服务器发出已成功接收消息的API请求:

- application:didReceiveRemoteNotification:fetchCompletionHandler:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler

答案 1 :(得分:0)

您可以使用GCM发送所谓的数据消息。阅读https://developers.google.com/cloud-messaging/server#notifications_and_data_messages

优点是默认情况下它们不会像您想要的那样崩溃。缺点是GCM只能通过它自己的连接提供它们,而不是通过APNS,这意味着你的应用只会在运行时(即不在后台)接收它们。如果它对您不够好,请考虑发送通知消息(总是通过APNS)和数据消息的组合。

  

但是如果我在一个具有多个registration_ids的HTTP请求上设置标志,那么我可能会收到多个XMPP响应吗?

没有

  

此外,这些送货单是否可靠?

他们是最好的努力。这意味着在某些情况下(如设备连接不良),您可能无法立即收到收据或收到重复邮件。此外,仅对数据消息支持送达回执,而不是通知。

相关问题