Статус авторизации HealthKit всегда 1

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

Вот мой код

// Steps

if ([self.healthStore authorizationStatusForType:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]] == HKAuthorizationStatusSharingAuthorized) {
    [self accessStepsFrom:fromDate to:toDate];
}

//Sleep
if ([self.healthStore authorizationStatusForType:[HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis]] == HKAuthorizationStatusSharingAuthorized) {
    [self accessSleepFrom:fromDate to:toDate];
}

//DOB
if ([self.healthStore authorizationStatusForType:[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]] == HKAuthorizationStatusSharingAuthorized) {
    [self accessDOB];
}

Метод [self.healthStore authorizationStatusForType:[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]] всегда бросает меня 1, Нужна помощь в этом?

2 ответа

Статус авторизации для HKObjectType не отражает наличие у вашего приложения полномочий на чтение образцов этих типов. Он только показывает, запрашивали ли вы авторизацию вообще и имеет ли ваше приложение право писать образцы этих типов. Таким образом, если ваше приложение запрашивает авторизацию для чтения образцов числа шагов, но не записывает их, а пользователь предоставляет авторизацию на чтение, то статус авторизации для HKQuantityTypeIdentifierStepCount будет HKAuthorizationStatusSharingDenied.

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

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

NSArray *readTypes = @[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]];

[self.healthStore requestAuthorizationToShareTypes:nil
                                         readTypes:[NSSet setWithArray:readTypes] completion:nil];
Другие вопросы по тегам