HarmonyOS鸿蒙Next中根据官方文档步骤,使用AGC认证服务接口Auth,实现华为账号登录会报错

HarmonyOS鸿蒙Next中根据官方文档步骤,使用AGC认证服务接口Auth,实现华为账号登录会报错 问题描述:按照官方文档上的步骤:https://developer.huawei.com/consumer/cn/doc/app/agc-help-auth-login-hwaccount-0000002236337010 按以下代码实现华为登录会报错: Code: undefined, Message: Cannot read property currentUserInstance of undefined

cke_3953.png

原因分析:经过一系列原因排查,查阅Auth相关API发现,报错的原因是因为未对Auth SDK进行初始化。cke_14234.png

解决方案:在调用auth.signIn()接口前,先对Auth SDK进行初始化,示例代码如下:

async signIn(context: common.UIAbilityContext): Promise<void> {
    try {
      hilog.info(DOMAIN, TAG, 'Starting Huawei sign in...');
      let file: Uint8Array = context.resourceManager.getRawFileContentSync('agconnect-services.json');
      let str: string = buffer.from(file).toString();
      auth.init(context, str);
      hilog.info(DOMAIN, TAG, 'auth init success');

      hilog.info(DOMAIN, TAG, 'signIn begin');
      const signInResult = await auth.signIn({
        autoCreateUser: true,
        credentialInfo: {
          kind: 'hwid'
        }
      });
      hilog.info(DOMAIN, TAG, 'signIn end');
      const user = signInResult.getUser();
      hilog.info(DOMAIN, TAG, `Huawei sign in success. UID: ${user.getUid()}`);
    } catch (error) {
      const err = error as BusinessError;
      if (error instanceof AGCAuthError) {
        // 根据错误码进行处理
        hilog.error(DOMAIN, TAG, `AGCAuthError Huawei sign in failed. Code: ${err.code}, Message: ${err.message}`);
      }
      hilog.error(DOMAIN, TAG, `Huawei sign in failed. Code: ${err.code}, Message: ${err.message}`);
    }
  }

文档优化建议:

建议官方在如下几个登录场景的开发步骤中,加上初始化Auth SDK的步骤,完善开发文档。

cke_153507.png


更多关于HarmonyOS鸿蒙Next中根据官方文档步骤,使用AGC认证服务接口Auth,实现华为账号登录会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好,认证服务所有登录方式的章节中都在头部说明了前提条件-需要先集成SDK:

前提条件

跳转到集成SDK的文档后,按照步骤集成是需要完成初始化的,当前文档集成开发步骤是比较清晰的。需要请开发者在首次集成使用时仔细参照文档步骤,避免跳过步骤产生的错误。

更多关于HarmonyOS鸿蒙Next中根据官方文档步骤,使用AGC认证服务接口Auth,实现华为账号登录会报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next中AGC认证服务接口Auth报错,通常与配置或依赖有关。请检查AppGallery Connect中项目配置是否完整,确保已正确开启华为账号服务并下载最新的agconnect-services.json配置文件。确认工程中oh-package.json已引入正确版本的@hw-agconnect/auth-ohos依赖。检查应用签名证书指纹是否已在AGC中注册,且与本地调试签名一致。权限声明需在module.json5中明确定义。

这是一个典型的SDK初始化缺失问题。根据你提供的错误信息和解决方案,核心问题确实是在调用auth.signIn()之前没有执行auth.init()

你的分析是正确的:Auth SDK在使用前必须进行初始化,否则currentUserInstance等内部对象无法被正确访问。你提供的修复代码是标准的解决方案,通过读取agconnect-services.json配置文件并调用auth.init(context, config)来完成初始化。

关于文档优化建议,这很有价值。官方文档有时会假设开发者已经完成了基础的SDK配置步骤,但在实际开发中,明确的初始化指引确实能避免很多类似问题。建议你在华为开发者社区提交这个文档反馈,帮助完善官方文档。

你的排查思路很清晰,从错误信息定位到API文档,最终找到根本原因并给出解决方案,这种问题解决过程对其他开发者也很有参考意义。

回到顶部