全部产品
Search
文档中心

ID Verification:ReactNative接入

更新时间:Mar 05, 2026

ID Verification 提供了 ReactNative 平台插件,可以帮助您在 ReactNative 应用中实现 KYC 远程身份验证功能。本文将结合示例代码介绍 ReactNative 平台的接入流程。

配置依赖

您可以参考ReactNative官网文档接入ReactNative插件,也可以参考本文步骤接入ReactNative插件。

下载SDK

下载IDV ReactNative SDK,下载完成后,解压该 ZIP 文件,将获得一个名为 react-native-idv-library 的本地文件夹,其中包含 SDK 的 React Native 模块及原生依赖。

引入本地模块

将解压得到的 react-native-idv-library 文件夹作为本地模块引入到您的 React Native 项目中。

建议将其放置在与应用项目同级的目录下。例如,典型的项目结构如下:

Development/
├── App/                      # 您的 React Native 应用根目录
└── react-native-idv-library/ # 解压后的 SDK 本地模块

然后,在应用根目录(即 App/ 目录)中,执行以下命令安装该本地模块:

yarn add ../react-native-idv-library 

安装原生依赖

SDK 包含 Android 和 iOS 原生代码,需根据目标平台完成对应配置。

  • Android:
    React Native 0.60 及以上版本支持 Autolinking,无需额外操作,构建时会自动链接原生模块。

  • iOS:
    进入应用的 ios 目录,执行 CocoaPods 安装命令以集成原生依赖:

    cd ios
    bundle exec pod install

开始集成

初始化SDK

install(): Promise<void>installWithOptions(options: Object): Promise<void>接口:用于初始化 API,分别提供无参数和带参数两种调用方式。应在应用启动后尽早调用其中任一接口以完成初始化。

options:信息采集可选项,默认可以为null。可选参数如下:

重要
  • ID Verification客户端内置设备助手安全模块,为了满足不同地域数据收集合规要求,提供了不同的数据上报区域。您可以基于用户属性不同,设置CustomUrlCustomHost指定不同的上报站点。

  • 一次应用会话生命周期内只能指定一个地域上报,且服务端查询时地域需要和上报地域保持一致。各产品服务端支持的地域有所不同,详情请参考支持的地域

  • 各地域的CustomUrl

    • 中国香港https://cloudauth-device.cn-hongkong.aliyuncs.com

    • 新加坡https://cloudauth-device.ap-southeast-1.aliyuncs.com

    • 印度尼西亚(雅加达)https://cloudauth-device.ap-southeast-5.aliyuncs.com

    • 美国(硅谷)https://cloudauth-device.us-west-1.aliyuncs.com

    • 德国(法兰克福)https://cloudauth-device.eu-central-1.aliyuncs.com

    • 马来西亚(吉隆坡)https://cloudauth-device.ap-southeast-3.aliyuncs.com

字段名

说明

示例

IPv6

是否使用IPv6域名上报设备信息:

  • 0(默认):否(使用IPv4域名)

  • 1:是(使用IPv6域名)

"1"

DataSwitch

设备信息上报时机。

  • 0(默认):初始化时

  • 1:获取Token时

说明

建议采用默认配置。

"1"

CustomUrl

设置数据上报服务器域名。

具体内容,请参见各地域的CustomUrl

CustomHost

设置数据上报服务器host。

"cloudauth-device.ap-southeast-1.aliyuncs.com"

说明

此处为新加坡地域示例,其他地域的host,请参见各地域的CustomUrl

参考示例:

import IdvLibrary from 'react-native-idv-library';

IdvLibrary.installWithOptions({
  CustomUrl:"https://cloudauth-device.ap-southeast-5.aliyuncs.com",
  CustomHost:"cloudauth-device.ap-southeast-5.aliyuncs.com"});

获取MetaInfos

getMetaInfo(): Promise<string>:该接口会返回客户端的环境信息,客户端需要使用MetaInfos信息向业务服务器发送请求,业务服务器随后使用从客户端接收到的MetaInfos,向阿里云发送初始化认证请求,从而获取transactionIdProtocol,用于后续的认证环节。

参考示例:

import IdvLibrary from 'react-native-idv-library';

async function handleGetMetaInfo() {
  // 获取元信息
  const _metaInfo = await IdvLibrary.getMetaInfo();
  console.log('Meta info:', _metaInfo);
}

