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, чтобы получать уведомления, когда появляются новые данные, даже если ваше приложение еще не запущено.

Другие вопросы по тегам