ios - 如何使用GCM实现对iOS的可靠投递?

标签 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。如果这是推荐的路径,对于如何实现它有哪些建议?另外,这些送货收据可靠吗?

任何帮助将不胜感激!提前致谢!!

最佳答案

不幸的是,除非您在设备中实现回环,否则您无法判断您的推送通知是否已发送到 iOS 设备。但这也不会真正帮助你,因为设备可能连接不良并且仍然收到通知但你的环回请求可能无法通过,而且你的用户可以关闭后台获取,这将使环回不可能。

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

在通知中你必须设置content-available:1 ( https://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 :

关于ios - 如何使用GCM实现对iOS的可靠投递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31531163/

相关文章:

php - 以 1000 个用户为一组向所有 10000 个用户发送 gcm 消息

ios - 在 iOS 中创建数据库的合适扩展名是什么?

iphone - 使用 db 预填充数据

javascript - 在 UIWebView/WKWebView 中启用拖动

ios - Apple 手机钱包 - 如何发送更新的新通行证优惠券

java - 添加从Mysql服务器到Java应用程序的通知推送

java - 设备上的 Lollipop 更新后 Android GCM 无法工作

iOS Swift UI 测试(XCUITests)稳定性问题 - faSTLane 扫描

javascript - 使用@react-native-firebase/messaging 收到通知后应用程序崩溃

当 3G 网络可用时,Android GCM 不适用于 wifi 网络