iOS Uygulamada Touch ID Kullanımı (Swift – Obj C)

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.

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.

iOS Touch ID

Sonrasında Uygulama adımızı ve geliştirme yapacağımız dili(Objective-C veya Swift) seçiyoruz.

touch ID

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.

Touch ID Kullanımı

Ş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ış..

IMG_1057

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…

0

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

2 Yorum

  • Hocam, swift için, touchId’de success’den sonra segue çağırmak istiyorsak, ne yapmamız gerekiyor?

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?