iOS - 如何在客户端服务器聊天应用程序中正确使用后台获取和远程通知?
iOS - How to properly use Background Fetch and Remote Notifications in client server chat app?
我正在构建一个简单的客户端-服务器聊天应用程序(想想 WhatsApp、Telegram...)。
我正在尝试弄清楚如何使用可用背景 API 来保持客户端数据更新,具体来说,如何处理聊天 房间有一条或多条新消息的情况 并且应用程序处于 后台状态 。
该应用程序将针对 iOS 7 及更高版本,因此我有这些 API 的重新分级后台执行:
beginBackgroundTaskWithExpirationHandler
后台获取
- 远程通知
beginBackgroundTaskWithExpirationHandler 并不适合这里,因为我需要在用户存在应用程序时手动调用它。
Background Fetch 似乎也不适合这里,因为它会在不需要时不断调用,并且会耗尽电池并给后端带来压力。
所以我只剩下远程通知,它们本质上是静默推送通知。我想到的用例是:
当应用程序在后台时,聊天中生成了一些新消息
房间.
后台向客户端发送Remote Notification
- 处理静默推送,客户端在后台获取聊天室中的任何新数据。
获取结束后,将触发本地通知。
用户在聊天室中打开带有新数据的应用程序。
这里的问题是,现在,远程通知是我在后台获取新消息的唯一机制,而推送通知据说是尽力而为 风格,而您不应将它们用作您的主要通信方式。
另一种方法是省去所有的后台下载,每次用户打开应用程序时只询问新数据,但这会损害用户体验。
总结一下:
- 我可以依赖远程通知作为我的主要方式吗
communications 在后台时(也可能在前台,在
聊天室也)?
- 在这种情况下我应该使用其他背景 API 吗?
我知道问题范围很广,缺乏重点,但主要是为了不重复造轮子。我假设我描述的场景很常见,只是想知道在写 code/spending 时间在一个不适合开始的策略之前解决它的最佳方法。
除非您希望应用程序直接收到新内容的通知,而不是定期检查它,否则我认为 Background Fetch 可以解决这个问题。它实际上不会经常被调用,并且您可以控制频率。如果您将获取间隔设置为最小值,系统将尽可能频繁地检查(取决于您的应用程序的质量 "background citizen")。至于功耗,如果你使用好 Fetch 并在正确的时间调用完成处理程序(一旦任务完成,或者当你的 30 秒快到时),系统会给你的应用程序获取数据的机会它将在考虑电池寿命的情况下管理 Background Fetch 的使用。而且它可能不会像发送大量推送那样给后端带来压力。 Fetch 对于像您这样的应用非常有用。
我正在构建一个简单的客户端-服务器聊天应用程序(想想 WhatsApp、Telegram...)。
我正在尝试弄清楚如何使用可用背景 API 来保持客户端数据更新,具体来说,如何处理聊天 房间有一条或多条新消息的情况 并且应用程序处于 后台状态 。
该应用程序将针对 iOS 7 及更高版本,因此我有这些 API 的重新分级后台执行:
beginBackgroundTaskWithExpirationHandler
后台获取
- 远程通知
beginBackgroundTaskWithExpirationHandler 并不适合这里,因为我需要在用户存在应用程序时手动调用它。
Background Fetch 似乎也不适合这里,因为它会在不需要时不断调用,并且会耗尽电池并给后端带来压力。
所以我只剩下远程通知,它们本质上是静默推送通知。我想到的用例是:
当应用程序在后台时,聊天中生成了一些新消息 房间.
后台向客户端发送Remote Notification
- 处理静默推送,客户端在后台获取聊天室中的任何新数据。
获取结束后,将触发本地通知。
用户在聊天室中打开带有新数据的应用程序。
这里的问题是,现在,远程通知是我在后台获取新消息的唯一机制,而推送通知据说是尽力而为 风格,而您不应将它们用作您的主要通信方式。
另一种方法是省去所有的后台下载,每次用户打开应用程序时只询问新数据,但这会损害用户体验。
总结一下:
- 我可以依赖远程通知作为我的主要方式吗 communications 在后台时(也可能在前台,在 聊天室也)?
- 在这种情况下我应该使用其他背景 API 吗?
我知道问题范围很广,缺乏重点,但主要是为了不重复造轮子。我假设我描述的场景很常见,只是想知道在写 code/spending 时间在一个不适合开始的策略之前解决它的最佳方法。
除非您希望应用程序直接收到新内容的通知,而不是定期检查它,否则我认为 Background Fetch 可以解决这个问题。它实际上不会经常被调用,并且您可以控制频率。如果您将获取间隔设置为最小值,系统将尽可能频繁地检查(取决于您的应用程序的质量 "background citizen")。至于功耗,如果你使用好 Fetch 并在正确的时间调用完成处理程序(一旦任务完成,或者当你的 30 秒快到时),系统会给你的应用程序获取数据的机会它将在考虑电池寿命的情况下管理 Background Fetch 的使用。而且它可能不会像发送大量推送那样给后端带来压力。 Fetch 对于像您这样的应用非常有用。