在我的观看扩展程序中,我将此功能称为:
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")
答案 0 :(得分:0)
使用此TestHealthKit,我可以打开health-kit权限表。
// 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;
}
}
答案 1 :(得分:-1)
如文档中所述,如果您的应用使用读取或更新用户健康数据的API,则必须向.plist添加必要的密钥。
NSHealthShareUsageDescription
-给用户的消息,解释了为什么该应用请求从HealthKit存储中读取样本的权限。
NSHealthUpdateUsageDescription
-给用户的消息,解释了为什么应用程序请求将样本保存到HealthKit存储的权限。