2014-09-23 2 views
0

Недавно яблоко отклонило мое приложение из-за причин.Приложение iOS Отклонено из-за использования режима фонового местоположения для geofence

Ниже приводится объяснение функциональности:

  1. Мы требуем, чтобы отслеживать запись пользователя и выход в регионы, полученные от сервера
  2. Если пользователи вводят в какой-то определенной области, мы также вызова веб-службы и подготовить новый набор геозонности. Мы определили этот тип заборов в качестве забора.
  3. Так что это также возможно. Некоторое время приложение находится в фоновом режиме, и пользователь может войти в зону перезагрузки, поэтому нам нужно позвонить в веб-сервис и настроить новые заборы в фоновом режиме.

Мы использовали под флагами info.plist поэтому приложение может работать в фоновом режиме:

1 Необходимые режимы фона:

  • App загрузки контента из сети
  • App регистры для размещения обновления

2 Необходимые устройства:

  • ARMv7

Дополнительной информация: приложения поддерживает прошивку 5.0 с прошивкой 8


Причина:

2.16: многозадачность приложение может использовать только фоновые услуги по назначению: VoIP, воспроизведение звука, местоположение, завершение задачи, местные уведомления и т. Д. ----- 2.16 -----

Мы обнаружили, что ваше приложение использует фоновый режим, но не включает в себя функциональные возможности, которые требуют, чтобы этот режим выполнялся постоянно. Это поведение не соответствует Руководству по обзору App Store.

Мы обнаружили, что ваше приложение объявляет о поддержке местоположения в ключе UIBackgroundModes в вашем Info.plist, но не включает функции, требующие постоянного местоположения.

Было бы уместно добавить функции, которые требуют постоянного использования обновлений местоположения в режиме реального времени, когда приложение находится в фоновом режиме или удаляет настройку «местоположение» из ключа UIBackgroundModes. Если ваше приложение не требует постоянных обновлений местоположения в режиме реального времени, мы рекомендуем использовать службу определения местоположения с существенным изменением или службу определения местоположения региона.

Дополнительную информацию об этих параметрах см. В разделе «Запуск службы определения местоположения с существенным изменением» и «Наблюдение за формами на основе формы» в Руководстве по программированию местоположения.

Если вы хотите добавить функции, которые используют режим Расположения фона, пожалуйста, включите следующие батареи Отказ от ответственности в вашем Описании Применения:

«Дальнейшее использование GPS работает в фоновом режиме может значительно уменьшить срок службы батареи.»


Любой один пожалуйста, предложите мне, что

  1. В моем случае, что info.plist настройки я должен использовать?
  2. Какие еще изменения я должен проверить в коде. ?

Заранее спасибо.

+0

Вам нужно указать точное местонахождение пользователя после его входа в регион? Если нет, вы можете просто отправить сервер координаты центра региона и попросить его рассчитать новые регионы. – Gad

+0

Здравствуйте, Gad, можете ли вы предложить мне изменения info.plist и как сбросить забор в фоновом режиме. – Nikh1414

+0

Привет, Ник, у меня такая же проблема, как вы ее решаете, я использую службы определения местоположения в фоновом режиме, –

ответ

0

Прежде всего, вам нужно удалить обновления местоположения с UIBackgroundModes.

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

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    [self setNewFencesFromWebServiceAtCoordinates:[(CLCircularRegion *)region center] withCompletionBlock:^(NSArray *locations) { 
     int i = 0; 
     for (CLLocation * location in locations) 
     { 
      i++; 
      CLLocationCoordinate2D regionCenter = [location coordinate]; 
      [manager startMonitoringForRegion:[[CLCircularRegion alloc] initWithCenter:regionCenter radius:100.0 identifier:[NSString stringWithFormat:@"location %d",i]]]; 
     } 
    }]; 
} 

- (void)setNewFencesFromWebServiceAtCoordinates:(CLLocationCoordinate2D)coordinates withCompletionBlock:(void(^)(NSArray * locations))completion 
{ 
    NSArray * newRegions; 

    // Write code to get the new regions from the web service and store them in an array of locations 

    completion(newRegions); 
}