tes*_*ing 3 background-process apple-push-notifications ios
我在这里有一些要求,现在我想检查这些要求是否可行以及如何达到这些要求.它是关于通知和在后台运行:
通知:本地通知
的问题是您只能将秒,分钟,小时......设置为间隔.无法设置自定义间隔.但是这种类型只适用于我有后台任务,它会搜索更新,如果有更新,它会立即显示本地通知.
另一方面的远程通知需要额外的服务器来进行通知.此外,端口5223必须是开放的以接收通知(但是大多数时候使用蜂窝网络并且这里端口应该是打开的).可以发送多少个远程通知并呈现给用户?对于本地通知,它是64.
运行在后台:
只有iOS的7 Background Fetch和Remote Notficiations可用.问题Background Fetch是只应传输小数据,并且操作系统确定应用程序何时获得时间段(自己的算法从用户学习).消息来源报告最多 执行时间从30秒开始,但我没有找到Apple的官方声明.
Remote Notifications似乎也需要一个提供者.但是在这里,用户会收到通知,应用程序可以在后台下载/同步新数据(同样最多30秒).
iOS 6怎么样?
另一个选择是让app在后台运行/有一个后台线程,它检查某个intervall的更新/同步,然后创建一个本地通知.但该应用程序在后台运行多长时间?我读了大约5秒,这将是短暂的.
另一个是使用推送通知,如果用户启动应用程序则执行同步过程.
beginBackgroundTaskWithExpirationHandler 似乎不适合我的情况.
如何在后台运行并同步时收到通知?
小智 7
您可能知道,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.