我试图让我的应用在特定的预定时间执行后台提取。我想让iOS自己解决这个问题,所以(在AppDelegate中):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]];
}
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
然后(也在AppDelegate中)
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSDate *now = [NSDate date];
if ((([now timeIntervalSinceDate:lastCheckTime]/60) > 60)||(!lastCheckTime)) { //don't update more than once every hour
lastCheckTime = now;
[notificationUpdate getStatusUpdateWithCompletionHandler:completionHandler];
} else {
completionHandler(UIBackgroundFetchResultNewData);
}
}
如果我手动触发背景检查,在Xcode中,这非常有效。可悲的是,如果我把它留在自己的设备上,它并不能完美地工作。
如何安排执行getStatusUpdate函数的时间或导致在特定时间进行后台获取(实际用例将是应用程序将在用户定义的时间周围检查,如闹钟 - 这不是一直在运行并咀嚼电池的东西。
我在互联网上找到了很多关于安排闹钟的信息(包括这里 - 我在这里找到一个例子,建议使用CoreLocation来引发后台提取 - 我不知道这是否会起作用但是,出于省电的原因,我不喜欢这个想法。) - 但这只会导致警报显示在屏幕上,我不想显示警报 - 至少在此之前我已检查状态更新。
与往常一样,任何帮助都会非常感激(但我担心的答案是我不能做我想做的事!)。
答案 0 :(得分:2)
你无法做你想做的事。唯一的解决方法是实现推送通知,并让API在指定时间发送推送。