华为账号一键登录开发笔记

应用内实现华为账号登录开发步骤 保姆级教程!全网最细,一步一步教你实现借助华为账号实现第三方登录,Account Kit(华为帐号服务)提供简单、快速、安全的登录和授权功能,,为您创建帐号并登录所有HarmonyOS应用,通过授权获得用户头像昵称、手机号码等信息。 阅读详情

一、准备工作   

        1、首先申请手机号相关权限

相关权限展示:

2、确定申请完成权限申请完成后,添加证书指纹,获取Client ID

3、代码中配置,打开DevEco Studio.

main目录下->module.json5文件,module下配置,如下:

二、代码开发

        1、相关协议

 privacyText: loginComponentManager.PrivacyText[] = [{
    text: '我已认真阅读并同意',
    type: loginComponentManager.TextType.PLAIN_TEXT
  }, {
    text: '《用户使用协议》',
    tag: Index.USER_SERVICE_TAG,
    type: loginComponentManager.TextType.RICH_TEXT
  }, {
    text: '和',
    type: loginComponentManager.TextType.PLAIN_TEXT
  }, {
    text: '《隐私协议》',
    tag: Index.PRIVACY_TAG,
    type: loginComponentManager.TextType.RICH_TEXT
  }, {
    text: '和',
    type: loginComponentManager.TextType.PLAIN_TEXT
  }, {
    text: '《华为账号用户认证协议》',
    tag: Index.USER_AUTHENTICATION_TAG,
    type: loginComponentManager.TextType.RICH_TEXT
  }, {
    text: '。',
    type: loginComponentManager.TextType.PLAIN_TEXT
  }];

 2、同意协议获取手机号

注:如果华为账号没有登录情况下,需优先执行登录,才能获取到匿名手机号

 async getQuickLoginAnonymousPhone() {
    return new Promise<void>((resolve, reject) => {
      // 创建登录请求,并设置参数
      let loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();
      loginRequest.forceLogin = true;
      loginRequest.idTokenSignAlgorithm = authentication.IdTokenSignAlgorithm.PS256;
      loginRequest.state = util.generateRandomUUID();
      // 执行登录请求,并处理结果
      try {
        let controller = new authentication.AuthenticationController(getContext(this));
        controller.executeRequest(loginRequest, async (error: BusinessError<Object>, data) => {
          if (error) {
            console.log(JSON.stringify(error));
            reject(error)
            return;
          }
          let loginWithHuaweiIDResponse = data as authentication.LoginWithHuaweiIDResponse;
          let state = loginWithHuaweiIDResponse.state;
          if (state != undefined && loginRequest.state != state) {
            hilog.error(0x0000, 'testTag', `Failed to login. The state is different, response state: ${state}`);
            reject(new Error("state is different"))
            return;
          }
          hilog.info(0x0000, 'testTag', 'Succeeded in login. %{public}s', JSON.stringify(loginWithHuaweiIDResponse));
          let loginWithHuaweiIDCredential = loginWithHuaweiIDResponse.data!;
          let code = loginWithHuaweiIDCredential.authorizationCode;
          let idToken = loginWithHuaweiIDCredential.idToken;
          let openID = loginWithHuaweiIDCredential.openID;
          let unionID = loginWithHuaweiIDCredential.unionID;
          //处理code, idToken, openID, unionID

          //创建登录授权,获取匿名手机号
          const authRequest = new authentication.HuaweiIDProvider().createAuthorizationWithHuaweiIDRequest();
          authRequest.scopes = ['quickLoginAnonymousPhone'];
          authRequest.state = util.generateRandomUUID();
          authRequest.forceAuthorization = false;
          const controller = new authentication.AuthenticationController();
          try {
            console.log("controller之前", this.phoneNumber)
            const response: authentication.AuthorizationWithHuaweiIDResponse =
              await controller.executeRequest(authRequest)
            console.log("response", JSON.stringify(response))
            const unionID: string = response.data?.unionID as string;
            const openID: string = response.data?.openID!;
            const anonymousPhone = response.data?.extraInfo?.quickLoginAnonymousPhone as string;
            if (anonymousPhone) {
              console.log("controller之后的phoneNumber", this.phoneNumber);
              resolve();
            } else {
              reject(new Error('Failed to get anonymous phone number'));
            }
          } catch (e) {
            reject(e);
          }


        });
      } catch (error) {
        reject(error)
        console.log(JSON.stringify(error));
      }
    })
  }

