HealthKit - requestAuthorization(toShare:read:completion:)总是



我正在使用Xcode 8 beta 6,我正在请求访问健康应用程序。请求授权的方法requestAuthorization(toShare:read:completion:)在完成处理程序返回时总是产生true - success在下面的代码中。即使我在模拟器中拒绝一切,我也会得到true。这是我处理授权的代码。是我的代码出错了,还是这是一个Xcode bug?

import Foundation
import HealthKit
class HealthManager {
    private let healthStore = HKHealthStore()
    class var sharedInstance: HealthManager {
        struct Singleton {
            static let instance = HealthManager()
        }
        return Singleton.instance
    }
    private var isAuthorized: Bool? = false
    func authorizeHealthKit(completion: ((_ success: Bool) -> Void)!) {
        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)!]
        guard HKHealthStore.isHealthDataAvailable() else {
            completion(false)
            return
        }
        // Request Authorization
        healthStore.requestAuthorization(toShare: writableTypes, read: readableTypes) { (success, error) in
            if success {
                completion(true)
                self.isAuthorized = true
            } else {
                completion(false)
                self.isAuthorized = false
                print("error authorizating HealthStore. You're propably on iPad (error?.localizedDescription)")
            }
        }
    }
}

谢谢你的帮助!

你误解了成功标志的含义。YES表示成功显示权限屏幕,NO表示显示权限屏幕出错。来自Apple的HealthKit文档:

指示请求是否被成功处理的布尔值。该值并不表示是否实际授予了权限。如果在处理请求时发生错误,则此参数为NO;否则,为YES。

如果你想检查你是否有写数据的访问权限,你需要使用authorizationStatus(for:),但注意你不能确定读数据的授权。

该方法检查保存数据的授权状态

为了防止可能的敏感健康信息泄露,您的应用程序无法确定用户是否授予了读取数据的权限。如果未授予权限,则会显示为HealthKit存储中没有请求类型的数据。如果你的应用程序被赋予了共享权限,但没有读权限,你只能看到你的应用程序已经写入到商店的数据。其他来源的数据仍然是隐藏的。

文档在这里:https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKHealthStore_Class/index.html

相关内容

  • 没有找到相关文章

最新更新