【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%')
  }
}
相关推荐
陈_杨几秒前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片开发完全指南
前端·harmonyos
陈_杨8 分钟前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片刷新机制
前端·harmonyos
哈__26 分钟前
从入门小白到精通,玩转 React Native 鸿蒙跨平台开发:TouchableOpacity 触摸反馈组件
react native·react.js·harmonyos
小雨下雨的雨1 小时前
Flutter 框架跨平台鸿蒙开发 —— Flex 控件之响应式弹性布局
flutter·ui·华为·harmonyos·鸿蒙系统
哈__1 小时前
入门小白到精通,玩转 React Native 鸿蒙跨平台开发:Button 按钮组件与点击事件
react native·react.js·harmonyos
奋斗的小青年!!1 小时前
OpenHarmony Flutter实战:打造高性能订单确认流程步骤条
flutter·harmonyos·鸿蒙
Georgewu1 小时前
【HarmonyOS应用开发】鸿蒙碰一碰分享开发源码和流程讲解
harmonyos
行者961 小时前
Flutter跨平台骨架屏组件在鸿蒙系统上的实践与优化
flutter·harmonyos·鸿蒙
奋斗的小青年!!1 小时前
Flutter自定义图表跨平台适配OpenHarmony
flutter·harmonyos·鸿蒙
奋斗的小青年!!2 小时前
Flutter + OpenHarmony:高性能搜索组件深度优化实战解析
flutter·harmonyos·鸿蒙