开始认证

使用verify(transactionId: string, extParams?: Object): Promise<VerifyResult>发起实人认证请求。

verify()接口参数:

  • 必须的参数:transactionId

  • 扩展参数:

    参考原生SDK(Android/iOS)各自的扩展参数(extParams)配置。

    Android

    Key

    说明

    示例(String类型)

    IdentityParams.OcrResultButtonColor

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

    #FF0000

    IdentityParams.RoundProgressColor

    扫脸时的圆圈颜色。

    #FF0000

    IdentityParams.ShowBlbumIcon

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

    • 1(默认):展示

    • 0:不展示

    1

    IdentityParams.ShowOcrResult

    证件OCR识别环节,是否展示识别结果页:

    • 1(默认):展示

    • 0:不展示

    1

    IdentityParams.EditOcrResult

    证件OCR识别环节,识别结果页是否可编辑:

    • 1(默认):可编辑

    • 0:不可编辑

    1

    IdentityParams.MaxErrorTimes

    重试次数上限。

    可设置范围为3~10次,默认10次。

    10

    IdentityParams.CardOcrTimeOutPeriod

    OCR识别环节超时时长。

    可设置范围为20~60秒,默认20秒。

    20

    IdentityParams.FaceVerifyTimeOutPeriod

    活体采集检测环节超时时长。

    可设置范围为20~60秒,默认20秒。

    20

    IdentityParams.OcrResultTimeOutPeriod

    OCR识别结果页面可编辑时长。

    可自定义配置,默认不限。

    60

    IdentityParams.SdkLanguage

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

    说明

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

    zh-Hans

    IdentityParams.CloseButtonLayout

    关闭按钮的布局:

    • left(默认):左侧

    • right:右侧

    left

    IdentityParams.WaterMark

    OCR识别成功后水印文字。

    测试水印文字

    IdentityParams.Protocol

    SDK Protocol。

    说明

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

    iOS

    Key

    说明

    示例(String类型)

    kIdentityParamKeyNextButtonColor

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

    #FF0000

    kIdentityParamKeyRoundProgressColor

    扫脸时的圆圈颜色。

    #FF0000

    kIdentityParamKeyOcrSelectPhoto

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

    • 1(默认):展示

    • 0:不展示

    1

    kIdentityParamKeyShowOcrResult

    证件OCR识别环节,是否展示识别结果页:

    • 1(默认):展示

    • 0:不展示

    1

    kIdentutyParamKeyEditOcrResult

    证件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*******...

    说明

    每个transactionId只能使用一次,否则会返回错误。

  • 返回值:Promise<VerifyResult>,包含以下字段的VerifyResult对象:

    • code:状态码 

    • subCode: 子码

    • message:错误描述

    关于状态码与子码的具体信息,请参见Android接入IdentityResponse.code表iOS接入错误码

  • 参考示例:

    import { Platform} from 'react-native';
    import IdvLibrary from 'react-native-idv-library';
    
    async function handleVerify() {
      const extParams = Platform.select({
        ios: {
          kIdentityParamKeyLanguage: 'en',
          kIdentutyParamKeyProtocol:'xxxxxxx'
        },
        android: {
          SdkLanguage: 'en',
          Protocol:'xxxxxxxxx'
        },
      });
      //认证接口
      const result = await IdvLibrary.verify('transactionId', extParams);//transactionId改为从服务端获取的真实认证ID。
      console.log('Verify result:', result);
    }

自定义UI

使用setCustomUIConfig(param: string): Promise<string>接口自定义UI颜色。

  • 参数:params:传入JSON格式数据。请参考原生SDK各自的UI自定义配置:

  • 参考示例:

    async function handleSetCustonUiConfig() {
      const config= "{\"faceConfig\":{ \"faceBGColor\": \"#FF33FF\"}}";
      const result=await IdvLibrary.setCustomUIConfig(config);
      console.log('handleUi:', result);
    }

平台专属配置

IDV SDK 依赖设备的相机、网络等原生能力,需在 Android 和 iOS 工程中完成必要的权限声明与构建配置。以下配置为必需项,请务必按目标平台逐一检查。

Android端

配置aar文件

image.png

拷贝react-native-idv-library/andorid目录下的libs文件夹,至接入的React Native项目的android/app目录下:

