曾静的博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

iOS8中使用TouchID校验用户身份

在iOS8中,开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证部分。相当一部分的APP(如印象笔记、新版QQ)以及在升级后采用了Touch ID来验证用户身份,用以替代过去使用一般密码或者PIN码,如下图所示:

(1)新版QQ:

touch_id_qq.png

(2)印象笔记高级版本:

touch_id_yxbj.png

本文主要介绍如何在应用中集成Touch ID来校验用户的身份。

集成步骤

1、环境要求

(1)开发环境:Xcode 6(iOS8 SDK

(2)设备要求:iPhone 5s、iPhone 6 (plus)、iPad Air 2

(3)引入头文件:LocalAuthentication

#import <LocalAuthentication/LocalAuthentication.h>这个库必须要Xcode6并且连接的是真机,才不会提示找不到的错误,即使不是iPhone5s都行. 如果是模拟器会提示找不到这个库。

2、添加验证的代码

- (void)doSomeAuth
{
    LAContext *myContext = [[LAContext alloc] init];
    myContext.localizedFallbackTitle = @"输入密码";
    NSError *authError = nil;
    NSString *myLocalizedReasonString = @"用于解除系统锁定!";
    if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError])
    {
        [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                  localizedReason:myLocalizedReasonString
                            reply:^(BOOL success, NSError *error) {
                                if(success)
                                {
                                    //处理验证通过
                                }
                                else
                                {
                                    //处理验证失败
                                }
                            }];
    }
    else
    {
        //不支持Touch ID验证,提示用户
    }
}

说明:

(1)localizedFallbackTitle:用于设置左边的按钮的名称,默认是Enter Password.

(2)localizedReason:用于设置提示语,表示为什么要使用Touch ID,如上面例子的解锁印象笔记账户通过验证指纹解锁QQ等。

3、验证错误码描述

- (NSString *)getAuthErrorDescription:(NSInteger)code
{
    NSString *msg = @"";
    switch (code) {
        case LAErrorTouchIDNotEnrolled:
            //认证不能开始,因为touch id没有录入指纹.
            msg = @"此设备未录入指纹信息!";
            break;
        case LAErrorTouchIDNotAvailable:
            //认证不能开始,因为touch id在此台设备尚是无效的.
            msg = @"此设备不支持Touch ID!";
            break;
        case LAErrorPasscodeNotSet:
            //认证不能开始,因为此台设备没有设置密码.
            msg = @"未设置密码,无法开启认证!";
            break;
        case LAErrorSystemCancel:
            //认证被系统取消了,例如其他的应用程序到前台了
            msg = @"系统取消认证";
            break;
        case LAErrorUserFallback:
            //认证被取消,因为用户点击了fallback按钮(输入密码).
            msg = @"选择输入密码!";
            break;
        case LAErrorUserCancel:
            //认证被用户取消,例如点击了cancel按钮.
            msg = @"取消认证!";
            break;
        case LAErrorAuthenticationFailed:
            //认证没有成功,因为用户没有成功的提供一个有效的认证资格
            msg = @"认证失败!";
            break;
        default:
            break;
    }
    return msg;
}

参考资料

1、《Touch ID Tutorial for Objective-C》

2、《关于iOS8中Touch id的一些研究》

3、《细数那些集成了Touch ID的iOS 8应用》

最近的文章

iOS中JavaScript和OC交互

在iOS开发中很多时候我们会和UIWebView打交道,目前国内的很多应用都采用了UIWebView的混合编程技术,最常见的是微信公众号的内容页面。前段时间在做微信公众平台相关的开发,发现很多应用场景都是利用HTML5和UIWebView来实现的。机制Objective-C语言调用JavaScript语言,是通过UIWebView的- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法来实现的。...…

iOS继续阅读
更早的文章

微信企业号开发之消息发送

和服务号不同的是企业号中放开了发送消息的限制,将企业内部的业务需要和微信的消息体系结合起来可以带来更多的便利。在前面也介绍到了在响应用户的请求的时候如果无法及时回应可以直接返回空的消息体,然后调用主动发送消息的接口进行消息的发送来解决这个问题。发送消息的类型及数据格式1、text消息消息数据格式:{ "touser": "UserID1|UserID2|UserID3", "toparty": "PartyID1|PartyID2 ", "totag": "TagID1|Tag...…

WeChat继续阅读