鸿蒙Next如何一键登录直接获取openid

在鸿蒙Next中,如何实现一键登录并直接获取用户的openid?具体需要调用哪些接口或配置哪些参数?有没有完整的代码示例或步骤说明?

2 回复

鸿蒙Next一键登录?简单!调用AccountKitgetAuthResult方法,授权后直接从AuthResult里掏openid就行。注意先检查是否支持一键登录,不然用户只能手动输入——那可就一点都不“一键”了!代码别写错,不然只能和bug过情人节了~

更多关于鸿蒙Next如何一键登录直接获取openid的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,可以通过集成华为帐号服务实现一键登录并获取OpenID。以下是主要步骤和示例代码:

1. 配置开发环境

  • 在AppGallery Connect中创建项目和应用,并启用华为帐号服务。
  • 下载agconnect-services.json文件并添加到项目entry目录下。

2. 添加依赖

entry/build.gradle中:

dependencies {
  implementation 'com.huawei.hms:hwid:6.12.0.300'
}

3. 申请权限

module.json5中:

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

4. 实现一键登录

import { AccountAuthManager, AccountAuthParams, AccountAuthScope, AuthCallback } from '@hwos/account';
import { BusinessError } from '@ohos.base';

// 创建授权参数
let authParams: AccountAuthParams = {
  scopeList: [AccountAuthScope.OPENID], // 仅请求OpenID
  authType: AccountAuthType.ID_TOKEN
};

// 执行静默授权(一键登录)
async function silentSignIn() {
  try {
    const result = await AccountAuthManager.silentSignIn(authParams);
    // 从ID Token中解析OpenID
    const openid = parseOpenIdFromIdToken(result.idToken);
    console.log('OpenID: ' + openid);
  } catch (error) {
    // 静默授权失败时跳转普通授权
    startAuthorization();
  }
}

// 解析OpenID工具函数
function parseOpenIdFromIdToken(idToken: string): string {
  // ID Token为JWT格式,第二部分包含用户信息
  const payload = idToken.split('.')[1];
  const decoded = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));
  return JSON.parse(decoded).openid;
}

// 普通授权流程
function startAuthorization() {
  AccountAuthManager.authorize(authParams, (err: BusinessError, data) => {
    if (!err) {
      const openid = parseOpenIdFromIdToken(data.idToken);
      console.log('OpenID: ' + openid);
    }
  });
}

关键说明:

  1. 静默授权:优先使用silentSignIn实现无感知登录
  2. OpenID获取:从返回的ID Token中解析JWT负载获取
  3. 作用域配置:使用AccountAuthScope.OPENID确保返回OpenID

注意事项:

  • 需在真机测试(模拟器不支持华为服务)
  • 确保签名证书已在AGC配置
  • OpenID是同一华为帐号在同一应用下的唯一标识

通过以上代码即可快速实现鸿蒙Next应用的一键登录和OpenID获取功能。

回到顶部