読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

Touch IDで指紋認証をやってみよう

今回のエンジニアブログ担当の近藤です。

iPhone5sでTouch IDによる指紋認証機能が搭載されました。
そして先日リリースしたiOS8にてTouch IDのAPIが公開されて、指紋認証機能を有したアプリの開発も出来るようになりました。
というわけで、今回はさっそくTouch IDで指紋認証をやってみようと思います。

準備

Xcode6とiOS8をインストールしたTouch IDに対応したiPhoneを用意しましょう。
シミュレーターではさすがに指紋認証をシミュレートする機能はなさそうだったので、実機を使いましょう。

プロジェクト作成

iOS8から新しい言語としてswiftが使えるようになりましたが、今回は従来のObjective-Cを使用します。

ソースコード

#import "ViewController.h"  
@import LocalAuthentication;  
  
@interface ViewController ()  
  
@end  
  
@implementation ViewController  
  
- (void)viewDidLoad {  
    [super viewDidLoad];  
    // Do any additional setup after loading the view, typically from a nib.  
  
    [self authentication];  
}  
  
- (void)authentication:(id)sender {  
    LAContext *context = [[LAContext alloc] init];  
    NSError *error;  
    BOOL success;  
      
    //端末がTouch IDに対応しているか確認  
    success = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics  
                                   error:&error];  
    if (success) {  
        NSLog(@"Touch IDに対応している端末です");  
        [self evaluatePolicy];  
    } else {  
        NSLog(@"Touch IDに対応していない端末です");  
        return;  
    }  
}  
  
- (void)evaluatePolicy  
{  
    LAContext *context = [[LAContext alloc] init];  
      
    // 指紋認証のダイアログを表示  
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics  
            localizedReason:@"ロックを解除します"  
                      reply:^(BOOL success, NSError *authenticationError) {  
         if (success) {  
             NSLog(@"指紋認証OK!");  
             UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"指紋認証"  
                                                                            message:@"指紋認証に成功しました!"  
                                                                     preferredStyle:UIAlertControllerStyleAlert];  
             [alert addAction:[UIAlertAction actionWithTitle:@"OK"  
                                                       style:UIAlertActionStyleDefault  
                                                     handler:nil]];  
             [self presentViewController:alert  
                                animated:YES  
                              completion:nil];  
         } else {  
             NSLog(@"「パスワードを入力」を選択した場合はこっちに処理を書く");  
         }  
     }];      
}  
  
- (void)didReceiveMemoryWarning {  
    [super didReceiveMemoryWarning];  
    // Dispose of any resources that can be recreated.  
}  
@end  

解説

LAContextが指紋認証の機能を管理しているクラスの様です。
LAContextのcanEvaluatePolicyメソッドで、使っている端末がTouch IDに対応しているかをチェックします。

端末がTouch IDに対応していたらevaluatePolicyメソッドを呼び出します。
同じくLAContextクラスのevaluatePolicyメソッドで指紋認証をするためのダイアログを表示します。
Screen Shot 2014-09-24 at 21.29.42

ホームボタンを触って指紋認証を試してみましょう!
正しい指紋が認識されればダイアログが表示されるはずです。
Screen Shot 2014-09-24 at 21.33.54

おまけ

iOS8ではダイアログ表示するときにUIAlertViewは非推奨となったためUIAlertControllerを使いましょう。

Appleのサンプルコード

今回の記事はAppleのサンプルコードを参考に書きました。
サンプルコードはこちら

こんな感じでとっても簡単に指紋認証を行う事が出来ました。
この機能を使えば、電話帳アプリやHealthKitを使用したアプリなど、個人情報を取り扱うアプリでデータを勝手に見られないようにガードさせたり、用途はいろいろあると思います。
セキュリティーの高いアプリが作れるようになりますね。