金融级NFC认证提供了iOS端的SDK,可以帮助您在应用(App)中快速实现NFC认证功能。本文将结合示例代码介绍SDK接入的详细流程。
前提条件
系统版本:iOS 13.0 及以上
支持语言:Objective-C、Swift
SDK 不支持模拟器调试。
配置开发环境
在Xcode的编译设置中,关闭Enable Bitcode选项。
重要Xcode 15 开始 ENABLE_BITCODE 将不再生效,详见:Xcode Release Notes。
在Xcode编译设置中,选择Linking > Other Linker Flags,添加-ObjC。
应用权限配置。
登录苹果开发者证书管理后台,在左侧导航菜单选中Identifiers,随后在右侧列表中找到对应的bundle ID,进入配置详情后确认NFC Tag Reading已经正确启用。
在项目工程的info.plist文件中:
添加Privacy - NFC Scan Usage Description权限和说明;
添加ISO7816 application identifiers for NFC Tag Reader Session配置,在item0和item1中分别填写
A0000002471001
(旅行证件)、F049442E43484E
(身份证)。
在Xcode中,选择TARGETS > Signing&Capabilities > All,添加Near Field Communication Tag Reading。
配置依赖
下载iOS SDK。该SDK为framework包。
解压下载的SDK包,并在解压的文件夹中执行以下命令,以提取所有的framework到Products目录。
# 提取所有.tgz和.tar格式的压缩文件。 for i in $(ls *.tgz *.tar);do tar xvf $i;done
解压后iOS SDK中的包如下所示:
AliyunFaceAuthFacade.framework DTFUtility.framework DTFNFCIdentityManager.framework
在Build Phases > Link Binary With Libraries中,添加SDK解压后的包和以下系统库依赖。
libc++.tbd CoreNFC.framework
拷贝资源文件
在Xcode中,选择TARGETS,单击Build Phases页签,在Copy Bundle Resources中添加DTFNFCIdentityManager.bundle。
该Bundle位于DTFNFCIdentityManager.framework中。
调用SDK
引入头文件。
命令如下:
#import <AliyunFaceAuthFacade/AliyunFaceAuthFacade.h>
初始化SDK。
说明为了提升用户体验并为NFC认证准备一些必备的数据,iOS客户端需要初始化SDK。
您可以在
appDelegate
方法中调用初始化SDK的代码(如下代码块所示)。在appDelegate方法中初始化SDK,示例代码:
- (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions { [AliyunFaceAuthFacade initSDK]; // 初始化SDK。 }
IPv6网络初始化,示例代码如下:
[AliyunFaceAuthFacade init]; // 初始化SDK,如果已经在appDelegate函数中调用过,此处无需再重复调用。 [AliyunFaceAuthFacade getNFCMetaInfo];
获取metaInfo数据,示例代码如下:
[AliyunFaceAuthFacade initSDK]; // 初始化SDK,如果已经在appDelegate函数中调用过,此处无需再重复调用。 [AliyunFaceAuthFacade getNFCMetaInfo]; // 获取NFCMetainfo,调用前请务必先初始化SDK。
说明getNFCMetaInfo返回值类型是NSDictionary,在调用服务端的发起认证请求接口时,您需要先将其转为JSON格式。
关于发起认证请求的具体操作,请参见InitFaceVerify-发起NFC认证请求。
调用SDK开始认证。
示例代码如下:
// NFC认证接口 [AliyunFaceAuthFacade nfcVerifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
名称
类型
描述
certifyId
NSString
您可以通过服务端发起申请请求接口获取该参数。关于发起认证请求的具体操作,请参见InitFaceVerify-发起NFC认证请求。
extParams
NSDictionary
通过以下代码传入当前viewController,用于展现网络加载和presentViewController。
[extParams setValue:self forKey:@"currentCtr"];
重要请注意在extParams中务必传入当前控制器,否则会导致 SDK 页面无法正常展示。
返回结果说明:
response.code包含以下返回参数,具体说明如下表所示。
错误码
错误码文案
错误码描述
1000(ZIMResponseSuccess)
验证成功
表示验证成功。
说明该结果仅供参考。可通过调用服务端DescribeFaceVerify-查询NFC认证结果接口获取最终认证结果。
1001(ZIMInternalError)
系统错误
表示系统错误。
1003(ZIMInterrupt)
验证中断
表示验证中断。
2002(ZIMNetworkfail)
网络错误
表示网络错误。
2003(ZIMTIMEError)
客户端设备时间错误
表示客户端设备时间错误。
2006(ZIMResponseFail)
验证失败
表示验证失败。
说明如需获取认证不通过的详情,需通过调用服务端DescribeFaceVerify-查询NFC认证结果接口。
说明关于错误码的更多信息,请参见金融级NFC认证iOS客户端错误码。
代码示例:
[AliyunFaceAuthFacade nfcVerifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) { dispatch_async(dispatch_get_main_queue(), ^{ NSString *title = @"认证成功"; switch (response.code) { case ZIMResponseSuccess: // 1000。 break; case ZIMInterrupt: // 1003。 title = @"用户退出"; break; case ZIMNetworkfail: // 2002。 title = @"网络错误"; break; case ZIMTIMEError: // 2003。 title = @"设备时间设置不对"; break; case ZIMResponseFail: // 2006。 title = @"认证失败"; break; case ZIMInternalError: // 1001。 title = @"初始化失败"; break; default: break; } }); }];
Demo代码包
您可以下载以下iOS Demo代码包进行体验:
Demo体验前,请将其中的SDK版本更新至最新。
升级注意事项
如果您在使用金融级NFC认证之前接入过金融级实人认证方案,您只需要将金融级实人认证方案升级到最新版本。
升级后复用金融级实人认证方案中的AliyunFaceAuthFacade.framework和DTFUtility.framework即可。