Как определить, установлены ли данные HealthKit с устройства? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь получить шаги пользователя из HealthKit и понял, что пользователи могут добавлять шаги вручную, которые я не хочу получать.(Например, если они обманывают и устанавливают 50k шагов в один день).

Итак, я подумал над решением, как решить эту проблему, и обнаружил, что, возможно, я мог бы просто отфильтровать весь результат и извлечь данные, если данные были установлены устройством.Я имею в виду, что он может быть установлен на iPhone, но он также может быть установлен на Apple Watch.

Вот как это выглядит, когда пользователь добавляет свои собственные шаги вручную в приложении Health:

Steps added by an user

Вот как это выглядит при добавлении шагов устройством:

Steps added by a watch

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

Вопрос: Как узнать, есть ли устройство в результате?

Мой текущий код для получения результатов:

func getSteps(completion: @escaping (Double, Error?) -> ()) {
    let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!

    let query = HKSampleQuery(sampleType: stepsQuantityType, predicate: nil, limit: 0, sortDescriptors: nil){ query, results, error in
        if let error = error {
            // Handle error
        } else if let results = results, !results.isEmpty {
            for result in results {
                // Detect and add result if result is from a device
            }
        }
    }

    HKHealthStore().execute(query)
}

1 Ответ

0 голосов
/ 16 октября 2018

Я только что понял, что могу определить, существует ли устройство по result.device, где device является необязательным значением.Таким образом я могу проверить, является ли значение nil или нет.

func getSteps(completion: @escaping (Double, Error?) -> ()) {
    let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!


    let query = HKSampleQuery(sampleType: stepsQuantityType, predicate: nil, limit: 0, sortDescriptors: nil){ query, results, error in
        if let error = error {
            // Handle error
        } else if let results = results, !results.isEmpty {
            for result in results {
                if result.device != nil {
                    // Result is from a device
                } else {
                    // Not a device
                }
            }
        }
    }

    HKHealthStore().execute(query)
}
...