Я пытаюсь получить мое приложение для выполнения фоновой выборки в определенное, запланированное время. У меня была идея позволить IOS разобраться в этом для себя, так (в AppDelegate):Планирование эскиза фона в iOS
- (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, чтобы вызвать фоновое извлечение, - я не знаю, будет ли это работать, но по соображениям экономии энергии мне не нравится эта идея.) - но это просто вызывает предупреждение, которое будет отображаться на экране, и Я не хочу отображать предупреждение - по крайней мере, не раньше, чем я проверил обновления статуса.
Как всегда, любая помощь будет очень благодарна (но я боюсь, что ответ заключается в том, что я не могу делать то, что хочу!).
Когда вы говорите push-уведомления, вы имеете в виду от моего собственного сервера? Или можно что-то настроить, чтобы он полностью работал по телефону? – headbanger
От вашего сервера. Вы не можете сделать это полностью на своем телефоне. –
Какая жалость. Здесь мы надеемся, что код Apple в будущем будет выполнен по расписанию - похоже, такая очевидная вещь. Очевидно, что им нужно будет убедиться, что эта способность не подвергается насилию (точно так же, как они наверняка должны делать для геолокации основных местоположений) – headbanger