鸿蒙API9手机号验证

2023-10-10 17:44
文章标签 验证 手机号 鸿蒙 api9

本文主要是介绍鸿蒙API9手机号验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

鸿蒙API9手机号验证

做一个app用户认证,之前一直想着都是通过HMS Core里边来接入,但是里边的文档最高只支持到API7。
由于想直接用API9来接,毕竟感觉后续ts/java混合开发要被舍弃,尽量还是用新的来弄。看了一遍新的API9的文档,感觉比之前的完善了很多,不过就是相应的配套支持还少点。卡了好久,没事想先关注一下文档有没有更新。突然发现还有另外一个途径,在AppGallery Connect里边有个认证服务,目前API9支持手机跟邮箱两种方式,后续应该能更新华为账号方式登陆。据说现在微信也开始适配鸿蒙了,感觉再过一段时间可能就能接入微信登陆了。

文档地址

参考地址

下边按步骤接入一下,需要提前准备一个AppGallery Connect账号。

新建工程

随便创建一个,记录一下bundle ID,然后在通过 AppGallery Connect 创建一个应用,填写相同的bundle ID。或者反过来也行,只要保证两边的bundle ID一样就行了。

开通认证服务

进入AppGallery Connect开通认证服务

请添加图片描述

开通认证服务的手机号项目

请添加图片描述

开局送了1000条短信每月,简直不要太爽,微信小程序的配额一共免费1000条,而且那个还不一定会发验证码,相比于这个就良心多了。
在认证的用量能看到短信的发送次数。

请添加图片描述

在项目设置的项目配额里边,改成查看认证服务能够看到短信的配额用多少了。

请添加图片描述

在认证服务的配置中还能设置短信模版内容

请添加图片描述

配置依赖

下载 agconnect-services.json,在AppGallery Connect项目配置->常规下边有这个文件的下载地方。

请添加图片描述

把其放到项目的这个位置上,resources/rawfile/文件夹下。

请添加图片描述

增加项目文件的依赖,项目文件路径 工程/entry/oh-package.json5
把如下内容添加到package.json5里边

{"@hw-agconnect/auth-ohos": "^1.1.2","@hw-agconnect/api-ohos": "^1.1.2","@hw-agconnect/core-ohos": "^1.1.2"
}

修改后文件如下:

{"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic information.","main": "","version": "1.0.0","dependencies": {"@hw-agconnect/auth-ohos": "^1.1.2","@hw-agconnect/api-ohos": "^1.1.2","@hw-agconnect/core-ohos": "^1.1.2"}
}

之后同步项目工程,等待安装依赖库。

在 entry/src/main/module.json5 文件里边增加网络权限。

"requestPermissions": [{"name": "ohos.permission.INTERNET",}
]

写个大概的页面

根据功能需要,要有一个短信输入框、验证码输入框、发送验证码按钮、登陆按钮几个。
稍微画一下界面,效果如下:

请添加图片描述

接入逻辑

引入模块

import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/core-ohos";
import "@hw-agconnect/auth-ohos";
import { EmailAuthProvider, VerifyCodeAction, VerifyCodeSettingBuilder, PhoneUserBuilder,PhoneAuthProvider, AGConnectAuth, AGConnectAuthCredentialProvider
} from "@hw-agconnect/auth-ohos"

初始化及查看是否有用户登录信息,如果之前短信验证码验证成功的话,一般来说第二次启动就能拿到上次的登录信息:

