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

一、背景

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

二、顶象验证码简介

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

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

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

三、开发前准备

总结:AppID+SDK+网络权限

3.1 获取 AppID

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

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

3.2、SDK下载与引用

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

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

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

3.3 配置网络权限

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

TypeScript 复制代码
    "requestPermissions": [
      {
        "name": 'ohos.permission.INTERNET',
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ],

四、具体实现

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

说明:

view.init("")填写申请的APPID

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


核心逻辑:

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

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

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

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

完整示例代码:

TypeScript 复制代码
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%')
  }
}
相关推荐
果粒蹬i11 小时前
【HarmonyOS】DAY7:鸿蒙跨平台 Tab 开发问题与列表操作难点深度复盘
华为·harmonyos
王码码203512 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
小镇敲码人12 小时前
探索CANN框架中TBE仓库:张量加速引擎的优化之道
c++·华为·acl·cann·ops-nn
ITUnicorn12 小时前
【HarmonyOS6】ArkTS 自定义组件封装实战:动画水杯组件
华为·harmonyos·arkts·鸿蒙·harmonyos6
小镇敲码人12 小时前
探索华为CANN框架中的ACL仓库
c++·python·华为·acl·cann
全栈探索者13 小时前
@Component + struct = 你的新函数组件——React 开发者的鸿蒙入门指南(第 2 期)
react·harmonyos·arkts·前端开发·deveco studio·鸿蒙next·函数组件
廖松洋(Alina)13 小时前
【收尾以及复盘】flutter开发鸿蒙APP之成就徽章页面
flutter·华为·开源·harmonyos·鸿蒙
廖松洋(Alina)14 小时前
【收尾以及复盘】flutter开发鸿蒙APP之打卡日历页面
flutter·华为·开源·harmonyos·鸿蒙
廖松洋(Alina)14 小时前
【收尾以及复盘】flutter开发鸿蒙APP之本月数据统计页面
flutter·华为·开源·harmonyos·鸿蒙
果粒蹬i14 小时前
【HarmonyOS】DAY8:React Native for OpenHarmony 实战:多端响应式布局与高可用交互设计
react native·交互·harmonyos