Здравствуйте, я пытаюсь настроить обозреватель хранилища здоровья с включенной фоновой доставкой. Моя проблема в том, что он ничего не доставляет, когда экран заблокирован. Я упростил свой код для этого вопроса, чтобы добраться до сути :) У меня есть HealthKit в моем plist, и я принял количество шагов типа HealthStore. Все нормально, когда приложение открыто и когда экран не заблокирован. Но когда экран заблокирован, я не получаю никаких замечаний. В целях тестирования частота установлена на немедленную.
Мой код выглядит следующим образом
- (void)setupHealthStore{
if ([HKHealthStore isHealthDataAvailable])
{
NSSet *readDataTypes = [self dataTypesToRead];
self.healthStore = [[HKHealthStore alloc]init];
[self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes completion:^(BOOL success, NSError *error)
{
if (success)
{
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
[self.healthStore enableBackgroundDeliveryForType:quantityType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error)
{
if (success)
{
[self setupObserver];
}
}];
}
}];
}
}
Вышеупомянутый метод вызывается в AppDelegate didfinishLaunchWithOptions.
Следующий метод
- (void)setupObserver{
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKObserverQuery *query = [[HKObserverQuery alloc]initWithSampleType:quantityType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error)
{
if (!error)
{
[self alarm];
if (completionHandler)
{
NSLog(@"Completed");
completionHandler();
}
}
else
{
if (completionHandler)
{
completionHandler();
}
}
}];
[self.healthStore executeQuery:query];
}
Когда я открываю приложение, оно сразу возвращает наблюдение.