当前位置: 首页 > article >正文

鸿蒙NEXT开发-华为账号服务

 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

目录

1. 华为账号服务基本概念

1.1 基本介绍

1.2 能力范围

1.3 开发准备

2. 华为账号登录

2.1 业务流程

2.2 接口说明

2.3 代码示例


1. 华为账号服务基本概念

1.1 基本介绍

Account Kit(华为账号服务)提供简单、快速、安全的登录功能,让用户快捷地使用华为账号登录应用。用户授权后,Account Kit可提供头像、昵称、手机号码等信息,帮助应用更了解用户。

1.2 能力范围

  • 登录:提供登录服务,让用户使用华为账号快速登录应用。
  • 获取华为账号用户信息:获取用户的基本开放信息,如头像、昵称、手机号、收货地址、发票抬头。
  • 未成年人模式:获取未成年人模式的开启状态及年龄段信息以进行内容分级,调整未成年人相关设置时可增加家长验证,还可调用接口引导用户开启或关闭未成年人模式。

1.3 开发准备

注意:只能用真机进行测试华为账号登录,模拟器不行

1、我们首选创建一个项目工程,这个项目工程同时也需要在AGC上面创建项目和应用

2、在AGC上添加真机设备

3、把第一步创建的项目进行手动签名,并且在DevEco Studio中配置密钥(.p12)文件、申请的调试证书(.cer)文件和调试Profile(.p7b)文件。

手动签名部署在上一节视频课程中有

4、配置Client ID

登录AppGallery Connect平台,在“项目设置 > 常规 > 应用”区域获取“OAuth 2.0客户端ID(凭据)”处的Client ID。

在工程中entry模块的module.json5文件中,新增metadata,配置name为client_id,value为上一步获取的Client ID的值

5、配置scope权限

注意

scope权限申请当前仅针对企业开发者开放。要是单纯的需要华为账号登录获取头像、昵称基本信息无需申请该权限

参考链接地址:文档中心

2. 华为账号登录

应用可以使用Account Kit提供的华为账号登录按钮获取华为账号用户身份标识UnionID、OpenID,通过UnionID、OpenID完成用户登录;或者与应用账号完成绑定,绑定后用于登录或者验证。

华为账号登录按钮包含文本、标志和文本、标志三种样式,以满足应用对界面风格一致性和灵活性的要求。

2.1 业务流程

流程说明:

1、用户打开应用进行登录,应用设置LoginType类型为LoginType.ID后拉起应用自己的登录页并展示“华为账号登录”按钮,用户点击按钮,请求华为账号授权ID。

2、如华为账号未登录,将拉起华为账号登录页,用户登录后,将返回UnionID、Authorization Code、OpenID、ID Token数据给应用,应用根据获取到的用户标识,服务端进行安全认证后实现应用登录。

3、如华为账号已登录,将直接返回UnionID、Authorization Code、OpenID、ID Token数据给应用,应用根据获取到的用户标识,服务端进行安全认证后实现应用登录。

2.2 接口说明

接口名

描述

LoginWithHuaweiIDButton

华为账号Button登录组件。

当前该组件支持Icon类型按钮、纯文本按钮、Icon和文本混合按钮,如果仍然不能满足开发者的诉求,可以使用BUTTON_CUSTOM类型定义按钮的文字颜色和背景色。

onClickLoginWithHuaweiIDButton(callback: AsyncCallback<HuaweiIDCredential>): LoginWithHuaweiIDButtonController

注册华为账号登录按钮的登录事件结果回调。使用callback异步回调。

setAgreementStatus(agreementStatus: AgreementStatus): LoginWithHuaweiIDButtonController

设置协议状态方法。如果需要用户同意协议才能完成华为账号登录,请先设置协议状态为NOT_ACCEPTED,当用户同意协议后设置协议状态为ACCEPTED,才可以完成华为账号登录。

2.3 代码示例

导入LoginWithHuaweiIDButton模块及相关公共模块。

import { LoginWithHuaweiIDButton, loginComponentManager } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

调用LoginWithHuaweiIDButton组件,展示华为账号登录按钮,用户点击华为账号登录按钮后,应用获取到UnionID、Authorization Code、OpenID、ID Token,将数据传给应用服务器,可参考客户端与服务端交互开发的开发步骤a和b,完成服务端开发。

@Entry
  @Component
  struct PreviewLoginButtonPage {
    // 构造LoginWithHuaweiIDButton组件的控制器
    controller: loginComponentManager.LoginWithHuaweiIDButtonController =
    new loginComponentManager.LoginWithHuaweiIDButtonController()
    .onClickLoginWithHuaweiIDButton((error: BusinessError, response: loginComponentManager.HuaweiIDCredential) => {
      if (error) {
        hilog.error(0x0000, 'testTag',
                    `Failed to onClickLoginWithHuaweiIDButton. Code: ${error.code}, message: ${error.message}`);
        return;
      }

      if (response) {
        hilog.info(0x0000, 'testTag', 'Succeeded in getting response.');
        const authCode = response.authorizationCode;
        const openID = response.openID;
        const unionID = response.unionID;
        const idToken = response.idToken;
        // 开发者处理authCode、openID、unionID、idToken
      }
    });

    build() {
      Column() {
        Column() {
          Column() {
            LoginWithHuaweiIDButton({
              params: {
                // LoginWithHuaweiIDButton支持的样式
                style: loginComponentManager.Style.BUTTON_RED,
                // 账号登录按钮在登录过程中展示加载态
                extraStyle: {
                  buttonStyle: new loginComponentManager.ButtonStyle().loadingStyle({
                    show: true
                  })
                },
                // LoginWithHuaweiIDButton的边框圆角半径
                borderRadius: 24,
                // LoginWithHuaweiIDButton支持的登录类型
                loginType: loginComponentManager.LoginType.ID,
                // LoginWithHuaweiIDButton支持按钮的样式跟随系统深浅色模式切换
                supportDarkMode: true,
                // verifyPhoneNumber:如果华为账号用户在过去90天内未进行短信验证,是否拉起Account Kit提供的短信验证码页面
                verifyPhoneNumber: true
              },
              controller: this.controller
            })
          }
          .height(40)
        }.width('100%')
      }
      .justifyContent(FlexAlign.Center)
        .constraintSize({ minHeight: '100%' })
        .margin({
          left: 16,
          right: 16
        })
    }
  }


http://www.kler.cn/a/570096.html

相关文章:

  • MATLAB CVX 能处理的目标函数数量级极限是多少?
  • 【后端】Flask vs Django vs Node.js 对比分析
  • 数据结构——哈希表的实现
  • unity接入阿里云语音转文字,文字转语音功能
  • 知识库适配DeepSeek,企业微信支持自动登录,授权支持过期时间设置,zyplayer-doc 2.4.9 发布啦!
  • 一个开源且免费的 .NET CMS 和应用程序框架
  • 洛谷————P1634 禽兽的传染病
  • 实验室预约小程序
  • GreptimeDB v0.12 发布,开源 Rust 时序数据库
  • Thinkphp6 应用RdKafka插件封装工具类
  • unity pico开发二:连接头盔,配置手柄按键事件
  • vscode通过ssh远程连接(linux系统)不能跳转问题
  • R语言的基础命令及实例操作
  • C/C++ | 每日一练 (5)
  • Leetcode 662: 二叉树最大宽度
  • 【江科协-STM32】6. TIM编码器接口
  • Oracle数据库安全防护体系构建与核心技术解析
  • Artec Leo+Ray II 三维扫描仪成功为VR展数字化30吨重设备-沪敖3D
  • 网络安全架构三明治
  • 水仙花数(华为OD)