
// Set the Captcha App ID before any logic that calls Tencent CaptchaserviceTencentCaptcha.setup { config in// Replace __YOUR_CAPTCHA_APP_ID__ with your Captcha App IDconfig.appID=__YOUR_CAPTCHA_APP_ID__}
// Pleasesetthe Captcha App ID before any call to the Tencent CaptchaserviceTencentCaptcha.setup { config in// Please use your Captcha App ID to replace __YOUR_CAPTCHA_APP_ID__config.appID=__YOUR_CAPTCHA_APP_ID__}
appID | Description |
appID | Please use the AppID we assigned to you and enter it into this parameter. |
tarsServerURL | Tars server address |
captchaPageHost | Set the Host for the Captcha page |
usesCacheToken | Whether using a cached token is allowed to speed up the request process |
miniTuringShieldChannel | Channel number for risk identification business, fill in the channel ID we assigned to you |
timeoutForNativeRequest | Request timeout duration for local device risk detection, in seconds |
timeoutForNativePacking | Request timeout duration for local device risk detection, in seconds |
timeoutForWebViewLoading | Deprecated. Please use 'timeout' uniformly. The timeout duration for page loading, in seconds. |
timeout | Unified timeout settings API, in seconds |
override funcviewDidLoad(){super.viewDidLoad()// Do any additional setup after loading the view.letcontentController=WKUserContentController()letconfig=WKWebViewConfiguration()config.userContentController=contentControllerwebView=WKWebView(frame: self.view.bounds, configuration: config)webView.navigationDelegate=selfwebView.autoresizingMask=[.flexibleWidth, .flexibleHeight]self.view.addSubview(webView)}
TencentCaptcha.userDidAcceptPrivacyPolicy = true
let options = TencentCaptchaOptions()options.optionsCallback = { functionName, data in }// TODO: Set other options as neededTencentCaptcha.shared().requestCaptcha(withWebView: self.webView, options:options) { error, result inif let error = error {// If an error occurs, error is non-null}else {// result is the return value}}
let options = TencentCaptchaOptions()options.loadingEnabled = TencentCaptchaOptionsSwitchOnoptions.setExtractParameter(true, forName: "enableAutoCheck")TencentCaptcha.shared().requestCaptcha(withWebView: self.webView, options:options) { error, result in// ...}
Configuration Name | Value Type | Description |
enableAutoCheck | Bool | When enabled, secure requests can automatically perform verify selection with no action required by the user. true: Enabled. false: Disabled. nil: Default (disabled) |
/// Night mode optiontypedef enum : NSUInteger {/// DefaultTencentCaptchaOptionsDarkModeDefault,/// Turn on with the systemTencentCaptchaOptionsDarkModeTrue,/// Always offTencentCaptchaOptionsDarkModeFalse,/// Force openTencentCaptchaOptionsDarkModeForce,} TencentCaptchaOptionsDarkMode;typedef enum : NSUInteger {TencentCaptchaOptionsSwitchDefault,TencentCaptchaOptionsSwitchOn,TencentCaptchaOptionsSwitchOff,} TencentCaptchaOptionsSwitch;/// Captcha Request Parameters@interface TencentCaptchaOptions : NSObject/// Custom pass-through parameters. The business can use this field to transmit a small amount of data. The content of this field will be entered into the object of the callback.@property (nonatomic, strong, nullable) NSString *bizState;/// Night mode@property (nonatomic, assign) TencentCaptchaOptionsDarkMode darkModeEnabled;/// Help button switch@property (nonatomic, assign) TencentCaptchaOptionsSwitch needsFeedback;/// Custom URLs of the help button/// @discussion If `customFeedbackURL` is not empty, the `needsFeedback` option is unavailable, the help button is always displayed, and it navigates to this URL when clicked.@property (nonatomic, strong, nullable) NSString *customFeedbackURL;/// Specify the language of the Captcha prompt copy. The priority is higher than the console configuration.@property (nonatomic, strong, nullable) NSString *userLanguage;/// Aging adaptation mode@property (nonatomic, assign) TencentCaptchaOptionsSwitch agedEnabled;/// Define the display method of the Captcha/// @discussion popup (default): Display the Captcha in a centered popup floating layer form.@property (nonatomic, strong, nullable) NSString *type;/// Whether to show a loading box during the Captcha loading process@property (nonatomic, assign) TencentCaptchaOptionsSwitch loadingEnabled;/// CaptchaAppId encrypted validation string/// @discussion See https://www.tencentcloud.com/zh/document/product/1159/49680?lang=zh&pg=#captchaAppid@property (nonatomic, copy, nullable) NSString *encryptedAppID;/// Set additional parameters/// @param value Parameter value/// @param name Keyword name of the parameter/// @discussion When the parameter corresponding to name does not exist, a new value will be inserted. If it exists, the new value will overwrite the old one; when value is nil, this parameter will be deleted.- (void)setExtractParameter:(nullable id)value forName:(nonnull NSString *)name;/// Additional parameters currently set@property (nonatomic, strong, readonly, nonnull) NSDictionary<NSString *, id> *extractParameters;@end
/// Night mode optionstypedef enum:NSUInteger{/// DefaultTencentCaptchaOptionsDarkModeDefault,/// Enabled with systemTencentCaptchaOptionsDarkModeTrue,/// Always disabledTencentCaptchaOptionsDarkModeFalse,/// Force enabledTencentCaptchaOptionsDarkModeForce,}TencentCaptchaOptionsDarkMode;
/// Switch Optiontypedef enum : NSUInteger {TencentCaptchaOptionsSwitchDefault,TencentCaptchaOptionsSwitchOn,TencentCaptchaOptionsSwitchOff,} TencentCaptchaOptionsSwitch;
/// Captcha Service Configuration/// - Use in `+[TencentCaptcha setupWithConfigurationHandler:]` to configure the service/// - SeeAlso:/// - Objective C: `+[TencentCaptcha setupWithConfigurationHandler:]`,/// - Swift: `TencentCaptcha.setup(configurationHandler:)`@interface TencentCaptchaConfiguration : NSObject- (nonnull instancetype)init NS_UNAVAILABLE;@property (nonnull, nonatomic, copy) NSString *appID;/// Tars server address/// - Note: If the purpose is unclear, do not set@property (nullable, nonatomic, copy) NSURL *tarsServerURL;/// Set the Host for the Captcha page/// - Note:/// - can only set the host part in the URL, such as the host part in `https://host/path/to/html`, other parts currently do not support modification/// - If the host is invalid and causes the correct page URL to be unable to generate, the setting is invalid/// - Set to nil to keep the default value/// - If the purpose is unclear, do not set@property (nullable, nonatomic, copy) NSString *captchaPageHost;/// Whether using a cached token is allowed to speed up the request process/// - Note: Defaults to YES. The cache policy meets needs in most scenarios. If you need special attention to real-time risk, set to NO.@property (nonatomic, assign) BOOL usesCacheToken;/// [Disabled, unified usage timeout]/// Request timeout duration for local device risk detection, in seconds@property (nonatomic, assign) NSTimeInterval timeoutForNativeRequest__attribute__((deprecated("NOT WORK! Use 'timeout' instead.")));/// [Disabled, unified usage timeout]/// Collection timeout duration for local device risk detection, in seconds@property (nonatomic, assign) NSTimeInterval timeoutForNativePacking__attribute__((deprecated("NOT WORK! Use 'timeout' instead.")));/// [Disabled, unified usage timeout]/// Page loading timeout duration, in seconds@property (nonatomic, assign) NSTimeInterval timeoutForWebViewLoading__attribute__((deprecated("NOT WORK! Use 'timeout' instead.")));/// Unify timeout settings, in seconds. Internal stages perform timeout control allocation to simplify setting logic.@property (nonatomic, assign) NSTimeInterval timeout;@end
/// The implementation class of the Captchaservice@interface TencentCaptcha:NSObject-(nonnull instancetype)init NS_UNAVAILABLE;/// The singleton of the Captchaservice+(nonnull instancetype)sharedService NS_SWIFT_NAME(shared());/// Configurationserviceoptions/// - Parameter configurationHandler: To modify the configuration, change the propertiesinthe configuration providedinthis callbackfunction-(void)setupWithConfigurationHandler:(nonnull void(^)(TencentCaptchaConfiguration *_Nonnull))configurationHandler NS_SWIFT_NAME(setup(configurationHandler:));/// Request Captcha/// - Parameters:/// - webView: The web view used to display the Captcha/// - options: Captcha request parameters/// - completionHandler: Completion callbackforverification////// @discussion Due to some system limitations, the SDK cannot currently receive WKWebView generated from StoryBoard.-(void)requestCaptchaWithWebView:(nonnull WKWebView *)webView options:(nullable TencentCaptchaOptions *)options withCompletionHandler:(nonnull void(^)(NSError *_Nullable error, NSDictionary *_Nullable result))completionHandler NS_SWIFT_NAME(requestCaptcha(withWebView:options:withCompletionHandler:));/// Set additional parameters/// @param value Parameter value/// @param name Keyword name of the parameter/// @discussion When the parameter corresponding to name does not exist, a new value will be inserted. If it exists, the new value will overwrite the old one; when value is nil, this parameter will be deleted.- (void)setExtractParameter:(nullable id)value forName:(nonnull NSString *)name;/// Additional parameters currently set@property (nonatomic, strong, readonly, nonnull) NSDictionary<NSString *, id> *extractParameters;@end
/// Captcha service implementation class/// - Provides main Captcha service capacity/// - Example:/// ```swift/// // Step 1. Guide user to agree to the User Privacy Agreement, then set `userDidAcceptPrivacyPolicy`/// TencentCaptcha.userDidAcceptPrivacyPolicy = true/// // Step 2. Initialize SDK/// TencentCaptcha.setup(...)/// // Step 3. Generate WebView and configure/// webView = WKWebView(...)/// self.view.addSubview(webView)/// // Step 4. Generate and display Captcha/// TencentCaptcha.requestCaptcha(...)///@interface TencentCaptcha : NSObject- (nonnull instancetype)init NS_UNAVAILABLE;/// Captcha service singleton+ (nonnull instancetype)sharedService NS_SWIFT_NAME(shared());/// Whether the user has approved the privacy policy/// Before calling any SDK feature, please first guide the user to agree to the privacy policy, then set this property to `YES` / `true`/// - Example:/// ```swift/// // User agreed to the privacy policy/// TencentCaptcha.userDidAcceptPrivacyPolicy = true/// ```/// - Warning: The SDK does not provide Captcha service before the user agrees to the privacy policy@property (nonatomic, assign, class) BOOL userDidAcceptPrivacyPolicy;@property (nonatomic, readonly, nonnull, class) TencentCaptchaConfiguration *configuration;/// Configuration service options/// - Parameters:/// - configurationHandler: if needed, modify the attributes of the configuration provided in this callback function////// - Example: Minimize settings/// ```/// TencentCaptcha.setup { config in/// config.appID = __YOUR_CAPTCHA_APP_ID__ // Please use your Captcha App ID to replace __YOUR_CAPTCHA_APP_ID__/// }/// ```/// - Note: Please configure the service as early as possible and ensure setup before use/// - SeeAlso: `TencentCaptchaConfiguration`+ (void)setupWithConfigurationHandler:(nonnull void(^)(TencentCaptchaConfiguration *_Nonnull))configurationHandler NS_SWIFT_NAME(setup(configurationHandler:));/// Request a Captcha/// - Parameters:/// - webView: web view for showing Captcha, needs to be initialized by caller/// - options: Captcha request parameters/// - completionHandler: callback for verification completion////// - Example:/// ```swift/// TencentCaptcha.shared().requestCaptcha(withWebView: webView, options: options) { error, result in/// if let result = result {/// // When token is not empty, Captcha verification succeeds/// }/// else {/// // Otherwise error will output error, see the document for specific error domain and error code/// }/// }/// ```////// - Warning: Due to certain system limitations, the SDK is temporarily unable to receive WKWebView generated from StoryBoard. Please use code to initialize a WKWebView and pass it to the SDK, for example:/// ```swfit/// let contentController = WKUserContentController()/// let config = WKWebViewConfiguration()/// config.userContentController = contentController/// webView = WKWebView(frame: self.view.bounds, configuration: config)/// webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]/// self.view.addSubview(webView)/// ```- (void)requestCaptchaWithWebView:(nonnull WKWebView *)webView options:(nullable TencentCaptchaOptions *)options withCompletionHandler:(nonnull void(^)(NSError *_Nullable error, NSDictionary *_Nullable result))completionHandler NS_SWIFT_NAME(requestCaptcha(withWebView:options:withCompletionHandler:));
Field Name | Value Type | Description |
ret | Int | Verification result, 0: Verification successful. 2: User actively closes the Captcha. |
ticket | String | Ticket returned by the Captcha, ticket has a value if and only if ret = 0. |
CaptchaAppId | String | Captcha Application ID. |
bizState | Any | Custom pass-through parameters. |
randstr | String | The random string for this verification, which needs to be passed during subsequent ticket verification. |
errorCode | Number | |
errorMessage | String | Error message. |
Error Code | Description |
0 | No error |
1 | Request protocol packaging error |
2 | Reply protocol unpacking error |
3 | Empty reply error |
31 | X1 protocol data compression error |
4 | Shark protocol shark layer unpacking error |
5 | Shark protocol shark layer does not contain sashimi |
6 | Shark protocol sashimi layer unpacking error |
7 | Shark protocol sashimi layer empty packet error |
8 | Shark protocol registration GUID error |
9 | Shark protocol save GUID error |
10 | Shark protocol unrecognized command word |
20 | Session expiration |
21 | Abnormal return of Shark Skin layer |
22 | Shark Skin layer unpacking error |
23 | Shark protocol sashimi layer return value is non-zero |
11 | The record is empty |
12 | The record content is invalid or some data is missing (error details available in DEBUG mode) |
13 | GUID not included when sending Shark request (currently only theoretically possible) |
14 | Record not included when sending Shark/WUP request |
15 | Current GUID does not correctly correspond to server type |
16 | Neither error nor server response included when generating reply content (currently only theoretically possible) |
17 | Client error for HTTP request (status code between 400~499) |
18 | Server error for HTTP request (status code between 500~599) |
19 | Received response does not correspond to the request |
25 | Temporarily unable to request |
26 | Illegal internal call |
27 | Request timeout |
28 | Illegal communication protocol, or incorrect communication protocol selected |
29 | Request queue too long |
30 | User/business side cancels the request |
24 | Internal testing reserved |
34 | Serialization failure when generating a token. |
35 | User has not agreed to the privacy policy. |
38 | Channel number not correctly set |
37 | unavailable method or function |
36 | Exception capture (detailed anomalies will be provided in error.userInfo) |
Feedback