>如果新数据可用且应用程序处于后台,应用程序应显示通知(如果应用程序未运行,则应该没有通知)
>此外,应用程序应同步数据,以便数据是最新的
>用户应该能够在进行同步时选择间隔(5秒,30秒……)
>该应用程序应在iOS 6及更高版本上运行.
声明:
本地通知的问题是您只能将秒,分钟,小时……设置为间隔.无法设置自定义间隔.但是这种类型只适用于我有后台任务,它会搜索更新,如果有更新,它会立即显示本地通知.
另一方面的远程通知需要额外的服务器来进行通知.此外,端口5223必须是开放的以接收通知(但是大多数时候使用蜂窝网络并且这里端口应该是打开的).可以向用户发送和呈现多少个远程通知?对于本地通知,它是64.
在后台运行:
仅在iOS 7中提供后台提取和远程显示.后台提取的问题在于,只应传输小数据,并且操作系统确定应用程序何时获得时间段(自己的算法从用户学习).消息来源报告最多执行时间从30秒开始,但我没有找到Apple的官方声明.
远程通知似乎也需要提供者.但是在这里,用户会收到通知,应用程序可以在后台下载/同步新数据(同样最多30秒).
iOS 6怎么样?
另一个选择是让app在后台运行/有一个后台线程,它检查某个intervall的更新/同步,然后创建一个本地通知.但该应用程序在后台运行多长时间?我读了大约5秒,这将是短暂的.
另一个是使用推送通知,如果用户启动应用程序则执行同步过程.
beginBackgroundTaskWithExpirationHandler似乎不适合我的情况.
如何在后台运行并同步时收到通知?
您可能知道,iOS上的后台处理相当有限. iOS不会让您的应用程序无限期地在后台运行.如果您使用beginBackgroundTaskWithExpirationHandler,您的应用程序将获得一些后台运行时(iOS 6上10分钟,iOS 7上3分钟),但是当应用程序仍然是后台时,您无法“更新”该时间.因此,你的第二个选项(“让应用程序在后台运行/有一个后台线程检查更新/以某个时间间隔同步”)是不切实际的,除非你愿意滥用其他后台模式(这可能会使AppStore失败)审查过程).从iOS 7开始,可以发送“无声”推送通知(即具有内容可用设置的推送通知),例如,将直接发送到应用程序的通知(而不是仅在用户确认时显示警报并仅启动应用程序).这对背景化起了重要作用,实际上非常方便.每当您的应用收到此类推送通知时,它都可以检查新数据,同步数据等(运行时间大约为30秒).苹果声称要限制“无声”推送通知,但没有太多细节.在我的实践中,每15分钟发送一次似乎有效.
您可能会争辩说30秒是很难同步数据的方法.确实如此.要解决此问题,iOS 7引入了后台下载和上传,您可以通过使用[NSURLSessionConfiguration backgroundSessionConfiguration:]配置的NSURLSession启动.下载/上传将由系统处理,一旦完成,您的应用程序将被唤醒处理它.
据我所知,这是您从后台应用程序进行常规数据同步的最佳方法.但这不适用于iOS 6.
或者,如果您的服务器可以决定是否有新数据可用以及是否应该提醒用户,则传统的推送通知应该足够了.在这种情况下,您的应用程序无需在后台运行并检查新数据(服务器可以执行此操作并发送带有警报/声音的远程通知).这显然也适用于iOS 6.