2015-10-08 24 views
8

Ich möchte überprüfen, ob HeathKit für mich autorisiert wurde, die Daten des Benutzers zu lesen, wenn ich autorisierte Übergänge zu den Workouts habe, wenn keine Warnung ausgegeben wird. Aber requestAuthorizationToShareTypes scheint immer wahr zu sein? Wie kann ich feststellen, ob der Benutzer mich autorisiert hat oder nicht?Überprüfen, ob HealthKit autorisiert wurde

override func viewDidLoad() { 
     super.viewDidLoad() 

     //1. Set the types you want to read from HK Store 
     let healthKitTypesToRead: [AnyObject?] = [ 
      HKObjectType.workoutType() 
     ] 


     //2. If the store is not available (for instance, iPad) return an error and don't go on. 

     if !HKHealthStore.isHealthDataAvailable() { 
      let error = NSError(domain: "com.myndarc.myrunz", code: 2, userInfo: [NSLocalizedDescriptionKey: "HealthKit is not available in this Device"]) 
       print(error) 

      let alertController = UIAlertController(title: "HealthKit Not Available", message: "It doesn't look like HealthKit is available on your device.", preferredStyle: .Alert) 
      presentViewController(alertController, animated: true, completion: nil) 
      let ok = UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in }) 
      alertController.addAction(ok) 
        } 

     //3. Request Healthkit Authorization 

     let sampleTypes = Set(healthKitTypesToRead.flatMap { $0 as? HKSampleType }) 

     healthKitStore.requestAuthorizationToShareTypes(sampleTypes, readTypes: nil) { 

      (success, error) -> Void in 

      if success { 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
                 self.performSegueWithIdentifier("segueToWorkouts", sender: nil) 
                }); 
      } else { 
       print(error) 
       dispatch_async(dispatch_get_main_queue(), {() -> Void in 
             self.showHKAuthRequestAlert() 
            }); 
      } 

     } 
    } 

Alternativ Ich habe authorizationStatusForType versucht und schaltete seinen ENUM-Wert aber hatte das gleiche Problem, dass ich immer autorisiert.

+0

das System nie gefragt, Sie über die Erlaubnis? –

+0

nein es tut, aber selbst wenn Sie es nicht autorisieren, heißt der Erfolgsblock – GarySabo

Antwort

6

Sie interpretieren falsch, was das success Flag in diesem Kontext bedeutet. Wenn success wahr ist, heißt das nur, dass iOS den Benutzer erfolgreich nach dem Health-Kit-Zugriff gefragt hat. Es bedeutet NICHT, dass sie auf diese Frage mit einem "Ja" geantwortet haben.

Um festzustellen, ob sie Ja/Nein sagten, müssen Sie spezifischer werden und Health Kit fragen, wenn Sie die Berechtigung zum Lesen/Schreiben der bestimmten Daten haben. Von den Apple Docs auf HealthKit :

Nachdem Sie eine Autorisierung angefordert haben, ist Ihre App bereit, auf den HealthKit-Speicher zuzugreifen. Wenn Ihre App die Berechtigung zum Freigeben eines Datentyps besitzt, kann sie Muster dieses Typs erstellen und speichern. Sie sollten sicherstellen, dass Ihre App die Berechtigung zum Freigeben von Daten hat, indem Sie authorizationStatusForType aufrufen: bevor Sie versuchen, alle Beispiele zu speichern.

+3

Vielen Dank ... Ich habe versucht AuthorizationStatusForType aber von dem, was ich verstehe, kann ich das nicht lesen: http://StackOverflow.com/ Fragen/25512320/healthkit-hkauthorizationstatus-for-reading-data – GarySabo

+2

Apple kümmert sich um die Privatsphäre seiner Benutzer, wenn Ihnen keine Erlaubnis erteilt wird, erscheint es so, als ob keine Daten des angeforderten Typs im HealthKit Store vorhanden sind. Wenn Ihre App eine Freigabeberechtigung, aber keine Leseberechtigung hat, sehen Sie nur die Daten, die Ihre App in den Store geschrieben hat. Daten aus anderen Quellen bleiben verborgen. – Aks

5

Hier ein Beispiel für die Einholung und Prüfung Erlaubnis Zugang in HealthKitStore

// Present user with items we need permission for in HealthKit 
healthKitStore.requestAuthorization(toShare: typesToShare, read: typesToRead, completion: { (userWasShownPermissionView, error) in 

    // Determine if the user saw the permission view 
    if (userWasShownPermissionView) { 
     print("User was shown permission view") 

     // ** IMPORTANT 
     // Check for access to your HealthKit Type(s). This is an example of using BodyMass. 
     if (self.healthKitStore.authorizationStatus(for: HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass)!) == .sharingAuthorized) { 
      print("Permission Granted to Access BodyMass") 
     } else { 
      print("Permission Denied to Access BodyMass") 
     } 

    } else { 
     print("User was not shown permission view") 

     // An error occurred 
     if let e = error { 
      print(e) 
     } 
    } 
}) 
+0

'requestAuthorization' präsentiert die Berechtigungsansicht ... dies wird nicht * überprüft *. – Ixx

Verwandte Themen