三、执行登录

        1、使用华为控件 LoginWithHuaweiIDButton 进行登录
 

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

2、构造LoginWithHuaweiIDButton组件的控制器
 

 controller: loginComponentManager.LoginWithHuaweiIDButtonController =
    new loginComponentManager.LoginWithHuaweiIDButtonController()
      .setAgreementStatus(loginComponentManager.AgreementStatus.NOT_ACCEPTED)
      .onClickLoginWithHuaweiIDButton((error: BusinessError | undefined,
        response: loginComponentManager.HuaweiIDCredential) => {
        this.handleLoginWithHuaweiIDButton(error, response)
      })
      .onClickEvent((error: BusinessError, clickEvent: loginComponentManager.ClickEvent) => {
        if (error) {
          console.log(error.message);
          return;
        }
      });

  handleLoginWithHuaweiIDButton(error: BusinessError | undefined,
    response: loginComponentManager.HuaweiIDCredential) {
    if (error) {
      // hilog.error(this.domainId, this.logTag,
      //   `Failed to click LoginWithHuaweiIDButton. errCode is ${error.code}, errMessage is ${error.message}`);
      if (error.code === ErrorCode.ERROR_CODE_NETWORK_ERROR) {
        AlertDialog.show(
          {
            message: "网络未连接,请检查网络设置。",
            offset: { dx: 0, dy: -12 },
            alignment: DialogAlignment.Bottom,
            autoCancel: false,
            confirm: {
              value: "知道了",
              action: () => {
              }
            }
          }
        );
      } else if (error.code === ErrorCode.ERROR_CODE_AGREEMENT_STATUS_NOT_ACCEPTED) {
        // 未同意协议,弹出协议弹框,推荐使用该回调方式
        this.agreementDialog.open();
      } else if (error.code === ErrorCode.ERROR_CODE_LOGIN_OUT) {
        // 华为账号未登录提示
        showToast("华为账号未登录,请重试");
      } else if (error.code === ErrorCode.ERROR_CODE_NOT_SUPPORTED) {
        // 不支持该scopes或permissions提示
        showToast("该scopes或permissions不支持");
      } else {
        // 其他提示系统或服务异常
        showToast('服务或网络异常,请稍后重试');
        // TODO: 其他错误码处理,请参考API中的错误码查看详细错误原因
      }
      return;
    }
    try {
      if (this.isSelected) {
        if (response) {
          // hilog.info(this.domainId, this.logTag, 'Succeeded in clicking LoginWithHuaweiIDButton.');
          // 开发者根据实际业务情况使用以下信息
          const authCode = response.authorizationCode;
          const openID = response.openID;
          const unionID = response.unionID;
          const idToken = response.idToken;
          //对接服务接口,进行登录认证

          
        }
      } else {
        //没有同意协议,打开弹框点击确定
      }
    } catch (err) {
      // hilog.error(this.domainId, this.logTag,
      //   `Failed to LoginWithHuaweiIDButton, errCode: ${err.code}, errMessage: ${err.message}`);
      AlertDialog.show(
        {
          message: '服务或网络异常,请稍后重试',
          offset: { dx: 0, dy: -12 },
          alignment: DialogAlignment.Bottom,
          autoCancel: false,
          confirm: {
            value: '知道了',
            action: () => {
            }
          }
        }
      );
    }
  }

完结

以上是华为账号一键登录执行流程,如有疑问欢迎提问
另附官网地址https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/account-api-huawei-id-button-V13

HarmonyOs 华为账号一键登录集成指南:从手机号到 UnionID 的无缝认证 华为账号一键登录基于OAuth2.0协议,提供无需输入账号密码的快捷登录体验,支持获取验证手机号和用户唯一标识。本文详细解析其实现机制、开发流程及最佳实践,包括:1)核心优势为极简登录、可信身份和多端一致;2)适用场景及地域限制;3)完整登录流程说明;4)ArkTS客户端和Java服务端开发示例;5)常见错误处理与优化建议。通过该方案可显著提升用户转化率,同时需严格遵循华为接口规范和安全要求。 阅读详情

