dongdayu 3f14012986 bump version number | il y a 6 ans | |
---|---|---|
android | il y a 6 ans | |
ios | il y a 6 ans | |
scripts | il y a 6 ans | |
src | il y a 6 ans | |
.gitattributes | il y a 6 ans | |
.gitignore | il y a 6 ans | |
LICENSE | il y a 6 ans | |
README.md | il y a 6 ans | |
RNGeetestSensebot.podspec | il y a 6 ans | |
index.js | il y a 6 ans | |
package.json | il y a 6 ans | |
yarn.lock | il y a 6 ans |
GEETEST极验行为验证 for React Native
yarn add @yyyyu/react-native-geetest-sensebot
or
npm install --save @yyyyu/react-native-geetest-sensebot
react-native link @yyyyu/react-native-geetest-sensebot
如果项目使用 Pods 管理依赖需要在 Podfile 中添加
pod 'React', :path => '../node_modules/react-native', :subspecs => ['Dependency']
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
手动配置和非 Pods 管理依赖情况下需要
react-native link @yyyyu/react-native-geetest-sensebot
在 android/settings.gradle 文件中添加
include ':react-native-geetest-sensebot'
project(':react-native-geetest-sensebot').projectDir = new File(rootProject.projectDir, '../node_modules/@yyyyu/react-native-geetest-sensebot/android')
在 android/app/build.gradle 文件中依赖部分添加
dependencies {
// other dependencies
compile project(':react-native-geetest-sensebot')
}
在 MainApplication.java 文件中添加
import com.rnlib.geetest.sensebot.ReactGeetestSensebotPackage;
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
// other packages
new ReactGeetestSensebotPackage()
);
}
在 android/build.gradle 文件中添加
allprojects {
repositories {
// ...other
flatDir {
dirs project(':react-native-geetest-sensebot').file('libs')
}
}
}
android/app/build.gradle 配置构建工具版本需要 (buildToolsVersion >= 25)
AndroidManifest.xml
// 如果存在 android:allowBackup="false" 则添加 tools:replace="android:allowBackup"
<manifest xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="false"
tools:replace="android:allowBackup">
</application>
</manifest>
import GeetestSensebot from '@yyyyu/react-native-geetest-sensebot'
const api1 = 'http://www.geetest.com/demo/gt/register-test'
const api2 = 'http://www.geetest.com/demo/gt/validate-test'
GeetestSensebot.configApi(api1, api2)
GeetestSensebot.captcha()
GeetestSensebot.configApi('api1 address', 'api2 address')
GeetestSensebot.captcha({
api1ReqReplacer: (DefaultApi1Req) => { return ModifyApi1Req },
api1RespHandler: (Api1Resq) => { return { success: number, gt: string, challenge: string } },
api2ReqReplacer: (DefaultApi2Req) => { return ModifyApi2Req },
api2RespHandler: (Api2Resq) => { // do anything }
})
因为 api1、api2 由使用者自行配置,所以接口的请求及返回处理方式不一定按照官方实例的方式进行,所以这里提供了 4 个可选方法,用于替换 Request 以及处理 Response,关于创建 Request 及处理 Response 参考 MDN Request、MDN Response,同时这 4 个方法均为可选参数,不传会使用默认的方式,函数支持使用 es7 async
关于 api1RespHandler 特别说明,由于行为验证需要将 api1 的结果数据传递到 sdk 组件中,所以需要规定一个格式才能流程正常进行下去,api1RespHandler 返回值格式必须为
{
"success": number,
"gt": string,
"challenge": string
}
错误处理方式
import GeetestSensebot, { GSError, ERROR_TYPE } from '@yyyyu/react-native-geetest-sensebot'
try {
// await GeetestSensebot.captcha() ...
} catch (e) {
if (e instanceof GSError) {
const { errCode, errMsg } = e
if (errCode === ERROR_TYPE.API1) {
// api1 出现错误
}
if (errCode === ERROR_TYPE.API2) {
// api2 出现错误
}
if (errCode === ERROR_TYPE.CAPTCHA) {
// 行为认证过程出现错误
}
console.error(errMsg)
// 由于这个过程涉及多个接口,出错情况多种多样,所以报错使用过程来区分
// 原 SDK IOS 有错误代码及描述信息,Android 只有错误代码
// errCode 是自己定义的,errMsg IOS 使用描述信息 Android 使用错误代码
// errMsg 参数只适用于开发,如果显示给用户建议自行定义错误描述
}
}
官方 API
json
{
"success": number,
"challenge": string,
"gt": string,
"new_captcha": boolean
}
json
{
"geetest_challenge": string,
"geetest_seccode": string,
"geetest_validate": string
}
GeetestSensebot.setMaskColor('color string')
GeetestSensebot.enableDebug(true)