
# 登录
#### Login
**接口描述**
该接口用于登录。登录分为华为云会议账户登录和AppID登录，由authType参数决定。
**注意事项**
1. 创建会议，被邀入会等功能只有在登录后才能使用，若不登录，将无法体验完整会议功能。
2. 该接口为异步接口，返回值只代表接口是否调用成功，实际业务处理结果在对应的回调函数中返回。
**方法定义**
```
HWM_SDK_AGENT_API hwmsdk::HwmErrCode Login(HwmLoginInfo *loginInfo);
```
**回调函数**
```
virtual void OnLoginResult(hwmsdk::HwmErrCode ret, const char* reason, const HwmLoginResult* loginResult) {};
```
**参数描述**
表1结构体HwmLoginInfo 参数说明 
| 参数                         | 是否必须 | 类型                            | 描述                                                                                                                                    |
|:---|:---|:---|:---|
| authType                   | 是    | HwmAuthType                   | 登录类型。参考[表2](https://support.huaweicloud.com/sdkreference-meeting/meeting_basic_0002.html#ZH-CN_TOPIC_0269368563__table15737191012212) |
| accountAndPasswordAuthInfo | 否    | HwmAccountAndPasswordAuthInfo | 账号密码登录信息。选择"账号密码鉴权方式"时需要填写。                                                                                                           |
| appIdAuthInfo              | 否    | HwmAppIdAuthInfo              | App ID登录信息。选择"App ID鉴权方式"时需要填写。                                                                                                       |
   
表2结构体HwmAccountAndPasswordAuthInfo参数说明 
| 参数       | 是否必须 | 类型       | 描述    |
|:---|:---|:---|:---|
| account  | 是    | char\[\] | 登录账号。 |
| password | 是    | char\[\] | 登录密码。 |
   
表3结构体HwmAppIdAuthInfo参数说明 
| 参数          | 是否必须 | 类型        | 描述                                          |
|:---|:---|:---|:---|
| thirdUserId | 是    | char\[\]  | 第三方用户ID。                                    |
| corpId      | 否    | char\[\]  | 设置该用户所在的企业ID。仅在SP模式下需要填写，单企业模式不要填写，否则会鉴权失败。 |
| userName    | 否    | char\[\]  | 用户名称(如不填，默认与thirdUserId一致)。                 |
| signature   | 是    | char\[\]  | 从第三方服务端获取的鉴权签名。                             |
| nonce       | 是    | char\[\]  | 从第三方服务端获取的Nonce值，用于华为云服务端验证鉴权签名有效性。         |
| expireTime  | 是    | long long | 从第三方服务端获取的鉴权签名有效期的时间戳。0表示永不超时。              |
| email       | 否    | char\[\]  | 用户邮箱信息。                                     |
| phoneNumber | 否    | char\[\]  | 用户手机号码。                                     |
| deptCode    | 否    | char\[\]  | 部门ID                                        |
   
**返回值**
表4返回值 
| 类型             | 描述                                                                                                           |
|:---|:---|
| HwmErrCode     | 成功返回0，其他值表示失败。失败返回值见[错误码参考](https://support.huaweicloud.com/sdkreference-meeting/meeting_control_0022.html)。 |
| HwmLoginResult | 登录结果信息。                                                                                                      |
   
表5结构体HwmLoginResult参数说明 
| 参数           | 类型       | 描述                     |
|:---|:---|:---|
| userUuid     | char\[\] | UUID(由系统分配的真实的唯一用户标识)。 |
| account      | char\[\] | 账号。                    |
| thirdAccount | char\[\] | 第三方账号。                 |
   
**示例代码**
```
/**
* 登录处理
*/
int demoLoginDlg::Login()
{
    int ret;
    //设置App ID登录参数
   /**
    *.此处省略第三方服务器做的数据转换，最后获取到nonce和signature
    */
    strncpy_s(loginParam.appIdAuthInfo.thirdUserId, GetUserId().c_str(), HWM_MAX_USER_ID_LEN);
    strncpy_s(loginParam.appIdAuthInfo.userName, GetUserName().c_str(), HWM_MAX_USER_NAME_LEN);
    strncpy_s(loginParam.appIdAuthInfo.signature, GetSignature().c_str(), HWM_MAX_SIGNATURE_LEN);
    strncpy_s(loginParam.appIdAuthInfo.nonce, GetNonce().c_str(), HWM_APPID_NONCE_LEN );
    strncpy_s(loginParam.appIdAuthInfo.email, GetEmail().c_str(), HWM_MAX_EMAIL_LEN);
    strncpy_s(loginParam.appIdAuthInfo.phoneNumber, GetPhoneNumber().c_str(), HWM_MAX_PHONE_NUM_LEN);
    loginParam.appIdAuthInfo.expireTime = 1598398920; // utc时间，单位s
    loginParam.authType = hwmsdkagent::HWM_AUTH_TYPE_APPID;
    //调用登录接口
    ret = hwmsdkagent::Login(&loginParam);
    return ret;
}
```
