react-native-geetest-sensebot
GEETEST极验行为验证
SDK Version
iOS: v0.11.7_20190314
Android: v4.0.7_20190311
测试环境
Xcode 10.2.1
react-native 0.59.5
Getting Started
yarn add @yyyyu/react-native-geetest-sensebot
npm i @yyyyu/react-native-geetest-sensebot --save
react-native link @yyyyu/react-native-geetest-sensebot
iOS 不使用 CocoaPods
在 Linked Frameworks and Libraries 中添加 node_modules/@yyyyu/react-native-geetest-sensebot/ios/SDK/GT3Captcha.framework
Android
在 AndroidManifest.xml 文件中添加权限
// ...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Example
import React, { Component } from 'react'
import { View, Button } from 'react-native'
import * as RNGeetestSensebot from '@yyyyu/react-native-geetest-sensebot'
export default class App extends Component {
geetest = async () => {
let api1Result
try {
const api1Response = await fetch('http://www.geetest.com/demo/gt/register-test')
api1Result = await api1Response.json()
} catch (e) {
return console.log('API1 request failed, message: %s.', e.message)
}
let geetestResult
try {
geetestResult = await RNGeetestSensebot.start({
api1Result,
debug: true,
loadTimeout: 10000,
reqTimeout: 10000,
lang: RNGeetestSensebot.Lang.System,
enableBackgroundCancel: true,
backgroundColorIOS: 'red',
backgroundBlurEffectIOS: RNGeetestSensebot.BackgroundBlurEffectIOS.Regular,
onEvent: (code, data) => {
if (code === RNGeetestSensebot.Events.FAILED) {
console.log('Validate failed, reason: %s', data[0])
} else {
console.log(RNGeetestSensebot.Events[code], data)
}
}
})
} catch (e) {
return console.log('Error, code: %d, message: %s.', e.code, e.message)
}
let api2Result
try {
const api2Response = await fetch('http://www.geetest.com/demo/gt/validate-test', {
method: 'POST',
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
body: JSON.stringify(geetestResult)
})
api2Result = await api2Response.json()
} catch (e) {
return console.log('API2 request failed, message: %s.', e.message)
}
console.log('Validate result: %o.', api2Result)
}
render() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Button title='StartGeetest' onPress={this.geetest} color='#26c6aa' />
</View>
)
}
}
Option
export interface IOption {
api1Result: IAPI1Result;
debug?: boolean;
loadTimeout?: number;
reqTimeout?: number;
lang?: Lang;
enableBackgroundCancel?: boolean;
backgroundColorIOS?: any;
backgroundBlurEffectIOS?: BackgroundBlurEffectIOS;
onEvent?: (code: Events, data?: Array<number | string>) => void;
}
export interface IAPI1Result {
success: 0 | 1;
challenge: string;
gt: string;
new_captcha: boolean;
[key: string]: any;
}
export enum Lang {
System = "system",
ZH = "zh",
ZH_TW = "zh-tw",
ZH_HK = "zh-hk",
EN = "en",
ID = "id",
JA = "ja",
KO = "ko",
RU = "ru",
AR = "ar",
ES = "es",
PT_PT = "pt-pt",
FR = "fr",
DE = "de",
}
export enum BackgroundBlurEffectIOS {
None = -1,
ExtraLight = 0,
Light,
Dark,
Regular,
Prominent,
}
export enum Events {
RESULT = 1,
CLOSED = 2,
FAILED = 3,
ERROR = 0,
}
export enum Errors {
PARAMETER_PARSE_FAILED = -1,
ANDROID_ACTIVITY_DESTROYED = -2,
DUPLICATE_START = -3,
}
export interface IResult {
geetest_challenge: string;
geetest_seccode: string;
geetest_validate: string;
[key: string]: any;
}