エンジニア

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

投稿日:2014年9月26日 更新日:

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

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を使用したアプリなど、個人情報を取り扱うアプリでデータを勝手に見られないようにガードさせたり、用途はいろいろあると思います。
セキュリティーの高いアプリが作れるようになりますね。

採用情報

ワンダープラネットでは、一緒に働く仲間を幅広い職種で募集しております。

-エンジニア
-,

© WonderPlanet Inc.