ios - swift:如何请求 HealtKit 许可?

标签 ios swift permissions authorization

我希望我的 iOS 应用程序能够与 Apple 的 HealKit 交互。

为了请求授权,我使用了这几行:

public func requestHealthkit() {
    let healthStore = HKHealthStore()
    var shareTypes = Set<HKSampleType>()
    shareTypes.insert(HKSampleType.workoutType())
    var readTypes = Set<HKObjectType>()
    readTypes.insert(HKObjectType.workoutType())

    healthStore.requestAuthorization(toShare: shareTypes, read: readTypes) { (success, error) -> Void in
        if success {
            print("[HealthKit] request Authorization succeed!")
        } else {
            print("[HealthKit] request Authorization failed!")
        }
        if let error = error { print("[HealthKit] An error occurred: \(error)") }
    }
} 

编辑1(使用这种方式也行不通):

healthStore.requestAuthorization(toShare: shareTypes, read: readTypes) { (success, error) in
   print("I'm not called. However! :p")
}

编辑2(这是我的info.plist): 我已将 NSHealthUpdateUsageDescription 添加到 info.plist 文件中,并启用了运行状况工具包功能。

image 1

这些是我的功能设置:

image 2

但是调用函数 requestHealthkit() 将工作也不会产生任何错误消息或日志,只是 -> N-O-T-H-I-N-G。

这是请求 HealthKit 授权的正确方法还是我做的事情完全错误? (2.场景是很可能的情况)

非常感谢您的帮助,谢谢。

最佳答案

我已成功提交申请表。看看另一个问题( HealthKit - requestAuthorization(toShare:read:completion:) always succeeds )。看来您的集合中使用的类型不是预期的。

override func viewDidAppear(_ animated: Bool) {
    if HKHealthStore.isHealthDataAvailable() {
        if let hk = (UIApplication.shared.delegate as! AppDelegate?)?.healthStore {
            self.requestHealthkit(hk)
        }
    }
}

private func requestHealthkit(_ healthStore:HKHealthStore) {
    let writableTypes: Set<HKSampleType> = [
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!,
        HKWorkoutType.workoutType(),
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!,
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned)!,
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!
    ]
    let readableTypes: Set<HKSampleType> = [
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!,
        HKWorkoutType.workoutType(),
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!,
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned)!,
        HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!
    ]


    healthStore.requestAuthorization(toShare: writableTypes, read: readableTypes) { (success, error) -> Void in
        if success {
            print("[HealthKit] request Authorization succeed!")
        } else {
            print("[HealthKit] request Authorization failed!")
        }
        if let error = error { print("[HealthKit] An error occurred: \(error)") }
    }
}

关于ios - swift:如何请求 HealtKit 许可?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48509061/

相关文章:

ios - 不同tableView部分的核心数据对象

swift - 如何使用来自 JSON 数据的自动完成功能 Swift

swift - 如何使用分支和边界的方法解决问题?

mysql root权限更新information_schema错误

linux - 如何创建我自己的 "sudo"程序?

ios - Swift 实例化 UIViewController 并在同一文件中添加为 subview

iphone - UILocalNotification repeatInterval + applicationIconBadgeNumber

json - 由于其格式而无法正确解析 JSON 数据?

java - 防止 URI 导航

ios - Sprite Kit 不会停止添加节点