news 2026/10/20 5:38:40

【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/10/20 8:08:59

AI原生应用中的长尾用户意图理解解决方案

AI原生应用中的长尾用户意图理解解决方案 关键词&#xff1a;AI原生应用、长尾用户意图、意图理解、小样本学习、多模态融合、持续学习、自然语言处理 摘要&#xff1a;在AI原生应用&#xff08;如智能助手、个性化推荐系统&#xff09;中&#xff0c;用户不再满足于“标准化对…

作者头像 李华
网站建设 2026/10/20 19:48:36

23、Vim 多文件查找替换与全局命令使用技巧

Vim 多文件查找替换与全局命令使用技巧 在 Vim 编辑器中,我们常常会遇到需要在多个文件中进行查找替换,或者对匹配特定模式的行执行操作的需求。下面将详细介绍如何在 Vim 中实现这些功能。 多文件查找替换 在项目中,有时我们需要将某个特定的字符串替换为另一个字符串。…

作者头像 李华
网站建设 2026/10/19 6:38:51

如何避免MySQL死锁?资深DBA的9条黄金法则

死锁是数据库里很常见的问题&#xff1a;两个或多个事务互相等待对方释放锁&#xff0c;结果谁也动不了。MySQL的InnoDB引擎会自己自动检测死锁&#xff0c;并且回滚其中一个事务来解决&#xff0c;但这种情况如果经常遇到的话&#xff0c;会很影响性能和用户体验。其实&#x…

作者头像 李华
网站建设 2026/10/19 16:20:20

arcpy导出excel表

我们有些时候需要导出excel表进行分析&#xff0c;因而需要熟练掌握导出excel表的技巧。 import arcpy import pandas as pd import os# 输入 shp 文件路径 shp_path r"D:\03A-Archives\博二上\全国土地退化论文\data\boundary\2017省市县行政区划\全国_10k_poly_dr.shp&…

作者头像 李华
网站建设 2026/10/20 11:07:08

视频硬字幕AI去除终极方案:本地化无损修复技术详解

视频硬字幕AI去除终极方案&#xff1a;本地化无损修复技术详解 【免费下载链接】video-subtitle-remover 基于AI的图片/视频硬字幕去除、文本水印去除&#xff0c;无损分辨率生成去字幕、去水印后的图片/视频文件。无需申请第三方API&#xff0c;本地实现。AI-based tool for r…

作者头像 李华
网站建设 2026/10/20 18:27:13

BetterNCM插件完整教程:从零开始打造你的专属音乐工作站

BetterNCM插件完整教程&#xff1a;从零开始打造你的专属音乐工作站 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一、界面单调而困扰吗&#xff1f;想要把普…

作者头像 李华