相关推荐

纯血鸿蒙 创新能力-华为账号一键登录

华为账号一键登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统,应用可以通过华为账号一键登录能力方便地获取华为账号用户的身份标识和手机号,快速建立应用内的用户体系。在我们 日常使用app过程中,越来越多的用户 不喜欢 注册账号 在输入密码的 整个 耗时间的操作。更加喜欢手机号一键登录的操作,方便又快捷。对于开发者来说 也能留住用户粘性,增加用户好感,固 对于我们纯血鸿蒙app来说,华为的一键登录 必须要安排上。

qq_34970020的博客 2441

【通过优快云注册华为云与在华为云官网注册账号的异同】

通过优快云注册华为云与在华为云官网注册账号的异同

Magize的博客 1438

开发者工具箱-华为账号登录功能实现

本文介绍了华为账号登录功能的实现过程。首先解释了华为账号登录的基本概念,包括UnionID、OpenID等关键术语。然后详细说明了开发背景和实现步骤,包括基础配置、登录核心功能以及用户信息管理模块。文章特别强调了实践中遇到的六大坑点,如登录状态持久化、异常处理等问题。最后提供了集成示例代码,展示如何初始化华为账号登录按钮。该实现主要为华为手机用户提供一键登录功能,简化传统的注册登录流程。

qq_36597625的博客 1083

鸿蒙NEXT实践(一):华为账号一键登录实现

今天开始我们就正式开始鸿蒙next的代码开发啦,掌门人会带着大家一步步体验各种功能的实现,并且会在最后带着大家实现一个完整的项目,当然了,肯定不会是烂大街的那种商城啊、TOList啥的,大家可以放心。 在鸿蒙开发中,实现华为账号一键登录可以为用户提供更加便捷的登录方式。掌门人将会通过本文详细介绍如何在鸿蒙应用中实现华为账...

cnzzs的博客 1296

【鸿蒙开发示例代码】华为账号服务

本示例展示了使用Account Kit提供的登录、授权头像昵称、实时验证手机号、收货地址、发票抬头、未成年人模式的能力。本示例模拟了在应用里,调用一键登录Button组件拉起符合华为规范的登录页面;调用获取头像昵称接口获取头像昵称,调用实时验证手机号接口拉起实时验证页面,调用收货地址接口获取收货地址,调用发票抬头接口获取发票抬头,调用未成年人模式接口开启或关闭未成年人模式。需要使用Account Kit接口。

weixin_44349071的博客 1541

从零到一:桌面宠物的硬件架构设计与工程实践

本文详细介绍了基于STM32F103C8T6主控平台的桌面宠物机器人硬件架构设计与工程实践。内容涵盖电源管理、舵机控制、PCB布局及系统调试等核心环节,为硬件爱好者提供从零到一的完整开发指南,助力打造稳定可靠的智能桌面伴侣。

alice7model的博客 1112

HarmonyOS Next系列之华为账号一键登录功能实现(十四)

华为账号一键登录是指使用华为账号进行快捷登录的功能。通过一键登录,用户可以通过华为账号直接登录到指定的应用,无需输入繁琐的账号和密码。一键登录可以提供更便捷、快速、安全的登录方式,减少用户的登录烦恼和输入错误。本文将以代码示例讲解鸿蒙next华为账号一键登录客户端实现过程和页面设计规范。

前端(全栈)、AI Agent开发技术分享 4408

台达伺服B3驱动器参数的设定和CN1的接法

3. B2的电子齿轮比是直接设定P1-44(分子)和P1-45(分母)就就可以的,但是B3的有个隐藏的细节,就是P1-44的默认值77216不用去更改,这是官方客服说的,需要改的是P1-45这个参数,比如说,我使用的丝杆螺距是5mm的,那么就是以5000脉冲走完5mm为一圈,则就把P1-45设定为5000即可;我的是三菱FX3S系列的PLC,是NPN型的,输出点是24V-作为信号的,所以接41、37,具体可参考B3的。,跟着客服的讲解操作才解决的,以下就是解决方法,希望能够帮到需要的各位。

