news 2026/3/3 1:17:15

【HarmonyOS NEXT】顶象验证码 SDK 接入实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【HarmonyOS NEXT】顶象验证码 SDK 接入实践

一、背景

在鸿蒙开发登录场景中,为拦截恶意登录(如频繁输错密码、机器批量尝试),需接入顶象验证码SDK做前置风控校验:用户完成验证码交互后生成有效token,业务登录接口校验token合法性后,再执行登录逻辑。本文基于该场景,总结HarmonyOS NEXT下第三方SDK(顶象验证码)的接入流程。

二、顶象验证码简介

顶象验证码包含两类核心产品(需根据场景选择):

1. 智能无感验证:无需用户手动操作,基于设备指纹、行为特征、访问频率等自动校验,正常用户无感知通过,适合高频操作场景;

2. 滑动/点选验证:用户需完成简单交互(如滑动滑块),适合高风险场景(如频繁输错密码后触发)。 该文章总结“滑动验证”在鸿蒙中的接入,其核心价值是:前端完成交互生成token,后端校验token有效性,阻断机器操作,兼顾安全性与用户体验。

三、开发前准备

3.1 获取 AppID

流程:注册顶象—>开通无感验证服务—>获取APPID—>接入成功后查看统计数据

官网链接:https://www.dingxiang-inc.com/docs/detail/captcha#doc-h3-13

3.2 配置网络权限

顶象验证码需调用网络接口,需在模块级`module.json5`中静态声明权限:

"requestPermissions": [ { "name": 'ohos.permission.INTERNET', "usedScene": { "abilities": [ "EntryAbility" ], "when": "inuse" } } ],

3.3、SDK下载与引用

备注:此种方法是手动引入

官网里面有提供SDK文件,下载后在项目中新建一个目录进行保存

在需要使用的模块文件中oh-package.json5里面引入顶象SDK

四、具体实现

示例代码:点击按钮出现验证码弹窗,调用CaptChaview子组件并注册回调即完成初始化

说明:

view.init(“”)填写申请的APPID

view.startToLoad(...) 方法,是触发验证码加载/验证接口请求的入口(返回的 “成功 / 失败” 结果)


核心逻辑:

1. 点击登录按钮触发验证码弹窗;

2. 初始化CaptchaView(传入正式AppID);

3. 完成交互后获取token,传给登录接口;

4. 后端校验token有效性,通过则执行登录。

完整示例代码:

import { CaptchaView, CaptchaViewController, JsonValueType } from 'dx.captcha' import { HashMap } from '@kit.ArkTS'; @Entry @Component struct Index { @State buttonText: string = '点击出现顶象验证码' private config: HashMap<string, JsonValueType> = new HashMap(); /** * 验证码弹窗 */ private captchaDialogController = new CustomDialogController({ alignment: DialogAlignment.Center, customStyle: true, builder: this.captchaBuilder }) // 验证码布局 @Builder captchaBuilder() { Column() { Column() { CaptchaView({ callBack: (view: CaptchaViewController) => { view.init("e83bb4b2069d516f9f0798584e0ac2c1") view.initConfig(this.config) view.startToLoad((event: string, args: JsonValueType) => { console.log('lucy== event', event, JSON.stringify(event)) if (event === "success") { if (args instanceof HashMap) { this.buttonText = '验证码验证成功' console.log('lucy== 处理成功的操作') } this.captchaDialogController.close() } }, 'success', 'fail') } }) } .padding({ left: 10, right: 10, top: 10, bottom: 10 }) .backgroundColor(Color.White) .borderRadius(10) Button() .margin({ top: 20 }) .onClick(() => { this.captchaDialogController.close() }) .backgroundImage($r("app.media.login_dialog_captcha_ic_close")) .backgroundImagePosition(Alignment.Center) .backgroundColor(Color.Transparent) } .backgroundColor(Color.Transparent) } build() { Column() { Button(this.buttonText) .onClick(() => { this.captchaDialogController.open() }) } .width('100%') .height('100%') } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 21:03:03

19、Vim 搜索与匹配技巧全解析

Vim 搜索与匹配技巧全解析 正则表达式开关 在进行搜索时,创建正则表达式是一项常见需求。在非常非魔术搜索(very nomagic search)中创建正则表达式虽可行,但由于要对每个符号进行转义,操作起来比较麻烦。一般规则是:若要搜索正则表达式,使用 \v 模式开关;若要搜索逐…

作者头像 李华
网站建设 2026/2/28 13:27:30

LobeChat股票行情数据获取与展示

LobeChat 股票行情数据获取与展示 在金融信息快速迭代的今天&#xff0c;投资者对实时、精准且易于理解的股票行情数据需求愈发迫切。传统的金融终端虽然功能强大&#xff0c;但操作复杂、学习成本高&#xff1b;而普通用户更希望像聊天一样&#xff0c;随口问一句“宁德时代现…

作者头像 李华
网站建设 2026/3/2 16:43:44

记录宴会排查

1.大概能看出来是前后端数据不一致&#xff0c;因为有错误码&#xff0c;但是没看出来为啥。2.宴会数据是在中心服&#xff0c;客户端在宴会界面断开后&#xff0c;没有请求Info, 给客户端同步消息时&#xff0c;客户端已经断线&#xff0c;导致不一致&#xff0c;客户端连上后…

作者头像 李华
网站建设 2026/2/28 23:17:51

LobeChat消费者行为预测模型

LobeChat消费者行为预测模型 在电商运营的日常中&#xff0c;一个常见的场景是&#xff1a;市场经理打开电脑&#xff0c;输入“帮我看看用户U12345最近有没有复购可能&#xff1f;”几秒钟后&#xff0c;系统不仅列出了该用户的浏览轨迹和加购记录&#xff0c;还自动生成了一段…

作者头像 李华
网站建设 2026/3/1 4:37:40

基于C#的FTP客户端实现方案

基于C#的FTP客户端实现方案&#xff0c;整合了多种协议特性和工程优化&#xff0c;支持文件传输、目录操作及异常处理&#xff1a;一、核心类实现&#xff08;支持被动模式/二进制传输&#xff09; using System; using System.IO; using System.Net; using System.Net.Sockets…

作者头像 李华
网站建设 2026/3/2 9:35:23

深入理解 C# 中 new 关键字的三重核心语义

在 C# 编程中&#xff0c;new 是一个几乎每天都会用到的关键字&#xff0c;但它的职责并不单一。根据使用场景的不同&#xff0c;new 在语言层面承担着 三种完全不同的语义角色&#xff1a; 1. 作为运算符&#xff1a; 创建对象或结构体实例 2. 作为修饰符&#xff1a; 隐藏基类…

作者头像 李华