2016-10-08 11 views
0

私のアプリケーションは、ユーザーがHealthkitへのアクセスを許可できるHealthKitの権限画面を開いていません。 私の時計に、自分のアプリが「あなたの健康データにアクセスしたい」という画面が表示されます。しかし、電話機は設定を呼び出す代わりにアプリの起動画面と最初のページに移動するだけです。エラーはありません。アプリは下記のコードで認証をリクエストしています。何か案は?HealthKitのアクセス権が開けません

import UIKit 
import WatchConnectivity 
import HealthKit 


@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate { 

var window: UIWindow? 
let healthStore = HKHealthStore() 


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    WatchSessionManager.sharedManager.startSession() 


    return true 
} 


// authorization from watch 
func applicationShouldRequestHealthAuthorization(application: UIApplication) { 

    let healthStore = HKHealthStore() 

    let quantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) 

    let calorieQuantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned) 

    let dataTypesToRead = NSSet(objects: HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!, HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!) 
    healthStore.requestAuthorizationToShareTypes(nil, readTypes: dataTypesToRead as! Set<HKObjectType>, completion: { (success, error) in 
     if success { 
     } else { 
      print(error!.description) 
     } 
     }) 

    healthStore.handleAuthorizationForExtensionWithCompletion { success, error in 

    } 
} 

答えて

2
let healthKitStore:HKHealthStore = HKHealthStore() 

     func authorizeHealthKit(completion: ((_ success:Bool, _ error:NSError?) -> Void)!) 
     { 
      //check app is running on iPhone not other devices(iPad does not have health app) 
      if !HKHealthStore.isHealthDataAvailable() 
      { 
       let error = NSError(domain: "DomainName.HealthKitTest", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"]) 
       if completion != nil 
       { 
        completion(false, error) 
       } 
       return; 
      } 

      healthKitStore.requestAuthorization(toShare: healthKitTypeToWrite() as? Set<HKSampleType>, read: nil) { (success, error) -> Void in 

       if completion != nil 
       { 
        print("Success: \(success)") 
        print("Error: \(error)") 
        completion?(success, error as NSError?) 
       } 
      } 
     } 

     func healthKitTypeToWrite() -> NSSet { 
      let typesToWrite = NSSet(objects: HKQuantityType.quantityType(forIdentifier: .dietaryFatTotal), 
               HKQuantityType.quantityType(forIdentifier: .dietaryFatSaturated), 
               HKQuantityType.quantityType(forIdentifier: .dietaryCarbohydrates), 
               HKQuantityType.quantityType(forIdentifier: .dietarySugar), 
               HKQuantityType.quantityType(forIdentifier: .dietaryProtein), 
               HKQuantityType.quantityType(forIdentifier: .dietarySodium)) 
      return typesToWrite 
     } 

そして、あなたはあなたがあなたのアプリケーションへのアクセスを必要とする理由と言って、あなたのInfo.plistと説明に「NSHealthUpdateUsageDescription」を追加してください:電話AppDelegateで

希望すると、これが役立ちます。

関連する問題