startUpdatingLocation LocationManager посредством бесшумного push-уведомления

Я создаю приложение, которое нужно проснуться в фоновом режиме в определенное время.

Я пытался :

  1. UILocalNotification: Но я не хочу использовать UILocalNotification, потому что для взаимодействия с пользователем требуется уведомление, и только приложение будет просыпаться и запускать диспетчер местоположений.

  2. Я также использовал [locationManager startUpdatingLocation]; включен с фоновыми режимами. Обновления местоположения, это работает, но потребуется много батареи.

Таким образом, с использованием новой функции iOS 7 Silent pushNotification и didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: метод didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: нужно запустить менеджер местоположений в фоновом режиме,

 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"Receive RemoteNotification in fetchCompletionHandler with UserInfo:%@",userInfo); application.applicationIconBadgeNumber=0; __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ [self.locationManager startUpdatingLocation]; [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; } 

Уведомление Silent Push работает правильно,

Полезная нагрузка для PushNotification:

 {"aps" : {"content-available" : 1},"SilentPushId" : "07"} 

Но это не запустит менеджер местоположений, пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ:

Если это невозможно, пожалуйста, дайте мне несколько предложений.

Я успешно реализую это использование Silent Pushnotification & it Call startUpdatingLocation, и я могу получить данные о местоположении в методе делегирования:

Использование этой полезной нагрузки:

 { "aps": { "content-available": 1 }, "SilentPush": "4" } 

Я включил местоположение и удаленное уведомление для фонового режима: введите описание изображения здесь

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler { __block UIBackgroundTaskIdentifier bgTask =0; UIApplication *app = [UIApplication sharedApplication]; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [self.locationManager startUpdatingLocation]; }]; 

didUpdateLocations

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { lastLoc=[locations lastObject]; [logFile addLocObject:[NSString stringWithFormat:@"Loc: %@",lastLoc]]; } 

Ты не можешь. Явным образом не разрешается запускать службы определения местоположения, пока приложение находится в фоновом режиме. Пользователь должен знать о начале с открытием приложения.

Представьте, какое подрывное отслеживание будет доступно, если вы сможете отправлять тихие уведомления, чтобы инициировать обновление местоположения на сервере, не зная об этом пользователя …

Что вы можете сделать, на заднем плане, получать значительные события локации и граничные события. Я могу представить, что можно использовать эту возможность для ведения журнала недавних местоположений. Когда ваше удаленное уведомление получено, ответьте, отправив последнее известное местоположение. С небольшим количеством экспериментов я уверен, что вы можете уточнить это, чтобы быть достаточно точным, мало влияя на батарею.

Если вы хотите обновить местоположение в фоновом режиме, вы просто активируете UIBackgroundModes в файле plist. См. Описание startUpdatingLocation в документе apple .

Если вы запустите эту услугу, и ваше приложение приостановлено, система прекратит доставку событий, пока ваше приложение не начнет работать снова (на переднем плане или в фоновом режиме). Если ваше приложение прекращено, доставка новых событий местоположения полностью прекращается. Поэтому, если ваше приложение должно получать события местоположения в фоновом режиме, оно должно включать в свой файл Info.plist ключ UIBackgroundModes (со значением местоположения).

Вы можете включить это для обновления фона в xcode5 +, как показано ниже.

введите описание изображения здесь

Давайте будем гением компьютера.