Ошибка мониторинга региона на iOS 7 - несколько уведомлений одновременно
Я занимаюсь мониторингом региона на iOS около 2 месяцев. Недавно мы обнаружили сбой, при котором все области в пределах определенного радиуса (около 4,7 км или 4700 метров) сработали одновременно. Текущее местоположение устройства даже не близко ни к одному из регионов. Я не уверен, что могло вызвать это событие. Я искал в StackOverFlow, на форумах Apple Developer и т. Д., Я не нашел подобной проблемы с тем, с чем сталкиваюсь.
В приложении, которое я разрабатываю, мы отслеживаем 8 регионов в городе (Куала-Лумпур). В одном случае мой коллега узнал, что на его телефоне одновременно сработало уведомление 4 регионов. Ниже приведена карта, показывающая его местоположение, все контролируемые регионы, потенциальный радиус, который вызвал 4 уведомления региона.
Зеленый маркер - это местоположение устройства при получении уведомления.Синий круг - это потенциальный радиус устройства (около 4700 метров), который охватывает 4 области, которые отправляют уведомление на устройство.Красный круг - это радиус для каждого региона.На карте есть еще 2 региона, которые никогда не отправляют уведомления (никогда не закрываются синим кружком)Снимок экрана с запущенными уведомлениями:
Вот мой код для менеджера местоположения: -
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
Вот мой код для didEnterRegion: -
-(void)locationManager:(CLLocationManager *)manager
didEnterRegion:(CLRegion *)region{
NSString* message = [NSString stringWithFormat:@"Message"];
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate date];
NSTimeZone* timezone = [NSTimeZone defaultTimeZone];
notification.timeZone = timezone;
notification.alertBody = message;
notification.alertAction = @"Show";
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
}
Замечания: Эта проблема возникает не каждый раз, а только время от времени. 4700 метров - это радиус, который я получил после анализа местоположения 4-х запущенных областей. Я не уверен, что это сбой в моем коде, на iOS или есть проблема с местной телефонной компанией в моей стране. В последней версии приложения я настраиваю distanceFiter на 10, и мы тестируем его прямо сейчас, чтобы посмотреть, решит ли это проблему.
//locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.distanceFilter = 10;
МетодdidEnterRegion никогда не возвращать местоположение пользователя, я не могу отфильтровать потенциально плохое местоположение с большим радиусом, как в примере, который я показываю выше. Что я могу сделать, чтобы решить этот глюк?
Любой разработчик, который сталкивается с подобной проблемой, пожалуйста, поделитесь своим опытом и решением этой проблемы (если есть). Благодарю.