1. 背景
公司最近的項(xiàng)目為了保護(hù)App數(shù)據(jù)資源的安全肛度,而又為了節(jié)省用戶操作的步驟郑现,而采用了手勢密碼優(yōu)化驗(yàn)證過程。
2. 手勢密碼驗(yàn)證的邏輯
2.1未荒、 首先先判斷用戶是否已經(jīng)設(shè)置過手勢密碼
2.2专挪、 如果已經(jīng)設(shè)置過手勢密碼,則進(jìn)入流程一
2.3片排、 用戶沒有設(shè)置手勢密碼寨腔,則進(jìn)入流程二,進(jìn)行設(shè)置手勢密碼
2.3率寡、 流程三為修改手勢密碼
2.4迫卢、 最后為總的流程圖
3. 下面為手勢密碼實(shí)現(xiàn)的代碼
3.1、 iOS客戶端要滿足上面幾種復(fù)雜的需求冶共,需要做很多種情況下的判斷
最終分為5種情況來判斷:
1)當(dāng)手勢密碼為空的時(shí)候乾蛤,第一次錄入手勢密碼
1.1)再次確定錄入的手勢密碼,兩次相同則成功錄入
1.2)兩次錄入的密碼不一致捅僵,錄入失敗
2)已經(jīng)錄入過了手勢密碼家卖,輸入的手勢密碼錯(cuò)誤
3)已經(jīng)錄入過了手勢密碼,輸入的手勢密碼正確
我們只需要做以上5種情況的判斷命咐,即可以完成上面流程圖中的所有邏輯判斷
3.2篡九、 實(shí)例代碼
首先,需要?jiǎng)?chuàng)建手勢密碼的類醋奠,然后實(shí)現(xiàn)它的代理方法
-(void)guestureLock:(DBGuestureLock *)lock didSetPassword:(NSString *)password { //NSLog(@"Password set: %@", password); if (lock.firstTimeSetupPassword == nil) { lock.firstTimeSetupPassword = password; NSLog(@"varify your password"); NSLog(@"當(dāng)前的密碼:%@", [DBGuestureLock getGuestureLockPassword]); self.label.text = @"請(qǐng)?jiān)俅屋斎肽愕氖謩菝艽a:"; } }
-(void)guestureLock:(DBGuestureLock *)lock didGetCorrectPswd:(NSString *)password { //NSLog(@"Password correct: %@", password); if (lock.firstTimeSetupPassword && ![lock.firstTimeSetupPassword isEqualToString:DBFirstTimeSetupPassword]) { lock.firstTimeSetupPassword = DBFirstTimeSetupPassword; NSLog(@"已經(jīng)錄入手勢密碼!"); self.label.text = @"已經(jīng)錄入手勢密碼!"; } else { NSLog(@"密碼正確"); self.label.text = @"密碼正確!"; } }
-(void)guestureLock:(DBGuestureLock *)lock didGetIncorrectPswd:(NSString *)password { //NSLog(@"Password incorrect: %@", password); NSLog(@"%@ %@", lock.firstTimeSetupPassword, DBFirstTimeSetupPassword); if (![lock.firstTimeSetupPassword isEqualToString:DBFirstTimeSetupPassword]) { NSLog(@"Error: 兩次密碼不一致!"); self.label.text = @"兩次密碼不一致!"; } else { NSLog(@"密碼錯(cuò)誤!"); self.label.text = @"密碼錯(cuò)誤!"; } }
完整的代碼榛臼,稍后會(huì)上傳上來。