在使用 SDK 进行音视频通话之前,您需要首先进行 SDK 初始化和用户登录。云视讯平台为每个用户提供唯一的账号标识,支持多种登录方式以满足不同的业务场景需求。
在使用任何功能之前,必须先初始化 SDK:
// 创建回调接口
INemoSDKCallbacks* callbacks = new MySDKCallbacks();
// 配置SDK参数
XYConfigs configs;
configs.appId = "your_app_id";
configs.appSecret = "your_app_secret";
// 初始化 SDK
NemoSdkAdaptor::getInstance()->startup(callbacks, configs);
// 可选:设置服务器地址
NemoSdkAdaptor::getInstance()->setRemoteServer("your_server_url");
// 可选:设置 UserAgent
NemoSdkAdaptor::getInstance()->setUserAgent("your_app_name/version");
初始化完成后,选择合适的登录方式进行用户登录。
通过回调函数监听登录状态变化:
void onLoginStateChanged(SDKLoginState state, const XYString& code, const SDKLoginInfo& info)
{
// 处理登录状态变化
}
适用于已在小鱼管理后台创建账户的用户。
API: loginXYLinkAccount
接口定义:
virtual void loginXYLinkAccount(const char* userName, const char* password, const char* enhancePassword = "false") = 0;
参数:
userName
: const char* - 用户名password
: const char* - 密码enhancePassword
: const char* - 是否为强密码,默认"false"示例:
// 普通密码登录
NemoSdkAdaptor::getInstance()->loginXYLinkAccount("username", "password");
// 强密码登录
NemoSdkAdaptor::getInstance()->loginXYLinkAccount("username", "password", "true");
适用于已有用户账户系统的业务场景,支持使用业务系统中的用户账户登录云视讯平台。
API: loginExtUserId
接口定义:
virtual void loginExtUserId(const char* extId, const char* displayName, const char* extUID, const char* authCode) = 0;
参数:
extId
: const char* - 企业标志,联系小鱼销售人员获取displayName
: const char* - 显示名称,不能包含以下字符 ';' ':' ',' '=' '-' '(' ')' '[' ']' '{' '}' '@' '#' '*' '\' '\r' '\n' '\t'extUID
: const char* - 第三方用户ID,同一企业不能相同authCode
: const char* - 授权码示例:
NemoSdkAdaptor::getInstance()->loginExtUserId("extId", "displayName", "extUID", "authCode");
适用于已有有效 token 的场景。
API: loginExtToken
接口定义:
virtual void loginExtToken(const char* extId, const char* token) = 0;
参数:
extId
: const char* - 企业标志,联系小鱼销售人员获取token
: const char* - token示例:
NemoSdkAdaptor::getInstance()->loginExtToken("extId", "your_token");
支持使用验证码进行登录,适用于忘记密码或需要二次验证的场景。
接口定义:
virtual void loginXYLinkByVerifyCode(const char* phoneNum, const char* identificationNum, const char* account = "", bool needVerifyPwdSecurity = true) = 0;
参数:
phoneNum
: const char* - 手机号identificationNum
: const char* - 验证码account
: const char* - 账号,默认空字符串needVerifyPwdSecurity
: bool - 是否需要验证密码安全策略,默认true示例:
// 使用手机号和验证码登录
NemoSdkAdaptor::getInstance()->loginXYLinkByVerifyCode("13800138000", "123456");
// 指定账号登录
NemoSdkAdaptor::getInstance()->loginXYLinkByVerifyCode("13800138000", "123456", "username");
// 不验证密码安全策略
NemoSdkAdaptor::getInstance()->loginXYLinkByVerifyCode("13800138000", "123456", "", false);
适用于链接入会等临时使用场景。
API: anomousLogin
示例:
NemoSdkAdaptor::getInstance()->anomousLogin();
支持基于缓存的自动登录,无需重新输入账号密码。
API: autoLogin
示例:
NemoSdkAdaptor::getInstance()->autoLogin();
支持新用户注册并自动登录。
API: newUserRegistration
示例:
NemoSdkAdaptor::getInstance()->newUserRegistration("username", "password", "email");
支持单点登录。
API: SSOLogin
示例:
NemoSdkAdaptor::getInstance()->SSOLogin("sso_token");
API: sendVerifyCodeShortMessage
示例:
NemoSdkAdaptor::getInstance()->sendVerifyCodeShortMessage("phone_number");
API: checkVerifyCode
示例:
NemoSdkAdaptor::getInstance()->checkVerifyCode("phone_number", "verify_code");
API: getVerifyImage
示例:
NemoSdkAdaptor::getInstance()->getVerifyImage();
API: checkVerifyImage
示例:
NemoSdkAdaptor::getInstance()->checkVerifyImage("drag_position");
class LoginManager {
private:
bool _isLoggedIn = false;
QString _callUri;
public:
void initializeSDK() {
// 初始化 SDK
NemoSdkAdaptor::getInstance()->startup();
// 设置服务器(可选)
// NemoSdkAdaptor::getInstance()->setRemoteServer("https://your-server.com");
// 设置 UserAgent(可选)
NemoSdkAdaptor::getInstance()->setUserAgent("MyApp/1.0.0");
}
void loginWithXYAccount(const QString& username, const QString& password) {
NemoSdkAdaptor::getInstance()->loginXYLinkAccount(username.toStdString(), password.toStdString());
}
void loginWithExternalAccount(const QString& extID, const QString& extUserId, const QString& displayName) {
NemoSdkAdaptor::getInstance()->loginExternalAccount(
extID.toStdString(),
extUserId.toStdString(),
displayName.toStdString()
);
}
void loginWithToken(const QString& token) {
NemoSdkAdaptor::getInstance()->loginExtToken(token.toStdString());
}
void sendVerifyCode(const QString& phoneNumber) {
NemoSdkAdaptor::getInstance()->sendVerifyCodeShortMessage(phoneNumber.toStdString());
}
void logout() {
NemoSdkAdaptor::getInstance()->logout();
}
// 登录状态变化回调
void onLoginStateChanged(SDKLoginState state, const XYString& code, const SDKLoginInfo& info) {
QString errCode(code.str());
_isLoggedIn = (errCode == SDKError_NoError && state == SDKLoginState_LoggedIn);
qDebug() << "Login state changed: state=" << state
<< ", error=" << errCode
<< ", uri=" << info.callUri.str()
<< ", uid=" << info.userId;
if (_isLoggedIn) {
_callUri = QString(info.callUri.str());
qDebug() << "Login successful, call URI:" << _callUri;
}
// 发送登录结果信号
emit loginResult(state, errCode, info);
}
// 验证码发送结果回调
void onSendVerifyCodeShortMessageResult(const XYString& code, const XYString& message) {
QString errCode(code.str());
QString errMessage(message.str());
if (errCode == SDKError_NoError) {
qDebug() << "Verify code sent successfully";
} else {
qDebug() << "Failed to send verify code:" << errMessage;
}
}
// 验证码验证结果回调
void onCheckVerifyCodeResult(const XYString& code, const XYString& message) {
QString errCode(code.str());
QString errMessage(message.str());
if (errCode == SDKError_NoError) {
qDebug() << "Verify code validated successfully";
} else {
qDebug() << "Verify code validation failed:" << errMessage;
}
}
bool isLoggedIn() const {
return _isLoggedIn;
}
QString getCallUri() const {
return _callUri;
}
};
状态 | 说明 |
| 正在登录中 |
| 登录成功 |
| 已登出 |
| 登录失败 |
常见错误码及处理方式:
错误码 | 描述 | 处理方式 |
| 正常 | 登录成功 |
| 初始化失败 | 检查SDK是否正确初始化 |
| 超时 | 检查网络连接,重试登录 |
| 网络异常 | 检查网络连接状态 |
| 账号尚未注册 | 先注册账号或使用其他登录方式 |
| 用户名或密码不正确 | 检查账号密码是否正确 |
| 账号不存在 | 检查账号是否正确或先注册 |
| 密码错误 | 检查密码是否正确 |
| 验证码错误 | 检查验证码是否正确 |
| token无效 | 重新获取有效token |
| token过期,请重新登录 | 重新登录获取新token |
| 账号被锁定 | 联系管理员解锁账号 |
| 服务异常 | 联系技术支持 |
更多错误码请查看:SDK回调错误码XYError
displayName
参数不能包含特定特殊字符方法 | 描述 | 链接 |
小鱼账号登录 | ||
第三方账户登录 | ||
Token 登录 | ||
验证码登录 | ||
匿名登录 | ||
自动登录 | ||
新用户注册 | ||
SSO登录 | ||
登出 |
方法 | 描述 | 链接 |
获取验证码 | ||
验证验证码是否正确 | ||
获取图形验证码 | ||
检验图形验证码拖拽位置是否正确 |
回调 | 描述 | 链接 |
登录状态变化回调 | ||
被踢出回调 | ||
发送验证码结果回调 | ||
验证验证码结果回调 | ||
获取图形验证码结果回调 | ||
验证图形验证码结果回调 | ||
获取用户完整信息回调 | ||
更新用户资料结果回调 | ||
获取企业信息结果回调 | ||
获取第三方平台结果回调 | ||
服务器配置变化回调 | ||
客户端配置结果回调 |
数据结构 | 描述 | 链接 |
登录信息 | ||
Token登录参数 | ||
第三方平台信息 | ||
SSO信息 |
枚举 | 描述 | 链接 |
登录状态枚举 | ||
验证码类型枚举 | ||
验证码设备枚举 |