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

发布于:2025-03-04 ⋅ 阅读:(8) ⋅ 点赞:(0)

 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙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
        })
    }
  }


网站公告

今日签到

点亮在社区的每一天
去签到