从 iOS 8 开始,我的两个应用程序都开始遇到同样的问题。在 iOS 7 中,后台刷新触发非常可靠。在 iOS 8 中,它就停止了。如果我从 xcode 启动任一应用程序进入后台获取模式,一切都会正常工作。背景刷新在 iOS 中自行停止触发。我现在正在尝试一个充满希望的理论。这是我的想法...
如果用户强制从多任务屏幕中终止您的应用程序,iOS 会将其排除在后台刷新之外。 Apple 会如何实施这种行为?一种方法是将最小获取间隔设置为 UIApplicationBackgroundFetchIntervalNever。十分简单。让我们假设他们就是这样做的。您的应用程序是否在每次启动时设置最小获取间隔,还是仅在首次启动时设置?
就我而言,我只是将最小获取间隔设置为应用程序初始设置的一部分。如果用户强制终止了应用程序,并且 iOS 实际上将最小获取间隔设置为 UIApplicationBackgroundFetchIntervalNever,那么我的应用程序将陷入从不状态。我对我的一个应用程序做了一个小小的更改,以便它在每次启动时设置最小获取间隔。到目前为止,一切都很好。
Update:
我的后台一切都很好。
我当前正在开发的应用程序和我正在开发的应用程序应用商店 https://itunes.apple.com/us/app/in-concert-concert-listings/id633875595?mt=8再次可靠地触发后台获取。
执行此操作的代码can很简单...
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:minimumBackgroundFetchInterval];
每次应用程序启动时调用该值都可以解决问题,但是,您需要考虑设置该值是否适合应用程序的当前状态。就我而言,我的应用程序之一是音乐会列表应用程序。如果用户尚未选择音乐会地点,则设置最小后台获取间隔是没有意义的。我有一个 NSUserDefault 来跟踪是否已设置位置。这是我设置获取间隔的代码的近似值......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([INCUserDefaults isLocationConfigured]) {
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:kSecondsIntervalForUpcomingShowsBackgroundFetch];
}
return YES;
}
在我发布错误修复之前,我仅将最小后台获取间隔设置为设置过程的一部分。现在我在设置过程中设置它,and如果先前已完成设置过程,则在应用程序启动时。