订阅华为账号的登录/登出事件
==============

#### 场景介绍

应用在前台时可以订阅Account Kit提供的华为账号登录/登出广播事件，来感知华为账号的登录状态，实现用户登录/登出应用的逻辑。应用也可通过[getHuaweiIDState](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/account-api-authentication#gethuaweiidstate)实时查询华为账号登录状态。

#### 事件说明

以下是华为账号登录/登出发送的广播事件。

| 事件名称 | 描述 |
| :-- | :-- |
| [COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGIN](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/commoneventmanager-definitions#common_event_distributed_account_login) | 表示分布式账号登录成功的动作。华为账号登录成功也会发这个广播事件。 |
| [COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGOUT](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/commoneventmanager-definitions#common_event_distributed_account_logout) | 表示分布式账号登出成功的动作。华为账号登出成功也会发这个广播事件。 |

#### 开发前提

在进行代码开发前，请确保已按照“开发准备”章节中的指导完成[配置签名和指纹](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-sign-fingerprints)、[配置Client ID](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-client-id)。此场景无需申请账号权限。

#### 开发步骤

1.  导入[commonEventManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-commoneventmanager)模块及相关公共模块。
    
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
    
2.  创建订阅者，并处理订阅结果。
    
    // 订阅者信息
    const subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
      events: \[commonEventManager.Support.COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGIN,
        commonEventManager.Support.COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGOUT\]
    };
     let subscriber: commonEventManager.CommonEventSubscriber | null = null;
    
    // 创建订阅者
    commonEventManager.createSubscriber(subscribeInfo)
      .then((commonEventSubscriber: commonEventManager.CommonEventSubscriber) => {
        subscriber = commonEventSubscriber;
        // 订阅公共事件
        commonEventManager.subscribe(subscriber,
          (error: BusinessError, data: commonEventManager.CommonEventData) => {
            if (error) {
              hilog.error(0x0000, 'testTag',
                \`Failed to subscribe, code is ${error.code}, message is ${error.message}\`);
            } else {
              hilog.info(0x0000, 'testTag', 'Succeeded in subscribing.');
              if (data.event === commonEventManager.Support.COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGIN) {
                // 订阅到华为账号登录事件
              }
              if (data.event === commonEventManager.Support.COMMON\_EVENT\_DISTRIBUTED\_ACCOUNT\_LOGOUT) {
                // 订阅到华为账号登出事件
              }
            }
          });
      })
      .catch((err: BusinessError) => {
        hilog.error(0x0000, 'testTag', \`Failed to createSubscriber. Code: ${err.code}, message: ${err.message}\`);
      });