智能客服
你问我答,随时在线为你解决问题
在移动端(手机、平板)HarmonyOS的设备上,将华为帐号登录快速添加到您的应用中,从而实现在您的应用中,能够使用华为帐号登录,经过用户登录授权后,获取到用户的华为帐号基本信息,如:昵称、头像、Email、UnionID、OpenID等。
| 设备类型 | OS版本 | HMS Core(APK)版本 |
|---|---|---|
| 手机、平板 | HarmonyOS 2.0及以上 | 5.0.0.300及以上 |
| 车机 | HarmonyOS 2.0及以上 | 6.2.0.300及以上 |
| 华为智慧屏、智能手表(wearable,不支持运动手表liteWearable) | HarmonyOS 2.0及以上 | 6.5.0.300及以上 |
HarmonyOS(Java)必须在单HAP包场景下使用,暂不支持多HAP包场景。
请确认您已完成开发准备。
在使用华为帐号SDK之前,要求应用先通过调用AccountAuthManager.init(AbilityPackage abilityPackage)方法,完成华为帐号SDK的初始化。
建议在应用初始化的时候就完成华为帐号SDK的初始化,如下。
- // 示例:在应用初始化时就完成华为帐号SDK的初始化
- public class MyApplication extends AbilityPackage {
- @Override
- public void onInitialize() {
- super.onInitialize();
- // 调用示例initHuaweiAccountSDK方法,在HarmonyOS应用初始化方法onInitialize中进行华为帐号SDK初始化
- initHuaweiAccountSDK();
- }
- @Override
- public void onEnd() {
- super.onEnd();
- }
-
- // 示例:此方法中调用华为帐号SDK的初始化方法AccountAuthManager.init()进行初始化
- private void initHuaweiAccountSDK() {
- Task<Void> task;
- try {
- // 调用AccountAuthManager.init方法初始化
- task = AccountAuthManager.init(this);
- } catch (ApiException apiException) {
- apiException.getStatusCode();
- return;
- }
- task.addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void v) {
- //初始化成功
- }
- });
-
- task.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
- // SDK初始化失败
- if (e instanceof ApiException) {
- ApiException apiException = (ApiException) e;
- // SDK初始化失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- apiException.getStatusCode();
- }
- }
- });
- }
- }
如您需要使用华为帐号登录图标,请参见华为帐号登录图标使用规范。
- Button mBtnHuaweiIdSignIn = (Button) findComponentById(ResourceTable.Id_btn_hwid_sign_in);
- mBtnHuaweiIdSignIn.setClickedListener((Component c) -> {
- huaweiIdSignIn();
- });
- private void huaweiIdSignIn() {
- AccountAuthService accountAuthService;
- // 1、配置登录请求参数AccountAuthParams,包括请求用户id(openid、unionid)、email、profile(昵称、头像)等。
- // 2、DEFAULT_AUTH_REQUEST_PARAM默认包含了id和profile(昵称、头像)的请求。
- // 3、如需要再获取用户邮箱,需要setEmail()。
- AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
- .setEmail()
- .createParams();
- try {
- accountAuthService = AccountAuthManager.getService(accountAuthParams);
- } catch (ApiException e) {
- // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- e.getStatusCode();
- return;
- }
- // 调用静默登录接口。
- // 如果华为系统帐号已经登录,并且已经授权,会登录成功;
- // 否则静默登录失败,需要在失败监听中,显式调用前台登录授权接口,完成登录授权。
- Task<AuthAccount> task = accountAuthService.silentSignIn();
- // 添加静默登录成功处理监听
- task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
- @Override
- public void onSuccess(AuthAccount authAccount) {
- // 静默登录成功后,根据结果中获取到的帐号基本信息更新UI
- }
- });
- // 添加静默登录失败监听
- task.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
- if (e instanceof ApiException) {
- // 静默登录失败,显式调用前台登录授权接口,完成登录授权。
- Task task = accountAuthService.signIn();
- if (task == null) {
- return;
- }
- task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
- @Override
- public void onSuccess(AuthAccount result) {
- // 登录成功获取华为帐号信息AuthAccount对象
- }
- });
- task.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
- if (e instanceof ApiException) {
- ApiException apiException = (ApiException) e;
- // 登录失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- apiException.getStatusCode();
- }
- }
- });
- }
- }
- });
- }
帐号退出是指应用向用户提供可以退出当前华为帐号的入口,应用通过signOut接口通知HMS Core SDK清除本地当前已经登录的华为帐号信息。
- Button mBtnHuaweiIdSignOut = (Button) findComponentById(ResourceTable.Id_btn_signout);
- mBtnHuaweiIdSignOut .setClickedListener((Component c) -> {
- signOut();
- });
- private void signOut() {
- AccountAuthService accountAuthService = null;
- AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setEmail().createParams();
- try {
- accountAuthService = AccountAuthManager.getService(accountAuthParams);
- } catch (ApiException e) {
- // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- e.getStatusCode();
- return;
- }
- Task<Void> task = accountAuthService.signOut();
- task.addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void v) {
- // 华为帐号登出成功,接入应用处理登出后逻辑
- }
- });
-
- task.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
-
- // 华为帐号退出失败
- if (e instanceof ApiException) {
- ApiException apiException = (ApiException) e;
- // 华为帐号退出失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- apiException.getStatusCode();
- }
- }
- });
- }
为了提升应用隐私安全,应用可以提供入口,供用户取消对应用的授权。
取消授权接口通过调用AccountAuthService类对象的cancelAuthorization方法,实现取消授权。
-
- mBtnCancelAuthorization = (Button) findComponentById(ResourceTable.Id_btn_cancelauthorization);
- mBtnCancelAuthorization.setClickedListener((Component c) -> {
- cancelAuthorization();
- });
-
- private void cancelAuthorization() {
- AccountAuthService accountAuthService;
- AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setEmail().createParams();
- try {
- accountAuthService = AccountAuthManager.getService(accountAuthParams);
- } catch (ApiException e) {
- // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- e.getStatusCode();
- return;
- }
- // 调用取消授权接口
- Task<Void> task = accountAuthService.cancelAuthorization();
- task.addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void v) {
- // 取消授权成功
- }
- });
-
- task.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
- // 取消授权失败
- if (e instanceof ApiException) {
- ApiException apiException = (ApiException) e;
- // 华为帐号取消授权失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
- apiException.getStatusCode();
- }
- }
- });
- }