qq_38681017的博客 1万+

贫6、Flink四大基石之Window详解与详细示例(二)f

在commons/lib_common/src/main/ets/httprequest/HttpRequest.ets文件中将云侧开发者自定义的数据结构转换为端侧数据结构。将commons/lib_common/src/main/ets/httprequest/HttpRequestApi.ets文件中的mock接口替换为真实的服务器接口。| └- utils/src/main/ets // 公共组件模块(hsp)

xOGf4FdGm的博客 389

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4409

【RL in VLA】VLA中的强化学习

本文提出了一种名为 Reinforcement Learning Distilled Generalist(RLDG) 的方法,通过强化学习生成高质量训练数据来微调机器人基础模型。通过在多个精确操作任务上的实验,我们证明了 RLDG 在成功率和泛化能力上显著优于使用人类演示的传统微调方法。RLDG 不仅减少了对人类演示数据的依赖,还展示了在复杂多阶段任务中的灵活性和有效性。

三木今天学习了嘛の博客 2257

华为账号一键登录:告别密码,让登录像呼吸一样自然

本文介绍了华为账号一键登录的实现方案,重点分析了三种登录方式的特性与适用场景。作为鸿蒙生态的核心登录方案,华为账号服务(Huawei ID Kit)能够显著提升用户体验和转化率。文章详细比较了一键登录、华为账号登录和静默登录的技术原理、交互方式和适用条件,并提供了最佳实践组合策略。特别强调了企业开发者专享的一键登录功能,通过极简交互实现"秒级登录"体验。最后给出了具体实现代码示例,帮助开发者在鸿蒙应用中快速集成这一能力,同时保障用户隐私与数据安全。

三声三视的博客 2412

【医学图像分割网络】之Res U-Net网络PyTorch复现

【医学图像分割网络】之Res U-Net网络PyTorch复现 1.内容 U-Net网络算是医学图像分割领域的开山之作,我接触深度学习到现在大概将近大半年时间,看到了很多基于U-Net网络的变体,后续也会继续和大家一起分享学习。这次分享ResNet+U-Net的一个改进版,ResNet本身就是一个十分优秀的backbone,目前应用仍然十分广泛,我们融合进ResNet后,我们就可以使得U-Net进行迁移学习了。 1.将Resnet作为encoder替换U-Net原始结构 2.U-Net提出时间较早,当时还没

qq_39071739的博客 1万+

华为HarmonyOS 让应用快速拥有账号能力 -- 1 华为账号一键登录

华为HarmonyOS 让应用快速拥有账号能力

pisceshsu的博客 2640

F280049C_HRPWM_死区时间高精度控制与MEP技术实战解析

本文深入解析了F280049C的HRPWM模块及其基于MEP技术的死区时间高精度控制。通过实测数据与TI官方代码对比,详细阐述了DBREDHR和DBFEDHR寄存器的配置技巧、精度优化方法及常见问题调试,为电源管理和电机控制应用提供了实用的实战指南。

yolo5detector的博客 217

30、电力生产系统中的效率测量

本文探讨了如何使用数据包络分析(DEA)模型来评估电力生产系统的效率。文章详细介绍了电力生产系统的三个主要环节——发电、输电和配电,并通过多种DEA模型,如输入导向模型、输出导向模型以及基于松弛的SBM模型,展示了效率测量的方法和技术。同时,结合实际案例分析,说明了DEA模型在识别效率低下环节及提出改进建议方面的应用价值。

rgv2345678的博客 116

鸿蒙:华为账号一键登录实现

华为账号一键登录开发指南 本文介绍了鸿蒙系统中华为账号一键登录的实现方法。该功能基于OAuth2.0和OpenID Connect协议,可快速获取用户身份标识和手机号,提升用户体验。开发前提包括:1)必须使用真机调试;2)在AGC平台获取ClientID并配置到module.json5文件中;3)申请必要的scope权限。具体实现步骤分为:获取匿名手机号、使用华为登录按钮组件、完成授权获取凭证、最后调用后端接口校验用户数据。该方案简化了登录流程,提高了用户转化率,同时支持多设备一致的登录体验。

