全部产品
Search
文档中心

ID Verification:iOS接入

更新时间:Dec 04, 2025

IDV NFC认证服务提供iOS客户端SDK,帮助您在业务应用(App)中实现NFC认证功能。本文结合示例代码介绍iOS客户端的接入流程。

使用限制

  • 仅支持 iOS 13 及以上系统版本的移动设备(iPhone 或 iPad)。

  • 必要的隐私权限:相机(护照三要素通过OCR获取时需要此权限)、网络、NFC等权限。

SDK下载和配置

获取SDK

下载iOS SDK并解压,然后复制所有framework包到您的工程文件夹中。

添加必要权限

  1. 在 Info.plist 中添加以下权限(权限描述仅供参考):

    image.png

  2. 添加Privacy - NFC Scan Usage Description权限和说明。

  3. 添加ISO7816 application identifiers for NFC Tag Reader Session配置,在item0中填写A0000002471001(旅行证件)。

    image.png

Xcode添加framework

在工程的设置中定位到Build Settings > Build Phases > Link Binary With Libraries,添加framework。

  • 添加SDK中所有的framework:

    AliyunIdentityFace.framework
    AliyunIdentityPlatform.framework
    AliyunIdentityUtils.framework
    AliyunIdentityOcr.framework
    AliyunIdentityNFC.framework
    ToygerService.framework
    AliyunOSSiOS.framework
    faceguard.framework
    DTFUtility.framework
    ToygerNative.framework
    MNN.framework
    OpenSSL.framework
  • 添加系统依赖库:

    AudioToolbox.framework
    CoreMedia.framework
    CoreML.framework
    AVFoundation.framework
    SystemConfiguration.framework
    UIKit.framework
    CoreTelephony.framework
    CoreMotion.framework
    Accelerate.framework
    libresolv.tbd
    libsqlite3.tbd
    libc++.tbd
    libz.tbd
    
    CryptoKit.framework
    CryptoTokenKit.framework
    CoreNFC.framework
    libswiftCoreNFC.tbd

    并设置NFC相关系统库为可选,否则在无NFC设备上会导致找不到系统库崩溃:

    image.png

拷贝资源文件

在工程的设置中定位到Build Settings > Build Phases > Copy Bundle Resources,拷贝资源文件。

  • AliyunIdentityPlatform.bundle:资源存在于AliyunIdentityPlatform.framework中。

  • AliyunIdentityFace.bundle:资源存在于AliyunIdentityFace.framework中。

  • AliyunIdentityOCR.bundle:资源存在于AliyunIdentityOcr.framework中。

  • ToygerService.bundle:资源存在于ToygerService.framework中。

  • AliyunIdentityNFC.bundle:资源存在于AliyunIdentityNFC.framework中。

配置Linker flags

在工程的设置中定位到Build Settings > Other Linker Flags,添加-ObjC标识。

