news 2026/4/23 8:32:04

【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/4/21 8:40:11

15、深入探索Vim寄存器:复制粘贴的高级技巧

深入探索Vim寄存器:复制粘贴的高级技巧 1. 复制粘贴初体验与问题发现 在Vim中进行复制粘贴操作时,可能会遇到意想不到的情况。例如,我们先使用 yiw 复制了单词 “collection”,之后执行 diw 删除了另一个单词 “somethingInTheWay”,再使用 P 命令粘贴时,预期粘贴…

作者头像 李华
网站建设 2026/4/21 21:00:01

21、Vim搜索与替换技巧全解析

Vim搜索与替换技巧全解析 1. 搜索匹配的文本对象 理想的Dot Formula需要一个按键来移动,一个按键来执行更改。但有时移动可能需要三个按键(如 //<CR> ),这并不理想。Vim没有更方便的内置动作来操作搜索匹配项,不过我们可以通过Vim脚本添加此功能。 推荐使用Kan…

作者头像 李华
网站建设 2026/4/19 18:21:54

5分钟快速搭建个人天气数据服务:Open-Meteo开源API实战指南

5分钟快速搭建个人天气数据服务&#xff1a;Open-Meteo开源API实战指南 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/gh_mirrors/op/open-meteo 问题痛点&#xff1a;为什么我们需要自己的天气数据服务…

作者头像 李华
网站建设 2026/4/21 18:05:52

25、Vim编程利器:编译、搜索与错误导航全攻略

Vim编程利器:编译、搜索与错误导航全攻略 1. 编译代码与快速修复列表 1.1 编译代码 在Vim中,我们可以使用 :make 命令来编译代码。例如,对于一个C程序 wakeup.c ,我们可以使用以下命令进行编译: :make ➾ gcc -c -o wakeup.o wakeup.c ❮ gcc -o wakeup wakeup.o…

作者头像 李华
网站建设 2026/4/23 1:58:33

28、Vim进阶:持续实践与个性化定制

Vim进阶:持续实践与个性化定制 持续实践的重要性 持续练习是掌握 Vim 的关键。随着不断实践,曾经看似棘手的操作会变得得心应手,最终达到无需思考就能操作 Vim 的境界,实现思维速度级别的文本编辑。而且,Vim 的学习并非线性的,初次阅读可能无法掌握所有技巧,再次翻阅往…

作者头像 李华
网站建设 2026/4/20 17:30:02

Windows必备万能解压神器:UniExtract2终极使用指南

还在为各种奇怪的压缩包格式而头疼吗&#xff1f;UniExtract2这款万能解压工具能够帮你解决所有文件提取难题。作为一款真正的Windows解压神器&#xff0c;它不仅支持常规压缩格式&#xff0c;还能处理各种安装程序和特殊文件类型。 【免费下载链接】UniExtract2 Universal Ext…

作者头像 李华