我有一个应用程序,从通讯录同步其联系人,我只需要检查新的联系人,并同步到我的应用程序数据库中的联系人每天午夜自动。
我已经通过了iOS7新功能"Background Fetch",但这与我的要求不匹配,在这种情况下,后台获取将由操作系统根据用户活动触发。
然而,我的数据在凌晨12点之前就过时了,如果在这个特定的时间没有启动这个活动,我的应用程序将变得无用。
有没有办法实现我所需要的,以便我可以同步我的数据库与地址簿每天午夜使用后台进程。
谢谢
发布于 2014-01-21 18:16:16
您可以订阅ABAddressBookRegisterExternalChangeCallback,以便在修改通讯簿数据库时接收通知。我认为这比调度同步更好,然而,只有当应用程序在前台时,这才会起作用。但当应用程序被挂起时,它不能做任何直接唤醒自己的事情。它之前不能调度NSTimer,它不能使用performSelector:afterDelay之类的东西等等。应用程序再次激活的唯一方法是如果用户做了一些事情来激活它,例如,收到本地或远程通知,并弹出一个警报。只有当应用程序有后台模式时,才允许长时间在后台模式下执行,这些模式包括:voip、audio、location、newstand。即使应用程序具有这些类型中的一种,也无法在没有某些限制的情况下执行其代码。
因此,唯一的方法是iOS 7的特性:background task execution if content avaliable,正如James Frost所建议的那样,但是要做到这一点,你需要你的外部服务器,它将向你的应用程序发送推送通知。
你说:"...is not started at this particular time instance my app will be rendered useless.",但是在应用程序再次启动之前,谁来检查这个呢?如果时间值之间的增量大于某个值,为什么不能在每次应用程序运行期间使用地址簿进行所有关键更新?我的意思是,您可以(当应用程序返回到applicationDidFinishLaunching中的前台时)计算NSDate now和您在同步完成后存储在NSUserDefaults或plist中的最后一个同步日期值之间的增量。如果增量大于24小时,则再次调用同步方法。
https://stackoverflow.com/questions/21254533
复制相似问题