如纯OC工程需要额外添加-L$(DEVELOPER_DIR)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/$(PLATFORM_NAME标识。

添加capability

在工程中选中TARGETS > 选中Signing & Capabilities > 新增capability > 选择NFC。

image.png

image.png

调用SDK

引入头文件

#import <AliyunIdentityPlatform/AliyunIdentityPlatform.h>

初始化SDK

- (void)install;

获取metaInfo数据

- (NSString *)getMetaInfo;

调用SDK开始认证

重要
  • 调用SDK开始认证前,请确认您已将 MetaInfo 传递至服务端,并通过 Initialize 接口获取了 transactionId

  • 服务端返回的 transactionId 对应此方法的入参:certifyId

- (void)verifyWithCertifyId:(NSString *)certifyId
  withCurrentViewController:(UIViewController *)viewController
              withExtParams:(NSDictionary *)extParams
                   complete:(AliyunIdentityVerifyBlock)completeBlock;
  • 参数说明:

    名称

    类型

    说明

    certifyId

    NSString

    调用服务器端的Initialize接口获取,返回的transactionId传入本参数。

    viewController

    UIViewController

    客户端App当前的ViewController。

    extParams

    NSDictionary

    用户自定义参数,如无特殊情况,一般直接传null即可。

    当前支持的参数字段,请参见extParams配置说明

    completeBlock

    AliyunIdentityVerifyBlock

    认证结束回调,包含认证结果。返回码可以在返回码表中查询。

  • extParams配置说明:

    Key名

    说明

    示例(String类型)

    kIdentityParamKeyNextButtonColor

    OCR识别结果页面的底部按钮颜色。

    #FF0000

    kIdentityParamKeyRoundProgressColor

    扫脸时的圆圈颜色。

    #FF0000

    kIdentityParamKeyOcrSelectPhoto

    证件OCR识别环节,是否展示相册上传入口:

    • 1(默认):展示

    • 0:不展示

    1

    kIdentityParamKeyMaxRetryCount

    重试次数上限。可设置范围为3~10次,默认10次。

    10

    kIdentityParamKeyCardOcrTimeOutPeriod

    OCR识别环节超时时长。可设置范围为20~60秒,默认20秒。

    20

    kIdentityParamKeyFaceVerifyTimeOutPeriod

    活体采集检测环节超时时长。可设置范围为20~60秒,默认20秒。

    20

    kIdentityParamKeyCardOcrEditTimeOutPeriod

    OCR识别结果页面可编辑时长。 可自定义配置,范围为60秒到180秒之间,默认不限。

    180

    kIdentityParamKeyLanguage

    SDK语言自定义设置。默认跟随移动设备系统的设置。

    说明

    SDK具体支持的语言列表,请参见Android和iOS SDK 自定义语种

    zh-Hans

    kIdentityParamKeyDefaultLanguage

    SDK默认语言设置,可参考kIdentityParamKeyLanguage字段取值。

    默认为en:英文。

    en

    kIdentityParamKeyCloseButtonPosition

    SDK关闭按钮位置:

    • left(默认):左侧

    • right:右侧

    left

    kIdentityParamKeyWatermark

    OCR识别成功后水印文字。

    测试水印文字

    kIdentutyParamKeyProtocol

    SDK Protocol。

    说明

    通过服务端Initialize接口获取protocol,传入扩展参数中,可减少SDK内部接口交互,提升网络体验。

    968412EB*******...

  • 返回码表:

    错误码

    是否计费

    结果码描述

    1000

    用户完成了刷脸过程,认证建议结果为通过。该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果,进行下一步处理。

    1001

    用户完成了刷脸过程,认证建议结果为未通过。该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果、未通过的详细原因,进行下一步处理。

    1002

    表示系统错误。

    1003

    表示SDK初始化失败,请确认客户端时间是否正确。

    1004

    表示摄像头错误。请参考以下步骤尝试解决:

    1. 在认证前请先确保App已获取到相机权限。

    2. 如已授权仍提示无权限,请尝试清除App缓存后重试。

    1005

    表示网络错误。

    1006

    表示用户退出。

    1007

    表示TransactionId无效。

    1009

    表示客户端时间戳错误。

    1011

    表示提交证件类型错误。

    1012

    表示识别出的证件关键信息缺失或格式校验失败。

    1013

    表示图片质量不佳。

    1014

    表示错误次数超出上限。

示例代码

#import "ViewController.h"
#import <AliyunIdentityPlatform/AliyunIdentityPlatform.h>

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // Initialize the sdk
    [[AliyunIdentityPlatform sharedInstance] install];
 
    [self initUI];
}

// This function needs to be implemented by the user
- (NSString *)sentMetaInfoAndGetTransactionId:(NSString*) metaInfo {
    return @"Get TransactionId from your server."; // replace it.
}

- (void)onClickStart:(id) sender {
    NSString *metaInfo = [[AliyunIdentityPlatform sharedInstance] getMetaInfo];
    NSString *transactionId = [self sentMetaInfoAndGetTransactionId:metaInfo];

    // Set the sdk language
    NSDictionary *extParams = @{
        kIdentityParamKeyLanguage:@"en"
        kIdentutyParamKeyProtocol:@"968412EB......................."//配置该协议可优化网络耗时
    };
    // start Verify
    [[AliyunIdentityPlatform sharedInstance] verifyWithCertifyId:transactionId
                                       withCurrentViewController:self
                                                   withExtParams:extParams
                                                        complete:^(AliyunIdentityVerifyRes *response) {
        NSString *resContent = [NSString stringWithFormat:@"Code=%d Message=%@", response.code, response.message];
    }];
}

- (void)initUI {
    // ......
}

@end

Demo代码包

您可以下载iOS-NFCDemo进行体验。