鸿蒙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

相关文章

你的华为手机升级了吗? 鸿蒙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 &

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

题目: 题解: 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 & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 @CustomDialog 修饰的组件 ,并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController,加载组件,open()-> 打开对话框 , close() -> 关闭对话框 #定义弹窗 (CustomDialog)是什么? CustomDialog是自定义弹窗,可用于广告、中