Merhaba Arkadaşlar,
mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız derslerimize iOS da Touch ID entegrasyonu ile devam edeceğiz. Bildiğiniz üzere Touch ID tanımlama özelliği iOS 8 ile Apple’n bizlere sunduğu yeni bir özelliktir. Şuan uygulamaların bir çoğunda kullanılan Touch ID daha çok Login işlemlerinde kullanılmaktadır.
Bugünkü dersimizde sizlere uygulamamıza Touch ID‘yi nasıl entegre ederiz anlatmaya çalışacağım. Bundan önceki derslerim gibi bu dersimde de hem Objective C hemde Swift ile kullanımından bahsedeceğim.
iOS Uygulamada Touch ID Kullanımı (Swift - Obj C)
Ortak olan kısımlarını beraber anlatacağım.Öncelikle Yeni bir proje oluşturuyoruz ve Single View Application seçiyoruz. Tabi siz uygulamanın ihtiyaçlarına göre başkada seçebilirsiniz.
Sonrasında Uygulama adımızı ve geliştirme yapacağımız dili(Objective-C veya Swift) seçiyoruz.
Uygulamamızı kaydedeceğimiz yeri seçtikten sonra Xcode da uygulamamız açılıyor. Main.Storyboard açıp buton ekliyoruz ve Touch Up İnside kısmını kod kısmına bağlıyoruz.Böylelikle tıklandığı zaman çağırılacak methodu seçiyoruz.
Şimdi gerekli işlemleri kod üzerinde yapıyoruz.Ben gerekli açıklamaları da kod üzerinde yapmaya çalıştım.
Objective-C :
ViewController.h
#import <UIKit/UIKit.h> #import <LocalAuthentication/LocalAuthentication.h> @interface ViewController : UIViewController - (IBAction)touchIdClick:(id)sender; @end
NOT : <LocalAuthentication/LocalAuthentication.h> import etmeyi unutmayalım.
ViewController.m
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)touchIdClick:(id)sender { LAContext *context = [[LAContext alloc] init]; NSString *baslik = @"Parmak izinizi tanımlayınız"; NSError *error = nil; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:baslik reply:^(BOOL success, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ if (success) { //Başarılı olması durumunda [self showMessage:@"Parmak iziniz geçerli" : @"Başarılı"]; } else {//Başarılı değilse switch (error.code) { case LAErrorAuthenticationFailed: //Parmak izi okurken hata oluşursa [self showMessage:@"Parmak İzinizi Tanımlarken Hata Oluştu." : @"Hata"]; break; case LAErrorUserCancel://VAzgeç Butonu tıklanırsa [self showMessage:@"Vazgeç Buton Tıklandı." : @"Hata"]; break; case LAErrorUserFallback://Parolayı Girin Buton Tıklanırsa [self showMessage:@"Parolayı Girin Buton Tıklandı." : @"Hata"]; break; default: NSLog(@"Sorun Oluştu"); break; } NSLog(@"Authentication Fail"); } }); }]; } else { //Cihazınız Touch ID desteklemiyorsa [self showMessage:@"Cihazınız Touch ID Desteklemiyor." : @"Hata"]; } } - (void)showMessage : (NSString*) mesaj : (NSString*) baslik{ UIAlertView * alert = [[UIAlertView alloc] initWithTitle:baslik message:mesaj delegate:nil cancelButtonTitle:@"Tamam" otherButtonTitles:nil]; [alert show]; }
Swift :
Not: “LocalAuthentication” import etmeyi unutmayalım.
import UIKit import LocalAuthentication class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func touchIDClick(sender: AnyObject) { let context = LAContext() var error: NSError? if context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: &error) {//Cihaz Parmak izi okuyabiliyor mu let reason = "Parmak İzinizi Tanımlayınız" context.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: {(succes: Bool, error: NSError!) in if succes { self.showAlertController("Parmak İzi Tanımlama Başarılı") } else { switch (error.code) { case LAError.SystemCancel.rawValue: self.showAlertController("Parmak İzinizi Tanımlarken Hata Oluştu."); case LAError.UserCancel.rawValue: self.showAlertController("Vazgeç Buton Tıklandı."); case LAError.UserFallback.rawValue: self.showAlertController("Parolayı Girin Buton Tıklandı."); default: println("Sorun Oluştu"); break; } } }) } else { showAlertController("Cihazınız Touch ID Desteklemiyor.") } } func showAlertController(message: String) { let alertController = UIAlertController(title: nil, message: message, preferredStyle: .Alert) alertController.addAction(UIAlertAction(title: "Tamam", style: .Default, handler: nil)) presentViewController(alertController, animated: true, completion: nil) } }
Evet arkadaşlar her iki dersinde kaynak kodunu paylaşıyorum. İndirip inceleyebilir veya direk burdan kodu alıp çalıştırabilirsiniz.
Bu dersimde sadece Touch ID entegrasyonundan bahsettim. Dediğim gibi farklı alanlarda kullanılabilir. Daha çok Login işlemlerinde kullanılıyor.
Mesala bir uygulamamızda nasıl kullandığımızdan kısaca bahsedeyim. Kullanıcı ilk girişinde normal bilgileri ile login oluyor(Kullanıcı adı ve parola). Sunucudan olumlu cevap geldiğinde yani uygulamaya login olabilir cevabı geldiğinde kullanıcı bilgilerini (Kullanıcı adı ve parola) NSUserDefault yapısını kullanarak kaydediyoruz. Birdahaki girişinde Login ekranına geldiğinde direk Touch ID ile giriş popup’ını çıkarıyoruz ve touch id ile girişi başarılı olursa NSUserDefault’da tuttuğumuz değerleri otomatik olarak sanki login butonuna basılmış gibi sunucuya gönderiyoruz ve kullanıcıyı login yapıyoruz. Tabiki burda anlattığım çok kaba-taslak. Daha başka güvenlik önlemleride elbette kullanıyoruz. O kısmı artık sizlere kalmış..
Bu dersimde anlatmak istediklerim bu kadar. Aklınıza takılan sorularınızı çekinmeden sorabilirsiniz. Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir. Birdahaki dersimde görüşmek dileğiyle…
Hocam, swift için, touchId’de success’den sonra segue çağırmak istiyorsak, ne yapmamız gerekiyor?
performSegueWithIdentifier(“sequeId”, sender: nil) ile çağırabilirsin.
Burdaki sequeId storyboard da belirlediğin ID olacak