Лист разрешения HealthKit не отображается
В моем расширении часов я вызываю эту функцию:
func requestAuthorization() {
let healthStore = HKHealthStore()
let workoutType = HKObjectType.workoutType()
let heartRateType = HKObjectType.quantityType(forIdentifier: .heartRate)
//reading
let readingTypes = Set([heartRateType!, workoutType])
//writing
let writingTypes = Set([heartRateType!, workoutType])
//auth request
healthStore.requestAuthorization(toShare: writingTypes, read: readingTypes) { (success, error) -> Void in
if error != nil {
print("error \(error?.localizedDescription)")
} else if success {
self.startButton.setEnabled(true)
} else if !success {
self.startButton.setEnabled(false)
}
}
}
И в AppDelegate.swift у меня есть:
func applicationShouldRequestHealthAuthorization(_ application: UIApplication) {
let healthStore = HKHealthStore()
healthStore.handleAuthorizationForExtension { (success, error) -> Void in
//...
}
}
Я получаю диалог на своих часах и телефоне, и он открывает приложение на телефоне, когда я говорю это из диалога. У меня проблема в том, что телефонное приложение не отображает лист разрешений, который должен отображаться для разрешения разрешений. Список разрешений упоминается здесь: https://developer.apple.com/reference/healthkit
Что мне нужно сделать, чтобы он появился, чтобы разрешения могли быть предоставлены? В настоящее время я могу предоставить разрешения, зайдя в приложение Health, а затем в источники, выбрав мое приложение и предоставив разрешения таким образом.
Лист разрешения, о котором я говорю, это.
РЕДАКТИРОВАТЬ: я получаю эту ошибку напечатан из вызова метода requestAuthorization().
error Optional("Required usage description strings not present in app\'s Info.plist")
1 ответ
С помощью этого TestHealthKit мне удалось открыть лист разрешений аптечки.
// 4. Request HealthKit authorization
(HealthStore as! HKHealthStore).requestAuthorizationToShareTypes(nil, readTypes: dataTypesToRead()) { (success, error) -> Void in
// self.CheckAuthorizationStatusFor(self.dataTypesToRead())
if (success)
{
SuccessCompletion(success: success)
return;
}
else
{
FailureCompletion(err: error)
return;
}
}
Кроме того, проверьте, активировали ли вы права, как показано. ,
Как указано в документации, вы должны добавить необходимые ключи в.plist, если ваше приложение использует API, которые считывают или обновляют данные о состоянии здоровья пользователей.
NSHealthShareUsageDescription
- Сообщение для пользователя, объясняющее, почему приложение запросило разрешение на чтение образцов из хранилища HealthKit.
NSHealthUpdateUsageDescription
- Сообщение для пользователя, объясняющее, почему приложение запросило разрешение на сохранение образцов в хранилище HealthKit.