智慧服务,成就美好体验 项目咨询

主页 > 服务与支持 > 开发平台 > 客户端SDK参考 > Android Native SDK > 登陆与注销 登录与注销

入门使用

登录与注销

更新时间:2019-11-20

用户登录

描述

在使用CloudEC解决方案下的各类业务之前,需要向服务器完成登录。不再使用业务时需注销,确保业务接口使用的安全性。

说明: 

登录成功后,SDK自动按保活周期定时刷新鉴权凭证信息。

前提条件

已完成初始化。

业务流程

图1 登录处理流程 
  1. UI调用TsdkLoginManager的login()方法进行登录,参数为TsdkLoginParam类。包括用户ID、鉴权类型、用户帐户和密码(或Tiket)以及服务器信息。
    说明: 
    1. 用户ID,由应用程序生成的标识,用于关联用户帐户。
    2. 如果用户选择使用“密码鉴权”登录,则鉴权类型取值为TSDK_E_AUTH_TYPE,帐户的用户名和密码必需填写;如果用户选择使用第三方认证登录,则鉴权类型取值为TSDK_E_AUTH_TICKET,帐户的ticket值必须填写,取值为第三方提供的token值。
    3. 服务器类型取值TSDK_E_SERVER_TYPE,暂仅支持TSDK_E_SERVER_TYPE_PORTAL。
    代码示例:
    //Java code
    TsdkLoginParam tsdkLoginParam = new TsdkLoginParam();
    tsdkLoginParam.setUserId(1);
    tsdkLoginParam.setAuthType(TsdkAuthType.TSDK_E_AUTH_NORMAL);
    tsdkLoginParam.setUserName(loginParam.getUserName());
    tsdkLoginParam.setPassword(loginParam.getPassword());
    tsdkLoginParam.setServerAddr(loginParam.getServerUrl());
    tsdkLoginParam.setServerPort(loginParam.getServerPort());
    tsdkLoginParam.setServerVersion("");
    tsdkLoginParam.setServerType(TSDK_E_SERVER_TYPE_PORTAL);
    tsdkLoginParam.setUserTicket("");
    
    ret = TsdkManager.getInstance().getLoginManager().login(tsdkLoginParam);
    
     
  2. SDK收到服务器的鉴权登录响应后,向UI上报鉴权成功事件onEvtAuthSuccess。
    说明: 
    1. 如果鉴权失败,将不能进行下一步操作,也不会有业务帐号和配置信息上报。
    代码示例:
    //Java code
    public void onEvtAuthSuccess(int userId, TsdkImLoginParam imLoginParam) {
        LogUtil.e(TAG, "authorize success.");
        // 启动IM的登录
        if (TsdkManager.getInstance().getAppInfo().getSupportIm() == 1 && null != imLoginParam) {
            ImAccountInfo imAccountInfo = new ImAccountInfo();
            imAccountInfo.setAccount(imLoginParam.getAccount());
            imAccountInfo.setToken(imLoginParam.getToken());
            String[] MaaUri = imLoginParam.getMaaServerUri().split(":");
            imAccountInfo.setMaaServer(MaaUri[0]);
            imAccountInfo.setMaaServerPort(Integer.valueOf(MaaUri[1]));
            imAccountInfo.setPassword(imLoginParam.getPassword());
            imAccountInfo.setPushServer(imLoginParam.getPushServerUri());
    
            sendHandlerMessage(LoginEvent.LOGIN_E_EVT_AUTH_SUCCESS.getIndex(), imAccountInfo);
        }
    }
    
     
  3. SDK收到服务器的鉴权登录响应后,向UI上报VOIP帐号信息事件onEvtVoipAccountStatus。
    说明: 

    如果登录成功,会上报帐号短号号码,UI应保存此号码,以方便后续操作。

    代码示例:
    //Java code
    public void onEvtVoipAccountStatus(int userId, TsdkVoipAccountInfo voipAccountInfo ) {
        LogUtil.e(TAG, "voip account status: " );
    
        this.sipNumber = voipAccountInfo.getNumber();
        if (!voipAccountInfo.getTerminal().equals("")) {
            this.terminal = voipAccountInfo.getTerminal();
        }
    }
    
     
  4. 登录成功之后,SDK向UI上报登录成功事件onEvtLoginSuccess,UI做相应的界面处理。
    说明: 

    有时候会出现鉴权成功,但是voip登录失败的情况。可修改初始化时的参数productName来解决。

    代码示例:
    //Java code
    public void onEvtLoginSuccess(int userId) {
        LogUtil.i(TAG, "voip login success");
        this.loginEventNotifyUI.onLoginEventNotify(LoginConstant.LoginUIEvent.LOGIN_SUCCESS, userId, "voip login success");
    }
    
     

注意事项

无。

用户主动注销

描述

不再使用业务时需注销,确保业务接口使用的安全性。

前提条件

登录成功。

业务流程

图2 注销处理流程 
  1. UI调用TsdkLoginManager的logout()方法发起注销。
    代码示例:
    //Java code
    public void logout() {
        int ret = TsdkManager.getInstance().getLoginManager().logout();
        if (ret != 0) {
            LogUtil.e(TAG, "login is failed, return " + ret);
        }
        ImMgr.getInstance().imLogout();
    }
    
     
  2. 登出成功之后,向UI上报登出成功事件onEvtLogoutSuccess。

注意事项

无。

服务器强制注销

描述

不再使用业务时需注销,确保业务接口使用的安全性。

前提条件

登录成功。

业务流程

图3 服务器强制注销处理流程 
说明: 

用户帐号在其他位置登录时,服务器会通知应用程序注销本地帐号。

  1. SDK收到服务器的强制登出通知消息后,向UI上报强制登出事件onEvtForceLogout。
  2. UI调用TsdkLoginManager的logout()方法完成登出过程。

注意事项

无。

断网重连

应用程序监测到断网重连,应根据预先配置的策略确定是否自动发起登录流程,若预配置,则发起登录流程,与普通的“登录”流程相同。

密码修改

描述

用户可以通过该接口修改自己的帐号的密码。

前提条件

登录成功。

业务流程

图4 修改密码处理流程 
  1. UI调用TsdkLoginManager的modifyPassword()方法修改当前登录账号密码。
    代码示例:
    //Java code
    public int modifyPwd(String newPwd, String oldPwd) {
        TsdkModifyPasswordParam modifyPasswordParam = new TsdkModifyPasswordParam(newPwd, oldPwd);
        int ret = TsdkManager.getInstance().getLoginManager().modifyPassword(modifyPasswordParam);
        if (ret != 0) {
            LogUtil.e(TAG, "modifyPwd is failed, return " + ret);
        }
    
        return ret;
    }
    
     
  2. SDK在收到服务器返回的密码修改结果响应后,通过TsdkNotify对象中的onEvtModifyPasswordResult()方法向UI上报密码修改结果。

    代码示例:

    //Java code
    @Override
    public void onEvtModifyPasswordResult(int userId, final TsdkCommonResult result) {
    	Log.i(TAG, "onEvtModifyPasswordResult notify.");
    	LoginMgr.getInstance().handModifyPasswordResult(result);
    }