image.png

然后,在React Native项目的android/app/build.gradle文件下添加如下配置。

//新增
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    //新增
    implementation fileTree(dir: 'libs', include: ['*.aar'])

}

混淆配置

-dontwarn com.idvlibrary.**
-keep class com.idvlibrary.** {
*;
}
-verbose
-keep class com.idv.identity.platform.api.** {*;}
-keep class com.idv.identity.platform.log.** {*;}
-keep class com.idv.identity.util.IdentityUtils {*;}
-keep class com.idv.identity.ocr.IdentityOcrApi {*;}
-keep class com.idv.identity.platform.model.** {*;}
-keep class com.idv.identity.platform.config.** {*;}
-keep class com.idv.identity.face.IdentityFaceApi {*;}


-keep class com.face.verify.intl.** {*;}
-keep class com.alibaba.fastjson.** {*;}
-keep class face.security.device.api.** {*;}
-keep class net.security.device.api.** {*;}
-keep class com.dtf.toyger.** { *; }
-dontwarn net.security.device.api.**
-dontwarn face.security.device.api.**


-keep class com.idv.identity.service.algorithm.** {*;}
-keep class com.idv.identity.base.algorithm.** {*;}
-keep class com.idv.identity.quality.QualityRouter {*;}
-keep class com.idv.identity.blink.BlinkRouter {*;}
-keep class com.idv.identity.service.IdentityFaceService {*;}
-keep class com.idv.identity.service.ocr.IdentityDocService {*;}

-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**



# NFC
-keep class com.idv.identity.nfc.IdentityNfcApi { *; }
-keep class org.jmrtd.** {*;}
-keep class net.sf.**{*;}
-keep class org.**{*;}
-keep class cn.**{*;}


# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.fasterxml.**
-dontwarn com.google.**
-dontwarn java.applet.Applet
-dontwarn java.awt.**
-dontwarn javax.**
-dontwarn org.**
-dontwarn retrofit2.**
-dontwarn springfox.documentation.spring.web.json.Json

#日志混淆,可选
-assumenosideeffects class android.util.Log {
    public static *** d(...);
}

# 若使用的1.3.2之前的版本需要添加如下混淆规则
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.alibaba.fastjson.** { *; }
-keep class * extends com.alibaba.fastjson.TypeReference { *; }

iOS端

添加必要权限

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

image.png

完整示例代码

import React from 'react';
import { Platform,Text, View, StyleSheet, Button } from 'react-native';

import IdvLibrary from 'react-native-idv-library';

IdvLibrary.installWithOptions({
  CustomHost:"cloudauth-device.cn-hongkong.aliyuncs.com",
  CustomUrl:"https://cloudauth-device.cn-hongkong.aliyuncs.com"
})
export default function App() {
  const [resultInfo, setValue] = React.useState<string | null>(null);

  async function handleVerify() {

    const extParams = Platform.select({
      ios: {
        kIdentityParamKeyLanguage: 'en',
        kIdentutyParamKeyProtocol:'xxxxxxx'
      },
      android: {
        SdkLanguage: 'en',
        Protocol:'xxxxxxxxx'
      },
    });
    // 验证身份
    const result = await IdvLibrary.verify('transactionId', extParams);//transactionId改为从服务端获取的真实认证ID。
    console.log('Verify result:', result);
    
    setValue(JSON.stringify(result));
  }

  async function handleGetMetaInfo() {
    // 获取元信息
    const _metaInfo = await IdvLibrary.getMetaInfo();
    console.log('Meta info:', _metaInfo);
    setValue(_metaInfo);
  }

  async function handleSetCustonUiConfig() {
    const config= "{\"faceConfig\":{ \"faceBGColor\": \"#FF33FF\"}}";

    const result=await IdvLibrary.setCustomUIConfig(config);

    console.log('handleUi:', result);
  }

  return (
    <View style={styles.container}>
      <Text>Result : {resultInfo}</Text>
      <Button title="获取认证信息" onPress={handleGetMetaInfo} />
      <Button title="设置UI" onPress={handleSetCustonUiConfig} />
      <Button title="认证" onPress={handleVerify} />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
});

您也可以下载ReactNative Demo体验完整代码。

重要

此Demo代码仅作为集成示例,建议替换最新版本SDK。