weixin_71403100的博客 1634

书旗app字符串加密分析

本文案例是对书旗app搜索接口的请求密文进行分析和逆向。

李玺 3156

模拟登录页,华为账号一键登录

二次验证: 可选启用二次验证,如在高风险环境下(新设备登录等),要求用户通过邮件或短信进行确认。Logo和标题: 页面顶部展示华为的Logo及"一键登录"或"华为账号登录"的标题。操作反馈: 无论是按钮点击还是输入错误,都需要及时反馈用户操作状态。常见问题解答链接: 用户如果在登录时遇到问题,可以快速找到帮助。老用户: 希望快速登录,不用每次输入用户名和密码。新用户: 需要快速注册并登录,以体验华为的服务。第一步:点击“一键登录”,获取登录信息。第三步:获取授权,获取用户信息。第二步:拉起授权弹窗。

weixin_69135651的博客 2618

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为账号一键登录

发起POST请求,成功获取access_token后应该在过期时间内缓存起来,避免重复请求消耗接口请求次数,增加失败情况后的重试机制。将完成BASE64编码后的Header字符串与Payload字符串,通过“.”进行连接,通过服务密钥文件中的。服务端实现华为账号一键登录,需通过前端上传的授权码,在服务器获取华为用户信息实现登录业务逻辑。,成功获取到用户信息后,使用授权用户的手机号或unionid进行应用登录。2.生成JWT Header信息,kid为账号密钥文件中的。发起请求,参数为上一步获取的。

flfljh的专栏 1367

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

华为一键登录

除了常规的账号密码登录之外,我们还可以借助华为账号实现第三方登录,Account Kit(华为帐号服务)提供简单、快速、安全的登录和授权功能,让用户无需输入帐号、密码和繁琐验证,避免因忘记密码而带来的麻烦,为您创建帐号并登录所有HarmonyOS应用,带来更高的注册转化,同时通过授权获得用户头像昵称、手机号码等信息,提升用户黏性。

hhhhhh5666的博客 2450

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

一键登录,打造华为账号便捷新体验

的能力,应用可以通过该能力方便地获取华为账号用户已授权的身份标识和手机号,快速建立应用内的用户体系。对于使用华为账号的应用而言,我们提供了异常事件订阅功能。同时,华为账号提供多种身份验证方式,如人脸识别、指纹识别、手机号码登录、验证码等,开发者可在用户进行敏感操作时进一步验证身份,保护用户的信息和资产。方式,即不需要用户点击登录/注册按钮,即可获取用户的身份标识UnionID,完成用户的静默登录,实现无感知登录体验。此外,基于华为账号的标识,我们还为应用提供了按需申请用户信息授权的功能,包括用户的。

HarmonyOS SDK闭源开放能力技术团队 2481

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

3.将获取到的匿名手机号设置给下面PreviewLoginButtonPage示例代码中的quickLoginAnonymousPhone变量,调用LoginWithHuaweiIDButton组件,实现应用自己的登录页面,并展示华为账号一键登录按钮和华为账号用户认证协议(Account Kit提供跳转链接,应用需实现协议跳转,参见约束与限制第2点),用户同意协议并点击一键登录按钮后,可获取到Authorization Code,将该值传给应用服务器用于获取用户信息(完整手机号、UnionID)。

HarmonyOS SDK闭源开放能力技术团队 2277

HarmonyOS应用开发实战:华为账号一键登录的5个常见坑点及解决方案

本文针对HarmonyOS应用开发中集成华为账号一键登录功能,总结了开发者最常遇到的五个典型问题,包括预取号失败、协议展示细节、儿童账号处理、深色模式适配以及服务端凭证兑换与UnionID处理,并提供了具体的解决方案和代码示例,帮助开发者有效避坑,确保登录流程稳定可靠。

t1u2v的博客 961

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

鸿蒙关于华为账号登录服务的集成和介绍

东林知识库 2009
上一篇: Harmony OS NEXT初学笔记
下一篇: Retrieval-Augmented Generation(RAG)简介
我喜欢仙女儿
博客等级 码龄10年 7粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值