【AGC】认证服务HarmonyOS(api9)实现手机号码认证登录

news2024/9/22 9:27:31

【问题背景】

近期AGC上线了HarmonyOS(api9)平台的SDK,这样api9的设备也能使用认证服务进行快速认证登录了。下面为大家带来如何使用auth SDK(api9)实现手机号码认证登录。

【开通服务】

1.登录AppGallery Connect,点击“我的项目”,在项目的应用列表中选择您需要开通认证服务的应用。在导航栏选择“构建 > 认证服务”,请点击“立即开通”开通服务。

cke_1170.png

2.点击需要启动的认证方式所在行的“启用”。本次Codelab选择启用“手机号码”。

cke_2818.png

【集成SDK】

1.登录AppGallery Connect页面,点击“我的项目”,在项目下的应用列表中选择您开通认证服务的应用。

2.在项目设置的“常规”页签下,点击“应用”栏下的“agconnect-services.json”下载配置文件。

3.将“agconnect-services.json”文件拷贝到DevEco Studio项目的应用级资源目录“AppScope/resources/rawfile”下,如果没有这个目录,请创建一个。

cke_5141.png

4.打开您的HarmonyOS工程,打开应用级(一般为entry目录)下的“oh-package.json5”文件,在"dependencies": {

"dependencies": {    "@hw-agconnect/core-ohos": "^1.0.9",    "@hw-agconnect/credential-ohos": "^1.0.9

5.点击界面上的“Sync Now”链接同步已完成的配置。

cke_2078.png

6.在“EntryAbility.ts”文件中导入agc组件。

import agconnect from '@hw-agconnect/api-ohos';import "@hw-agconnect/core-ohos";import "@hw-agconnect/auth-ohos";

7.在“EntryAbility.ts”文件的onCreate中使用entry的context初始化SDK,并且将auth对象保存为全局变量。

//初始化SDKagconnect.instance().init(this.context);globalThis.auth = agconnect.auth();

8.在“entry/src/main/module.json5”文件中添加网络权限。

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

【功能开发】

在“index.ets”文件中导入我们需要用到的包。

import { Logger } from "@hw-agconnect/base-ohos"import "@hw-agconnect/auth-ohos"import { EmailAuthProvider, VerifyCodeAction, VerifyCodeSettingBuilder, PhoneUserBuilder,  PhoneAuthProvider, AGConnectAuth, AGConnectAuthCredentialProvider} from "@hw-agconnect/auth-ohos"

接收在“EntryAbility.ts”文件中实例化的auth对象。

let auth = globalThis.auth;

创建四个空字符串分别用于存放手机号码、国家码、验证码和Uid。

@State phoneNumber: string = ''@State countryCode: string = ''@State verifyCode: string = ''@State uid: string = ''

下面进入布局与功能开发环节,首先需要创建一个输入框用于输入国家码。

TextInput({ placeholder: 'country code' })            .width('38%')            .margin({ top: 20 })            .onChange((value: string) => {              this.countryCode = value;            })

第二步,创建一个输入框用于输入手机号码。

TextInput({ placeholder: ' phone number' })            .width('52%')            .margin({ top: 20 })            .onChange((value: string) => {              this.phoneNumber = value;            })

第三步,创建一个输入框用于输入验证码。

TextInput({ placeholder: 'verify code' })            .width('40%')            .margin({ top: 20 })            .onChange((value: string) => {              this.verifyCode = value;            })

第四步,创建一个按钮用于根据输入的国家码与手机号码获取验证码。先调用new VerifyCodeSettingBuilder()构造方法设置验证码的参数,例如验证码类型、发送语言和发送间隔。然后调用AGConnectAuth.requestPhoneVerifyCode方法,使用countryCode、phoneNumber和verifyCodeSettings作为参数申请验证码。

Button("request verify code").width('50%').margin({ top: 20 })            .onClick(() => {              let verifyCodeSettings = new VerifyCodeSettingBuilder()                .setAction(VerifyCodeAction.REGISTER_LOGIN)                .setLang('zh_CN')                .setSendInterval(60)                .build();              auth.requestPhoneVerifyCode(this.countryCode, this.phoneNumber, verifyCodeSettings)                .then(verifyCodeResult => {                  Logger.info(TAG, "requestPhoneVerifyCode success " + JSON.stringify(verifyCodeResult));                }).catch(error => {                Logger.error(TAG, "requestPhoneVerifyCode error " + JSON.stringify(error));              })            })

第五步,创建一个按钮用于注册用户并登陆。先调用PhoneUserBuilder生成PhoneUser,然后调用AGConnectAuth.createPhoneUser注册用户。然后调用PhoneAuthProvider.credentialWithVerifyCode采用验证码方式创建手机帐号凭证。获取credential成功后,调用AGConnectAuth.signIn实现登录。

Button("signin phone").width('60%').margin({ top: 40 })          .onClick(() => {            let user = new PhoneUserBuilder()              .setCountryCode(this.countryCode)              .setPhoneNumber(this.phoneNumber)              .setVerifyCode( this.verifyCode)              .build();            auth.createPhoneUser(user)              .then(result => {                Logger.info(TAG, "createPhoneUser success getUid:" + result.getUser().getUid());              })            let credential = PhoneAuthProvider.credentialWithVerifyCode(this.countryCode,this.phoneNumber, this.verifyCode);            auth.signIn(credential).then(signInResult => {              this.uid = "Uid:"+signInResult.getUser().getUid();              Logger.info(TAG, "signInPhone success " + signInResult.getUser().getUid());            });          })

第六步,创建一个按钮用于登出当前账号。当用户不再使用应用,或者需要使用其他帐号登录时,需要调用AGConnectAuth.signOut登出当前用户。用户一旦被登出,端侧的用户信息和Token将被清除。

Button("sign out").width('60%').margin({ top: 40 })          .onClick(() => {            auth.signOut().then(() => {              this.uid = "sign out success";              Logger.info(TAG, "sign out success");            });          })

第七步,创建一个文本框用于显示登录账号的Uid。

Text(this.uid)          .margin({ top: 50 })          .fontSize(25)          .fontColor(Color.Gray)

【打包测试】

1.运行DevEco Studio工程生成APP包,并在测试手机中安装APP包。

2.输入国家码与手机号,点击“request verify code”按钮获取验证码,查看对应手机号是否可以收到认证服务服务器发送的验证码。

cke_17698.png

3.输入验证码,点击“signin phone”按钮使用当前手机号与验证码登录,观察界面是否可以打印出手机号对应的用户uid。

cke_20371.png

4.点击“sign out”按钮退出当前登录账号。

cke_24592.png

参考文档:文档中心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lc202306

785. 判断二分图 对于单个连通图:一个dfs判断图中所有节点符合二分。 遍历节点列表>遍历所有连通图。 133. clone graph 994. rotting oranges 力扣 维护一个time表,表示所有orange rot的最快时间。对每一个 t0 就 rot 的 orange dfs,遇…

无法从gcr.io获取distroless镜像问题

当我们能够访问外网,且能够ping通gcr.io网站后,依旧无法拉取distroless镜像时,可以通过以下网站作为中转获取。 rootacoinfo-Vostro-3667:/home/xxx/xx# docker pull gcr.io/distroless/base-debian11 Using default tag: latest Error resp…

快速制作优惠券信息展示小程序教程

要想拥有一个拥有优惠券功能的小程序商城,首先我们需要搭建一个小程序。以乔拓云第三方平台为例,我们可以通过以下步骤来完成。 首先,登录乔拓云平台,进入【乔拓云】后台管理页面。乔拓云功能强大,不仅可以搭建小程序…

运维开发面试题第五期(华电天益)

1、一个目录(没有子目录)有很多文件,想最快速度查看到最近更新的文件你有几种方式实现?请写出一种或几种 ls -lrt 目录 R 逆序 l 长格式 t 按更新时间排序2、使用 tar 命令打包/etc 目录下的所有文件(包括子文件夹) tar -cvf 打包路径加名字 /etc/ 仅打包…

[gtp]购物车案例参考

react hooks,购物车案例. 在列表上点击或者-更新数量,调用接口更新单个价格. 点击table的checkbox勾选后,计算总价? 对于React Hooks和购物车案例,您可以使用useState来管理列表中商品的数量和总价。当点击"“或”-"按钮时,可以更新相应商品…

网络营销的定义、实现方式、关键要素和应用案例

网络营销是通过互联网及相关技术手段来实现企业品牌推广、产品销售、客户维护等目标的营销方式。近年来,随着互联网技术的飞速发展,网络营销已成为企业推广、销售和宣传的重要手段。本文将从网络营销的定义、实现方式、关键要素和应用案例等方面&#xf…

【ECharts系列】ECharts 图表渲染问题解决方案

1 问题描述 echats 渲染,第一次的时候只出现Y轴数值,不出现X轴数值,切换下页面,X轴数值就能出现。 2 原因分析 如果在使用ECharts渲染时,X轴数值只在切换页面后才出现,可能是因为ECharts在初始化时没有正确…

Mac上提取应用APP的LOGO

1、找到想提取LOGO的应用,右键「显示包内容」 2、 双击【Contents】文件夹,再双击【Resources】文件夹 3、双击图标打开,选择最清晰的一帧,右键【导出为】 4、选择保存位置,格式注意选择常见格式,如png

【Ajax】Express 服务端框架

因为Ajax需要向服务端发送请求。Express框架比较简单,内容使用起来比较少,借助一个基本功能就可以了。 Express 基于 Node.js 平台,快速、开放、极简的 Web 开发框架 所以需要安装一下node.js 检查命名:node -v 安装 打开项目最外…

多线程面试题详解

总体概览 线程的基础知识 线程和进程的区别? 并行和并发有什么区别? 创建线程的方式有哪些? runable和callable有什么区别 run()和start()有什么区别 线程包括了那些状态?这些状态之间如何变化 新建T1,T2,T3三个线程,如…

C#内存不够解决方法

今天在使用C#程序的时候,出现了下图的问题: 注意下图中我用红框标出的位置,实际是一个三维数组。 但是出现这个问题和三维数组没有关系。 他是提示内存不足。 百度了一下,C#在生成的过程中如果是生成对应的32位系统&#xff0c…

VMware15.5版本虚拟机安装Linux Centos 7系统详细步骤

1.首先准备好Centos7.6安装文件,安装文件可百度搜索或在阿里镜像站中下载。 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 2.新建虚拟机. 1选择自定义,点下一步。 2硬件兼容性选择15.x,,点下一步。 3选择稍后安装操作系统&…

自定义seg_decoder组件并创建Nios系统(一)

前面进行了数码管的显示 对Avalon总线协议进行了大概的学习 那么就可以 将数码管译码器模块封装成符合Avalon-MM接口的组件创建一个基于Nios Ⅱ处理器的系统 将数码管译码器组件添加至该系统中 通过用户应用程序控制数码管显示字符0~F 本文同数码管显示一样并不是完整项目&a…

JavaWeb_瑞吉外卖_项目优化Day12-前后端分离

JavaWeb_瑞吉外卖_项目优化Day12-前后端分离 前后端分离开发介绍开发流程前端技术栈 YapiSwagger介绍使用方式常用注解 项目部署部署架构部署环境说明部署前端项目部署后端项目 来源 前后端分离开发 介绍 开发流程 前端技术栈 开发工具 Visual Studio Codehbuilder 技术框架 …

【全栈开发指南】VUE前端路由设计及配置

我们在使用Vue.js时,创建单页面应用一定会用到路由,Vue Router 是 Vue.js 官方的路由管理器,我们在开发框架中过程中,需要结合Vue Router路由管理器提供的功能,设计和实现系统中菜单的配置。 一、实现原理 一级菜单r…

idea创建webapp文件夹

结果的图片: 第一步: file-》project structure 第二步: 修改路径,点击右侧“Deloyment descriptors”下面的笔进行修改。 // 增加了src\main // web修改为了webapp C:\Users\www12\Desktop\huwantiku2\src\main\webapp\WEB-IN…

计算机图形学 3D 渲染 笔记(二)

一、阴影 判断一个点是否被遮住&#xff0c;可以从该点像光源方向发射射线&#xff08;P tL&#xff09;&#xff0c;若射线被与物体发生相交&#xff0c;则说明它在阴影中。而这个物体由于要在 P 和 光源之间&#xff0c;在方向光场景下&#xff0c; t 的取值范围是 0 < …

vue3+vite+Ts 基于Antv/x6 绘制流程图

需求效果&#xff1a; 需求&#xff1a; 实现一个流程图&#xff0c;双击可对相应的组件进行一些功能操作&#xff1b; 工具栈&#xff1a; 这里使用antv/x6&#xff0c; 基于vue3vitets进行开发 官网地址&#xff1a; https://x6.antv.antgroup.com/examples/showcase/pra…

港联证券|dmi指标的用法和实战技巧?

DMI指标是一种技术分析工具&#xff0c;可用于评估股票、期货和外汇市场的趋势强度。DMI指标由三条线组成&#xff0c;分别是DI&#xff08;上升方向指标&#xff09;、-DI&#xff08;下降方向指标&#xff09;和ADX&#xff08;平均趋向指数&#xff09;。在使用DMI指标之前&…

Unity DOTS纯ECS实现虚拟摇杆Joystick控制角色移动

上篇已经实现了ECS框架下的IBeginDragHandler、IDragHandler、IEndDragHandler这几个拖动事件&#xff0c;使得可以任意给ECS框架下的UI(2D entity)响应拖动事件。本篇分享下在前篇实现的功能的基础上再实现一个常用的摇杆控制角色移动的功能。 需要注意的一点&#xff0c;目前…