HealthKit: HKObserverQuery не стреляет
Я пытаюсь сделать довольно простую вещь: настроить HKObserverQuery, чтобы я мог знать, когда меняются различные точки данных (я убедился, что пользователь разрешил приложению использовать эту точку данных). По любой причине Я могу заставить запрос запускаться каждый раз, когда приложение запускается, но он не срабатывает, когда я закрываю приложение, захожу в приложение Health и вручную обновляю точку данных. Я провел немало поисков и не смог успешно использовать код, который опубликовали другие, код, который, по их словам, работает на них.
Я две недели занимаюсь разработкой Cocoa/Objective C, так что я уверен, что упускаю что-то очевидное, но не вижу, что это такое. Любое руководство здесь было бы замечательно, даже если это просто совет по отладке. Поскольку само приложение закрыто, и я не получаю ничего, что могло бы выйти из консоли, у меня нет никакой информации о том, что происходит.
Код, который я использую для запроса наблюдателя, приведен ниже:
HKQuantityType *heartRate = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
[self.healthStore enableBackgroundDeliveryForType:heartRate frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"observing heart rate");
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]];
}else{
NSLog(@"FAILED observing heart rate");
}
}];
HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:heartRate predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]];
}];
[self.healthStore executeQuery:query];
Спасибо!
2 ответа
Я обнаружил, эмпирически (не из документации), что запрос наблюдателя не запускается при работе в симуляторе, но срабатывает при работе на устройстве. И у меня не включена возможность фоновых режимов.
Когда вы приостанавливаете приложение на iOS, по умолчанию оно останавливается, если оно не приняло утверждение фоновой задачи или не имеет разрешения в фоновом режиме. Приложение не может получать уведомления, когда оно не запущено. HealthKit имеет функцию, которая может разбудить ваше приложение в фоновом режиме, когда появляются новые образцы определенного типа. См. Документацию " Управление фоновой доставкой" для HKHealthStore. Используйте это вместе с HKObserverQuery, чтобы получать уведомления, когда появляются новые данные, даже если ваше приложение еще не запущено.