登录登出

登录集成必读

手动登录

正常登录会收到三次回调,分别表示登录的不同过程,登录过程中的不同步骤和返回的错误码参考 枚举 NIMLoginStep 和 NIMResCode说明。 当登录步骤为 nim::kNIMLoginStepLogin 并且 错误码为 nim::kNIMResSuccess 时表明登录成功。

static bool Login (const std::string &app_key, const std::string &account, const std::string &password, const LoginCallback &cb, const std::string &json_extension="")
参数 类型 必须 说明
app_key string 注册的云信APP KEY
account string 账号
password/token string 密码
cb/handler function 登录流程的回调函数
json_extension string json扩展参数(备用,目前不需要)
void OnLoginCallback(const nim::LoginRes& login_res, const void* user_data)
{
    if (login_res.res_code_ == nim::kNIMResSuccess)
    {
        if (login_res.login_step_ == nim::kNIMLoginStepLogin)
        {
            //登录成功
        }
    }
    else
    {
        //登录过程出现错误
    }
}

void foo()
{
    nim::Client::Login(app_key, "app acount", "token", &OnLoginCallback);
}

自动登录

SDK 在网络连接断开后,会监听网络状况,开发者可以通过注册连接断开广播通知,在通知的回调函数中开发者只要根据需要打印log或通知用户即可。

登出

应用层登出/注销自己的账号时需要调用 SDK 的登出操作, 该操作会通知云信服务器断开连接。在调用 Logout 时需要设置正确的 NIMLogoutType 参数。清理SDK必须在完全退出(收到退出回调)后执行。

/** @fn void Logout(nim::NIMLogoutType logout_type, const LogoutCallback& cb, const std::string& json_extension = "")
* NIM客户端注销/退出
* @param[in] logout_type Logout操作类型,其定义见nim_client_def.h
* @param[in] cb 注销/退出的回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
* @note 错误码
*/
static void Logout(NIMLogoutType logout_type
    , const LogoutCallback& cb
    , const std::string& json_extension = "");
logout_type 说明
kNIMLogoutChangeAccout 1 注销/切换帐号(返回到登录界面)
kNIMLogoutKickout 2 被踢(返回到登录界面)
kNIMLogoutAppExit 3 程序退出
kNIMLogoutRelogin 4 重连操作,包括保存密码时启动程序伪登录后的重连操作以及掉线后的重连操作(帐号未变化)
void LoginCallback::OnLogoutCallback(nim::NIMResCode res_code)
{
    //如果是退出程序需要调用nim::Client::Cleanup() 然后退出进程
    //如果是登出到登录界面,这里不能执行清理SDK工作,否则会报错
}

void foo()
{
    //登出到登录界面(nim::kNIMLogoutChangeAccout) 或者 退出程序(nim::kNIMLogoutAppExit)
    nim::Client::Logout(nim::kNIMLogoutAppExit, &OnLogoutCallback);
}

多端登录

通过提前注册全局的多端登录广播通知,当用户在某个客户端登录或登出时,其他没有被踢掉的端会触发这个通知的回调函数,并携带当前时间登录的设备列表的数据。

static void RegMultispotLoginCb (const MultiSpotLoginCallback &cb, const std::string &json_extension="")
void LoginCallback::OnMultispotLoginCallback(const nim::MultiSpotLoginRes& res)
{
    //通过res参数获取登录或登出设备信息
}
nim::Client::RegMultispotLoginCb(&nim_comp::LoginCallback::OnMultispotLoginCallback);

互踢

通过接口nim::Client::RegKickoutCb来注册被踢出回调函数,当收到此通知时,一般是退出程序然后回到登录窗口,回调函数参数中详细说明了被踢出的原因。 网易云通信内置踢人策略为:移动端(Android,iOS)互踢,桌面端(PC,Web)互踢,移动端和桌面端共存。 如果当前的互踢策略无法满足业务需求的话,可以联系我们取消内置互踢,根据多端登录的回调和当前的设备列表,判断本设备是否需要被踢出。如果需要踢出,直接调用登出接口并在界面上给出相关提示即可。

static void RegKickoutCb (const KickoutCallback &cb, const std::string &json_extension="")
void OnKickoutCallback(const nim::KickoutRes& res)
{
    //处理被其他端踢下线
}

void foo()
{
    nim::Client::RegKickoutCb(&OnKickoutCallback);
}