agconnect.instance().init(this.context.getApplicationContext());
agconnect.auth().getCurrentUser().then(user=>{if(user){//业务逻辑console.log('xx get user success ' + JSON.stringify(user))this.message = 'uuid: ' + user.getUid()} else {console.log('xx not login')this.message = '暂无登陆信息'}
}).catch(error=>{console.log('xx get user failed'+JSON.stringify((error)))
})

把手机号跟验证码发到全局变量里边

@State message: string = '^_^'
@State phoneNumber: string = ''
@State verifyCode: string = ''
countryCode: string = '+86'

发送验证码及验证码登陆流程

private handleSendVerifyCode = () => {let verifyCodeSettings = new VerifyCodeSettingBuilder().setAction(VerifyCodeAction.REGISTER_LOGIN).setLang('zh_CN').setSendInterval(60).build();agconnect.auth().requestPhoneVerifyCode(this.countryCode,this.phoneNumber,verifyCodeSettings).then(verifyCodeResult => {console.log('xx verify code success '+JSON.stringify(verifyCodeResult))//验证码申请成功this.message = '发送验证码成功'}).catch(error => {//验证码申请失败console.log('xx verify code fail '+JSON.stringify(error))});
}private handleCheckVerifyCode = () => {let credential = PhoneAuthProvider.credentialWithVerifyCode(this.countryCode,this.phoneNumber, this.verifyCode);agconnect.auth().signIn(credential).then(user => {//登录成功console.log('xx user is '+JSON.stringify(user))this.message = 'uuid: ' + user.getUser().getUid()}).catch(error => {//登录失败console.log('xx login code fail '+JSON.stringify(error))});
}

之后整体代码接入一下完成:

import common from '@ohos.app.ability.common'
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/core-ohos";
import "@hw-agconnect/auth-ohos";
import { EmailAuthProvider, VerifyCodeAction, VerifyCodeSettingBuilder, PhoneUserBuilder,PhoneAuthProvider, AGConnectAuth, AGConnectAuthCredentialProvider
} from "@hw-agconnect/auth-ohos"@Entry
@Component
struct Index {@State message: string = '^_^'@State phoneNumber: string = ''@State verifyCode: string = ''countryCode: string = '+86'private context = getContext(this) as common.UIAbilityContextonPageShow() {agconnect.instance().init(this.context.getApplicationContext());agconnect.auth().getCurrentUser().then(user=>{if(user){//业务逻辑console.log('xx get user success ' + JSON.stringify(user))this.message = 'uuid: ' + user.getUid()} else {console.log('xx not login')this.message = '暂无登陆信息'}}).catch(error=>{console.log('xx get user failed'+JSON.stringify((error)))}) ;}private handleSendVerifyCode = () => {let verifyCodeSettings = new VerifyCodeSettingBuilder().setAction(VerifyCodeAction.REGISTER_LOGIN).setLang('zh_CN').setSendInterval(60).build();agconnect.auth().requestPhoneVerifyCode(this.countryCode,this.phoneNumber,verifyCodeSettings).then(verifyCodeResult => {console.log('xx verify code success '+JSON.stringify(verifyCodeResult))//验证码申请成功this.message = '发送验证码成功'}).catch(error => {//验证码申请失败console.log('xx verify code fail '+JSON.stringify(error))});}private handleCheckVerifyCode = () => {let credential = PhoneAuthProvider.credentialWithVerifyCode(this.countryCode,this.phoneNumber, this.verifyCode);agconnect.auth().signIn(credential).then(user => {//登录成功console.log('xx user is '+JSON.stringify(user))this.message = 'uuid: ' + user.getUser().getUid()}).catch(error => {//登录失败console.log('xx login code fail '+JSON.stringify(error))});}build() {Column({space: 20}) {TextInput({placeholder:"请输入手机号"}).width(320).height(40).type(InputType.Number).onChange((v) => {this.phoneNumber = v})Row({space: 20}) {TextInput({placeholder:"请输入验证码"}).width(200).height(40).type(InputType.Number).onChange((v) => {this.verifyCode = v})Button("发送验证码").width(100).height(40).onClick(()=>{if(this.phoneNumber.length == 11) {this.handleSendVerifyCode()} else {AlertDialog.show({message: '请输入正确的手机号',confirm: {value: '确定',action: ()=>{}}})}})}Button("登陆").width(320).height(40).margin({top: 40}).onClick(()=>{if(this.verifyCode.length >= 4) {this.handleCheckVerifyCode()} else {AlertDialog.show({message: '请输入正确的验证码',confirm: {value: '确定',action: ()=>{}}})}})Text(this.message).margin({top: 40})}.alignItems(HorizontalAlign.Center).padding({top: 100}).width('100%')}
}

最后最后还有个比较好的功能就是谁发过短信注册过用户在AppGallery Connect都能够查看到。

请添加图片描述

这篇关于鸿蒙API9手机号验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182054

相关文章

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &