文档管理中心
指南华为帐号服务HarmonyOS(Java)场景化开发移动应用快速接入华为帐号

移动应用快速接入华为帐号

场景介绍

在移动端(手机、平板)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包场景。

开发前提

请确认您已完成开发准备

帐号登录授权

  1. 初始化华为帐号SDK。

    在使用华为帐号SDK之前,要求应用先通过调用AccountAuthManager.init(AbilityPackage abilityPackage)方法,完成华为帐号SDK的初始化。

    建议在应用初始化的时候就完成华为帐号SDK的初始化,如下。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. // 示例:在应用初始化时就完成华为帐号SDK的初始化
    2. public class MyApplication extends AbilityPackage {
    3. @Override
    4. public void onInitialize() {
    5. super.onInitialize();
    6. // 调用示例initHuaweiAccountSDK方法,在HarmonyOS应用初始化方法onInitialize中进行华为帐号SDK初始化
    7. initHuaweiAccountSDK();
    8. }
    9. @Override
    10. public void onEnd() {
    11. super.onEnd();
    12. }
    13. // 示例:此方法中调用华为帐号SDK的初始化方法AccountAuthManager.init()进行初始化
    14. private void initHuaweiAccountSDK() {
    15. Task<Void> task;
    16. try {
    17. // 调用AccountAuthManager.init方法初始化
    18. task = AccountAuthManager.init(this);
    19. } catch (ApiException apiException) {
    20. apiException.getStatusCode();
    21. return;
    22. }
    23. task.addOnSuccessListener(new OnSuccessListener<Void>() {
    24. @Override
    25. public void onSuccess(Void v) {
    26. //初始化成功
    27. }
    28. });
    29. task.addOnFailureListener(new OnFailureListener() {
    30. @Override
    31. public void onFailure(Exception e) {
    32. // SDK初始化失败
    33. if (e instanceof ApiException) {
    34. ApiException apiException = (ApiException) e;
    35. // SDK初始化失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
    36. apiException.getStatusCode();
    37. }
    38. }
    39. });
    40. }
    41. }

  2. 添加登录按钮btn_hwid_sign_in。

    您根据需要在应用布局文件中添加华为帐号登录按钮。
    说明

    如您需要使用华为帐号登录图标,请参见华为帐号登录图标使用规范

  3. 将huaweiIdSignIn绑定到登录按钮ResourceTable.Id_btn_hwid_sign_in的onClick响应事件中,实现华为帐号登录功能。当用户点击登录按钮时,会启动登录视图。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. Button mBtnHuaweiIdSignIn = (Button) findComponentById(ResourceTable.Id_btn_hwid_sign_in);
    2. mBtnHuaweiIdSignIn.setClickedListener((Component c) -> {
    3. huaweiIdSignIn();
    4. });

  4. 在huaweiIdSignIn方法中,构造了请求参数AccountAuthParams和华为帐号登录授权服务AccountAuthService,通过调用静默登录接口silentSignIn进行静默登录。

    • 如果静默登录成功,直接获取华为帐号信息AuthAccount对象。
    • 如果静默登录失败,再调用signIn前台登录授权接口,显式拉起登录授权视图进行登录。如果前台登录授权接口成功,在成功监听中获取华为帐号对象AuthAccount
      Java
      收起
      自动换行
      深色代码主题
      复制
      1. private void huaweiIdSignIn() {
      2. AccountAuthService accountAuthService;
      3. // 1、配置登录请求参数AccountAuthParams,包括请求用户id(openid、unionid)、email、profile(昵称、头像)等。
      4. // 2、DEFAULT_AUTH_REQUEST_PARAM默认包含了id和profile(昵称、头像)的请求。
      5. // 3、如需要再获取用户邮箱,需要setEmail()。
      6. AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
      7. .setEmail()
      8. .createParams();
      9. try {
      10. accountAuthService = AccountAuthManager.getService(accountAuthParams);
      11. } catch (ApiException e) {
      12. // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
      13. e.getStatusCode();
      14. return;
      15. }
      16. // 调用静默登录接口。
      17. // 如果华为系统帐号已经登录,并且已经授权,会登录成功;
      18. // 否则静默登录失败,需要在失败监听中,显式调用前台登录授权接口,完成登录授权。
      19. Task<AuthAccount> task = accountAuthService.silentSignIn();
      20. // 添加静默登录成功处理监听
      21. task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
      22. @Override
      23. public void onSuccess(AuthAccount authAccount) {
      24. // 静默登录成功后,根据结果中获取到的帐号基本信息更新UI
      25. }
      26. });
      27. // 添加静默登录失败监听
      28. task.addOnFailureListener(new OnFailureListener() {
      29. @Override
      30. public void onFailure(Exception e) {
      31. if (e instanceof ApiException) {
      32. // 静默登录失败,显式调用前台登录授权接口,完成登录授权。
      33. Task task = accountAuthService.signIn();
      34. if (task == null) {
      35. return;
      36. }
      37. task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
      38. @Override
      39. public void onSuccess(AuthAccount result) {
      40. // 登录成功获取华为帐号信息AuthAccount对象
      41. }
      42. });
      43. task.addOnFailureListener(new OnFailureListener() {
      44. @Override
      45. public void onFailure(Exception e) {
      46. if (e instanceof ApiException) {
      47. ApiException apiException = (ApiException) e;
      48. // 登录失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
      49. apiException.getStatusCode();
      50. }
      51. }
      52. });
      53. }
      54. }
      55. });
      56. }

帐号退出

帐号退出是指应用向用户提供可以退出当前华为帐号的入口,应用通过signOut接口通知HMS Core SDK清除本地当前已经登录的华为帐号信息。

  1. 您可以将如下signOut绑定到登出按钮的onClick响应事件中,实现华为帐号退出功能。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. Button mBtnHuaweiIdSignOut = (Button) findComponentById(ResourceTable.Id_btn_signout);
    2. mBtnHuaweiIdSignOut .setClickedListener((Component c) -> {
    3. signOut();
    4. });

  2. 调用AccountAuthService类对象的signOut方法,实现华为帐号退出。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. private void signOut() {
    2. AccountAuthService accountAuthService = null;
    3. AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setEmail().createParams();
    4. try {
    5. accountAuthService = AccountAuthManager.getService(accountAuthParams);
    6. } catch (ApiException e) {
    7. // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
    8. e.getStatusCode();
    9. return;
    10. }
    11. Task<Void> task = accountAuthService.signOut();
    12. task.addOnSuccessListener(new OnSuccessListener<Void>() {
    13. @Override
    14. public void onSuccess(Void v) {
    15. // 华为帐号登出成功,接入应用处理登出后逻辑
    16. }
    17. });
    18. task.addOnFailureListener(new OnFailureListener() {
    19. @Override
    20. public void onFailure(Exception e) {
    21. // 华为帐号退出失败
    22. if (e instanceof ApiException) {
    23. ApiException apiException = (ApiException) e;
    24. // 华为帐号退出失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
    25. apiException.getStatusCode();
    26. }
    27. }
    28. });
    29. }

取消授权

为了提升应用隐私安全,应用可以提供入口,供用户取消对应用的授权。

取消授权接口通过调用AccountAuthService类对象的cancelAuthorization方法,实现取消授权。

  1. 您可以将如下cancelAuthorization方法绑定到取消授权按钮的onClick响应事件中,实现华为帐号取消授权功能。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. mBtnCancelAuthorization = (Button) findComponentById(ResourceTable.Id_btn_cancelauthorization);
    2. mBtnCancelAuthorization.setClickedListener((Component c) -> {
    3. cancelAuthorization();
    4. });

  2. 调用AccountAuthService类对象的cancelAuthorization方法,实现华为帐号取消授权功能。

    Java
    收起
    自动换行
    深色代码主题
    复制
    1. private void cancelAuthorization() {
    2. AccountAuthService accountAuthService;
    3. AccountAuthParams accountAuthParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setEmail().createParams();
    4. try {
    5. accountAuthService = AccountAuthManager.getService(accountAuthParams);
    6. } catch (ApiException e) {
    7. // 处理初始化登录授权服务失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
    8. e.getStatusCode();
    9. return;
    10. }
    11. // 调用取消授权接口
    12. Task<Void> task = accountAuthService.cancelAuthorization();
    13. task.addOnSuccessListener(new OnSuccessListener<Void>() {
    14. @Override
    15. public void onSuccess(Void v) {
    16. // 取消授权成功
    17. }
    18. });
    19. task.addOnFailureListener(new OnFailureListener() {
    20. @Override
    21. public void onFailure(Exception e) {
    22. // 取消授权失败
    23. if (e instanceof ApiException) {
    24. ApiException apiException = (ApiException) e;
    25. // 华为帐号取消授权失败,status code标识了失败的原因,请参见API参考中的错误码了解详细错误原因
    26. apiException.getStatusCode();
    27. }
    28. }
    29. });
    30. }

在 指南 中进行搜索
请输入您想要搜索的关键词