2016-07-14 4 views
7

के अनुरोध किए बिना सफलता देता है मेरे पास कई स्थानों पर वर्णित स्थानीय प्रमाणीकरण का निम्न कार्यान्वयन है।टचआईड सक्रिय करें टचविथ रेस्पॉन्स फिंगरप्रिंट

context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Logging in with Touch ID", reply: { (success : Bool, error : NSError?) -> Void in 
     dispatch_async(dispatch_get_main_queue(), { 

     if success { 
      let alert = UIAlertController(title: "Success", message: "", cancelButtonTitle: "Great!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     if let error = error { 
      var message :String 

      switch(error.code) { 
      case LAError..AuthenticationFailed: 
       message = "There was a problem verifying your identity." 
      case LAError..UserCancel: 
       message = "You pressed cancel." 
      case LAError..UserFallback: 
       message = "You pressed password." 
      default: 
       message = "Touch ID may not be configured" 
      } 

      let alert = UIAlertController(title: "Error", message: message, cancelButtonTitle: "Darn!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    }) 
}) 

लेकिन उसके बाद मैं सफलतापूर्वक मेरी अंगुली की छाप के साथ प्रमाणीकृत किया है, तो evaluatePolicy (, localizedReason :, जबाब :) सफलता किसी भी अंगुली की छाप के लिए अनुरोध किए बिना वापस आती है। मैं वास्तव में एक यूआईएसविच के साथ टचआईडी को सक्षम या अक्षम कर रहा हूं, इसलिए अक्षम करने और पुनः सक्षम करने के बाद, मैं फिर से प्रमाणित करना चाहता हूं और अपने फिंगरप्रिंट को फिर से दर्ज करना चाहता हूं।

यह प्रमाणीकरण कैशिंग क्यों है?

धन्यवाद

+0

अगर कोई और होता है तो त्रुटि को और देखें। – Konsy

+0

त्रुटि शून्य है। दूसरी बार जब मैं पॉलिसी का मूल्यांकन करता हूं तो मुझे बटन को छूने के लिए तत्काल बिना त्रुटि और त्रुटि मिलती है। –

+0

त्रुटि करने का प्रयास करें! = Nil इसके बजाय – Konsy

उत्तर

14

LAContext, एक बार का मूल्यांकन किया, सफलता वापस आ जाएगी जब तक यह पुनः आवंटित की जाती है। आप इसे मैन्युअल रूप से अमान्य कर सकते हैं और फिर लौटाई गई त्रुटि LAError.InvalidContext होगी।

यदि आप हर बार एक टचआईडी पुष्टिकरण के साथ संकेत देना चाहते हैं, तो आपको हर बार एक LAContext बनाने की आवश्यकता है। यह

context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Logging in with Touch ID", reply: { (success : Bool, error : NSError?) -> Void in 
     dispatch_async(dispatch_get_main_queue(), { 

     if success { 
      let alert = UIAlertController(title: "Success", message: "", cancelButtonTitle: "Great!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     if let error = error { 
      var message :String 

      switch(error.code) { 
      case LAError..AuthenticationFailed: 
       message = "There was a problem verifying your identity." 
      case LAError..UserCancel: 
       message = "You pressed cancel." 
      case LAError..UserFallback: 
       message = "You pressed password." 
      default: 
       message = "Touch ID may not be configured" 
      } 

      let alert = UIAlertController(title: "Error", message: message, cancelButtonTitle: "Darn!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     context = LAContext() 
    }) 
}) 
+0

शानदार उत्तर, यह स्थिति को मंजूरी दे दी, धन्यवाद। ऐप्पल डॉक्स में इसके बारे में कोई शब्द नहीं है, और वाक्यांश: "मान लीजिए कि पिछले सफल नीति मूल्यांकन का अर्थ है कि भविष्य के मूल्यांकन भी सफल होंगे। पॉलिसी मूल्यांकन उपयोगकर्ता द्वारा रद्दीकरण सहित विभिन्न कारणों से विफल हो सकता है या प्रणाली।" वास्तव में उलझन में है। – Dren

3

प्राप्त किया जा सकता ios 9 के बाद से वहाँ संदर्भ

अवधि जिसके लिए स्पर्श ID प्रमाणीकरण पुन: उपयोग स्वीकार्य है के लिए touchIDAuthenticationAllowableReuseDuration है। यदि डिवाइस को निर्दिष्ट समय अंतराल के भीतर टच आईडी का उपयोग करके सफलतापूर्वक प्रमाणित किया गया था, तो उपयोगकर्ता को टच आईडी के लिए संकेत दिए बिना, रिसीवर के लिए प्रमाणीकरण स्वचालित रूप से सफल हो जाता है। डिफ़ॉल्ट मान 0 है, जिसका अर्थ है कि टच आईडी प्रमाणीकरण का पुन: उपयोग नहीं किया जा सकता है। टच आईडी प्रमाणीकरण पुन: उपयोग के लिए अधिकतम स्वीकार्य अवधि LATouchIDAuthenticationMaximumAllowableReuseDuration निरंतर द्वारा निर्दिष्ट है। आप इस संपत्ति को इस स्थिर से अधिक मूल्य पर सेट करके लंबी अवधि निर्दिष्ट नहीं कर सकते हैं। उपलब्धता आईओएस (9.0 और बाद में), MacOS (10.12 और बाद में)

अगर आप 60

context.touchIDAuthenticationAllowableReuseDuration = 60 

यह ऑटो की जाँच के बिना सफल होगा करने के लिए उदाहरण के लिए सेट करता है, तो उपयोगकर्ता को सफलतापूर्वक स्पर्श बीत चुका है पिछले 60 सेकंड में आईडी जांच।

तो, आप उस मूल्य पर सेट कर सकते हैं जो आपको उपयुक्त बनाता है। मुझे यह बहुत अच्छा लगता है और उपयोगकर्ता को कुछ सेकंड पहले ऐसा करने के लिए कहने के लिए परेशान करना मुश्किल है। (उदाहरण के लिए स्क्रीन अनलॉक करने के लिए)।

0

मैं एक ही समस्या का सामना करना पड़ रहा था लेकिन फिर मैं नीचे के रूप में अवधि मान में वृद्धि हुई:

context.touchIDAuthenticationAllowableReuseDuration = Double(5 * 60) // 5 min, 

यह समाधान मेरे लिए काम किया।

+0

आप निरंतर LATouchID प्रमाणीकरण का उपयोग कर सकते थे मैक्सिमअलोवेबल रीय्यूज अवधि क्योंकि यह अधिकतम अनुमत समय अंतराल है। इसका मान केवल 5 मिनट है। –

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