ios 8后台获取永远不会在设备上多次调用

Posted

技术标签:

【中文标题】ios 8后台获取永远不会在设备上多次调用【英文标题】:ios 8 Background fetch is never called on device more than once time 【发布时间】:2015-09-22 15:05:33 【问题描述】:

我为 ios 上的后台提取创建了一个测试应用。它通过调试在模拟器上正常工作 - >模拟后台获取。但在装有 iOS 8 的设备上,它每天只调用一次。如何强制 iOS 更频繁地调用它?

这是我的步骤和代码:

1) 项目->能力->后台模式->后台获取

2) 应用代理:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions    
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    NSDate *now = [NSDate date];
    localNotification.fireDate = now;
    localNotification.alertBody = [NSString stringWithFormat:@"Background fetch!"];
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    NSInteger number = [UIApplication sharedApplication].applicationIconBadgeNumber;
    number++;
    localNotification.applicationIconBadgeNumber = number;
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

    completionHandler(UIBackgroundFetchResultNewData);

每次调用后台提取时都会出现本地通知。

【问题讨论】:

从来没有打过电话或一天打过一次电话,是什么?你的两个陈述完全相互矛盾。你不能强制它什么时候发生,操作系统决定它什么时候发生,如果操作系统每天调用一次,那么它就可以工作。调用的时间和频率取决于应用设备的使用情况。 您希望多久调用一次后台提取? performFetchWithCompletionHandler not getting called on fixed time interval 的可能重复项 @MartinH 对这种矛盾感到抱歉,我的意思是它只调用一次,并且永远不会调用更多 @BlackFrog 至少第二次 :) 【参考方案1】:

在这种情况下,您所能做的就是验证您的代码是否有效。后台获取发生的确切时间由 iOS 管理。这已在this SO answer 中讨论过

如果您想测试自己的代码,可以选择Xcode->Debug->Simulate Background Fetch,在模拟器中运行您的应用程序来测试

【讨论】:

以上是关于ios 8后台获取永远不会在设备上多次调用的主要内容,如果未能解决你的问题,请参考以下文章

iBeacon:didEnterRegion 永远不会被调用

在 Android Studio 中永远不会调用 onLocationUpdate

requestFileSystem 永远不会在 iOS 上返回 Cordova 3.4

从后台队列调用时,核心数据 NSManagedObjectContext 保存永远不会返回

在几秒钟内多次调用 Healthkit 后台交付

在几秒钟内多次调用 Healthkit 后台交付