2015-10-08 7 views
8

मैं यह जांचना चाहता हूं कि क्या मुझे हेथकिट को उपयोगकर्ता के डेटा को पढ़ने के लिए अधिकृत किया गया है, अगर मैं चेतावनी पॉप नहीं करता हूं, तो अगर मैं चेतावनी पॉप नहीं करता हूं। लेकिन अनुरोध प्राधिकरण ToShareTypes हमेशा सच वापस लगता है? मैं इस बात का संदर्भ कैसे प्राप्त कर सकता हूं कि उपयोगकर्ता ने मुझे अधिकृत किया है या नहीं?हेल्थकिट को अधिकृत किया गया है या नहीं, यह जांचने के लिए कि

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() 
            }); 
      } 

     } 
    } 

वैकल्पिक रूप से, मैं authorizationStatusForType की कोशिश की और उसके enum मूल्यों पर स्विच लेकिन यह है कि मैं हमेशा के लिए अधिकृत कर रहा हूँ में एक ही समस्या थी।

+0

प्रणाली कभी नहीं में अनुमति पहुँच जाँच का एक उदाहरण अनुमति के बारे में आप से पूछा? –

+0

ऐसा नहीं करता है, लेकिन अगर आप इसे अधिकृत नहीं करते हैं, तो सफलता ब्लॉक को – GarySabo

उत्तर

6

आप इस संदर्भ में success ध्वज का अर्थ गलत व्याख्या कर रहे हैं। जब success सत्य है, तो इसका मतलब यह है कि आईओएस ने सफलतापूर्वक उपयोगकर्ता को स्वास्थ्य किट के उपयोग के बारे में पूछा। इसका मतलब यह नहीं है कि उन्होंने उस प्रश्न को 'हां' के साथ जवाब दिया।

यह निर्धारित करने के लिए कि क्या उन्होंने हाँ/नहीं कहा है, आपको अधिक विशिष्टता प्राप्त करने की आवश्यकता है, और अगर आपको रुचि रखने वाले विशेष प्रकार के डेटा को पढ़ने/लिखने की अनुमति है तो स्वास्थ्य किट से पूछें। हेल्थकिट पर सेब दस्तावेज़ों से :

प्राधिकरण के अनुरोध के बाद, आपका ऐप हेल्थकिट स्टोर तक पहुंचने के लिए तैयार है। यदि आपके ऐप को डेटा प्रकार साझा करने की अनुमति है, तो वह उस प्रकार के नमूने बना और सहेज सकता है। आपको यह सत्यापित करना चाहिए कि किसी भी नमूने को सहेजने का प्रयास करने से पहले आपके ऐप को प्रमाणीकरण कॉल करके डेटा साझा करने की अनुमति है StatusForType:।

+3

कहा जाता है धन्यवाद ... मैंने प्रमाणीकरण की कोशिश की है StatusForType लेकिन जो मैं समझता हूं उससे मैं इसे पढ़ नहीं सकता: http://stackoverflow.com/ प्रश्न/25512320/हेल्थकिट-हॉकवाइजेशनस्टैटस-फॉर-रीडिंग-डेटा – GarySabo

+2

ऐप्पल की देखभाल उनके उपयोगकर्ता की गोपनीयता के लिए है, आपको अनुमति नहीं दी जाती है, ऐसा लगता है कि हेल्थकिट स्टोर में अनुरोधित प्रकार का कोई डेटा नहीं है। यदि आपके ऐप को शेयर अनुमति दी गई है लेकिन अनुमति नहीं पढ़ी गई है, तो आप केवल उस डेटा को देखते हैं जिसे आपके ऐप ने स्टोर में लिखा है। अन्य स्रोतों से डेटा छुपा रहता है। – Aks

5

यहाँ का अनुरोध और 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

'अनुरोध प्राधिकरण 'प्राधिकरण दृश्य प्रस्तुत करता है ... यह * जांच * नहीं है। – Ixx

संबंधित मुद्दे

 संबंधित मुद्दे