Несанкционированный HealthKit против 0 записей в наборе

IOS 9.2.1, Swift 2.1

Я пытаюсь дать пользователю разумное сообщение об ошибке при доступе к HealthKit, и по запросу возвращается 0 записей.

Возможно, что в выбранном временном интервале не было записей или пользователь запретил доступ к этому конкретному набору данных в пределах работоспособности. В обоих случаях "storage.requestAuthorizationToShareTypes" предоставляет "успешное" значение true.

Есть ли способ заставить магазин HKHealthKit дать мне код, который указывает, что доступ был отключен?

Мой код ниже

Спасибо майк

import Foundation
import HealthKit

// Interface to the HealthKit

class HealthKitIF {

let storage = HKHealthStore()
var stepsEnabled = false
var bgEnabled = false
var hkSupported =  false

init () {
        self.checkAuthorization()
}

func checkAuthorization () -> Bool {
    // Default to assuming that we're authorized
    var isEnabled = true

    if (NSClassFromString("HKHealthStore") != nil) { hkSupported = true }

    // Do we have access to HealthKit on this device?
    if ((hkSupported) && (HKHealthStore.isHealthDataAvailable())) {
       // We have to request each data type explicitly

      // Ask for BG
       var readingsSet = Set<HKObjectType>()
        readingsSet.insert(HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodGlucose)!)
        readingsSet.insert(HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!)
        storage.requestAuthorizationToShareTypes(nil, readTypes: readingsSet) { (success, error) -> Void in
            isEnabled = success
            self.bgEnabled = success
        }

     }
    else
    {
        isEnabled = false
    }

    return isEnabled
}

1 ответ

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

Из ссылки на класс HKHealthStore:

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

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