繁体   English   中英

如何在后台和数据同步中获取通知

[英]How to get notifications in background and data synchronization

我在这里有一些要求,现在我想检查这些要求是否可行以及如何达到这些要求。 它是关于通知和在后台运行:

  • 如果新数据可用且应用程序处于后台,应用程序应显示通知(如果应用程序未运行,则应该没有通知)
  • 此外,应用程序应同步数据,以便数据是最新的
  • 用户应该能够选择应该进行同步的间隔(5秒,30秒......)
  • 该应用程序应在iOS 6及更高版本上运行。

声明:
本地通知的问题是您只能将秒,分钟,小时......设置为间隔。 无法设置自定义间隔。 但是这种类型只适用于我有后台任务,它会搜索更新,如果有更新,它会立即显示本地通知。

另一方面的远程通知需要额外的服务器来进行通知。 此外,端口5223必须是开放的以接收通知(但是大多数时候使用蜂窝网络并且这里端口应该是打开的)。 可以向用户发送和呈现多少个远程通知? 对于本地通知,它是64。

在后台运行:
仅在iOS 7中提供Background FetchRemote Notficiations显示。 Background Fetch的问题在于,只应传输小数据,并且操作系统确定应用程序何时获得时间段(自己的算法从用户学习)。 消息来源报告最多 执行时间从30秒开始,但我没有找到Apple的官方声明。

Remote Notifications似乎也需要提供者。 但是在这里,用户会收到通知,应用程序可以在后台下载/同步新数据(同样最多30秒)。

iOS 6怎么样?

另一个选择是让app在后台运行/有一个后台线程,它检查某个intervall的更新/同步,然后创建一个本地通知。 但该应用程序在后台运行多长时间? 我读了大约5秒,这将是短暂的。

另一个是使用推送通知,如果用户启动应用程序则执行同步过程。

beginBackgroundTaskWithExpirationHandler似乎不适合我的情况。

如何在后台运行并同步时收到通知?

您可能知道,iOS上的后台处理相当有限。 iOS不会让您的应用程序无限期地在后台运行。 如果您使用beginBackgroundTaskWithExpirationHandler ,您的应用程序将获得一些后台运行时(iOS 6上10分钟,iOS 7上3分钟),但是当应用程序仍然是后台时,您无法“更新”该时间。 因此,你的第二个选项(“让应用程序在后台运行/有一个后台线程检查更新/以某个时间间隔同步”)是不切实际的,除非你愿意滥用其他后台模式(这可能会使AppStore失败)审查过程)。

从iOS 7开始,可以发送“静音”推送通知(即具有content-available设置的推送通知),例如将直接发送到应用程序的通知(而不是仅在用户确认时显示警报和仅启动应用程序)。 这对背景化起了重要作用,实际上非常方便。 每当您的应用收到此类推送通知时,它都可以检查新数据,同步数据等(运行时间大约为30秒)。 苹果声称要限制“无声”推送通知,但没有太多细节。 在我的实践中,每15分钟发送一次似乎有效。

您可能会争辩说30秒是很难同步数据的方法。 确实如此。 为了解决这个问题的iOS 7中引入的背景下载和上传,您可以通过启动NSURLSession与配置[NSURLSessionConfiguration backgroundSessionConfiguration:] 下载/上传将由系统处理,一旦完成,您的应用程序将被唤醒处理它。

据我所知,这是您从后台应用程序进行常规数据同步的最佳方法。 但这不适用于iOS 6。

或者,如果您的服务器可以决定是否有新数据可用以及是否应该提醒用户,则传统的推送通知应该足够了。 在这种情况下,您的应用程序无需在后台运行并检查新数据(服务器可以执行此操作并发送带有警报/声音的远程通知)。 这显然也适用于iOS 6。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM